PHP addcslashes() vulnerabilitiy

Discussion in 'Уязвимости' started by Евгений Минаев, 5 Jan 2008.

  1. Евгений Минаев

    Евгений Минаев Elder - Старейшина

    Joined:
    12 Nov 2007
    Messages:
    55
    Likes Received:
    169
    Reputations:
    159
    PHP функция addcslashes экранирует спецсимволы в стиле языка C , является аналогом addslashes с возможностью указывать свой набор символов для экранирования . Некорректно работает с некоторыми спецсимволами , а именно null byte считает концом строки.

    PHP:
    echo addcslashes "some\0thing" '\'' );
    ->
    some
    PHP:
    echo addcslashes "some\0thing'" chr(0).'..\'' );
    -> 
    some\000thing\
     
    1 person likes this.
  2. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,857
    Likes Received:
    1,962
    Reputations:
    594
    символы с Ascii менее 32 и более 126 преобразуются в восьмеричное представление.
    На выходе должно быть тоже что и на входе:
    Code:
    echo addcslashes ( "some\0thing" , '\'' ); 
    ->some\0thing
    
    но \0 нулевой байт интерпретируется как конец стироки, так?
    Во втором примере экранируются все символы из диапазона от chr(0) до одинарной кавычки, должно быть на выходе:
    Code:
     echo addcslashes ( "some\0thing'" , chr(0).'..\'' ); 
    -> some000thing\'
    
    , потому как \0 преобразовался в восьмеричное представление 000, а вот почему пропала кавычка? её в аргументе тоже надо было экранировать?

    P.S. В тэгах php тут на форуме тоже иногда пропадают экранирующие слэши, лучше в code заключать, потому что я не уверен, что в посте вывелось то, что реально в php выводится...
     
    #2 -=lebed=-, 5 Jan 2008
    Last edited: 5 Jan 2008
    1 person likes this.