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

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Уязвимости (https://forum.antichat.xyz/forumdisplay.php?f=74)
-   -   [новый способ] замена нулл-байту в инклудах (https://forum.antichat.xyz/showthread.php?t=98525)

[Raz0r] 29.12.2008 19:12

[новый способ] замена нулл-байту в инклудах
 
Просматривая забугорный форум sla.ckers.org, обнаружил новый способ, позволяющий отбросить любое значение, в частности расширение файла, в инклудах без использования нулл-байта. Как известно, нулл-байт экранируется при magic_quotes_gpc=on, поэтому это зачастую создает трудности при эксплуатировании LFI.

Способ заключается в том, что расширение можно отбросить, если до него предшествует последовательность символов, при чем длина этой последовательности может различаться в зависимости от OS. Где в коде PHP находится уязвимость пока сказать сложно, но вполне ясно, что она связана с теми же особенностями, которые ведут к проблемам с нулл-байтом, т.е. все исходит из C, на котором написан PHP. К сожалению, уязвимость не позволяет выбраться из текущей папки просто дописав перед значением ../, но мной был найден способ обхода (также зависит от OS).

1. *nix

Символы, составляющие последовательность:

0x2F / (не экранируется)

Длина полного пути *:
*getcwd() + DIRECTORY_SEPARATOR + имя файла + последовательность символов

4095 Linux
1023 FreeBSD

Пример:

http://localhost/test.php?lol=inc.php//////////////////////[...]

Выход за пределы текущей папки:

http://localhost/test.php?lol=existing_dir/../../inc.php//////////////////////[...]
где existing_dir имя существующей папки
в некоторых версиях PHP (e.g. 5.1.2) на linux имя папки может быть любым

2. windows
В windows имеются значительные отличия в зависимости от версии PHP. Почти в каждой версии имеются свои особенности.

Символы, составляющие последовательность:


0x20 пробел
  • не экранируется
  • работает во всех версиях
  • не работает при использовании способа с выходом из текущей директории

0x22 "
  • экранируется
  • работает в PHP => 5.2.0
  • не работает при использовании способа с выходом из текущей директории

0x2E .
  • не экранируется
  • работает во всех версиях
  • работает при использовании способа с выходом из текущей директории

0x3C <
  • не экранируется
  • работает в PHP => 5.2.0
  • не работает при использовании способа с выходом из текущей директории

0x3E >
  • не экранируется
  • работает в PHP => 5.2.0
  • не работает при использовании способа с выходом из текущей директории

0x2f /
  • не экранируется
  • работает во всех версиях, но в PHP => 5.2.0 только при условии, если отсутствует точка в отбрасываемом значении
  • работает при использовании способа с выходом из текущей директории, но лишь в некоторых версиях

0x5c \
  • экранируется
  • работает во всех версиях, но в PHP => 5.2.0 только при условии, если отсутствует точка в отбрасываемом значении
  • работает при использовании способа с выходом из текущей директории, но лишь в некоторых версиях


а также различные вариации с точкой:
./
.\
. (пробел)
.//.//
.\\.\\
etc

Длина полного пути *:
*getcwd() + DIRECTORY_SEPARATOR + имя файла + последовательность символов

PHP 4.4.2, 5.1.2, 5.2.6
265 если присутствует точка в отбрасываемом значении
266 если отсутствует

PHP 4.4.4, 4.4.9, 5.2.0
258 если присутствует точка в отбрасываемом значении
259 если отсутствует точка в отбрасываемом значении

Пример:

http://localhost/test.php?lol=inc.php.......................[...]
http://localhost/test.php?lol=inc.php<<<<<<<<<<<[...]

Выход за пределы текущей папки:

http://localhost/test.php?lol=exsiting_dir/../../inc.php............................[...]
http://localhost/test.php?lol=nonexsiting_dir/../../inc.php............................[...]
где nonexsiting_dir имя любой папки, даже несуществующей

Вывод исследования:
для windows универсальный символ для последовательности в векторе атаки это точка (.);
минимальная универсальная длина этой последовательности - 266 символов

в *nix единственным и универсальным символом является слэш (/);
минимальная универсальная длина последовательности - 4095 символов;

Для эксплуатации LFI в реальных условиях необходимо рассчитывать длину последовательности с учетом максимальной длины URL, которую способен принять веб-сервер. Если, например, сервер имеет ограничение URL < 4096 байт, а система работает на linux, то реализовать уязвимость не удастся


Информация конечно не совсем приватная, но пока что распространение она не получила.
Оригинальный топик: http://sla.ckers.org/forum/read.php?16,25706

Chaak 29.12.2008 20:17

Цитата:

Длина последовательности:

От 900 до 4000.
Если только в посте :( Думаю сервер врятли разрешит слишком длинную url
Цитата:

Длина последовательности:

230 на winxp 32 bit
243 на vista 32 bit
а вот 230 возможно...

[Raz0r] 29.12.2008 20:49

Длина максимального URL зависит от конфигурации веб-сервера. Апач по умолчанию держит 4096 байт, как раз достаточно дле реализации уязвимости
http://paradigm.ru/2007/12/19/url-max-length/

Chaak 29.12.2008 21:25

Значит нормально

P.S на локалхосте стоит ограничение 512 по-умолчанию

[Raz0r] 29.12.2008 21:31

в смысле на локалхосте? я про веб-сервер, апач он и на локалхосте апач )
з.ы. у меня на локалхосте ограничение 4096 байт )

ShAnKaR 29.12.2008 22:10

интересно конечно, у кого нибудь сработало?

[Raz0r] 29.12.2008 22:12

ShAnKaR, проверь сам и убедись ) все работает

Spyder 29.12.2008 22:23

да, интерсно
*пошёл копать дедокрученые инклуды

Chaak 29.12.2008 22:26

B вправду)

Цитата:

http://localhost/?file=favicon.ico%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C% 3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C %3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3 C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C
PHP код:

<?php
include($_GET['file'].'.php');
?>


SQLHACK 30.12.2008 00:28

Напишите у кого какие версии всего софта, ось, пхп, апач, способ подключения пхп к апачу.
Что то у меня не работает данная конструкция, если у кого то это работает то отпишите на каких настройках.

PHP код:

<?php
$_GET
['inc'] = "/1.txt";
for(
$x=1;$x<=230;$x++){
    
//$_GET['inc'] .= urldecode("%3C");
            
$_GET['inc'] .= "<";            
}
include(
"Z:\\home\\localhost\\www".$_GET['inc']."some.txt");
?>



Время: 21:00