0
<< предыдущая заметкаследующая заметка >>
21 апреля 2011
Как взломать дневник

Интеллигентный вежливый лось хакер dePuff поломал мой дневник и получил админский доступ. И разместил, как некоторые заметили, свой пост: http://lleo.aha.ru/dnevnik/2011/04/05.html

Красота и элегантность данного хака вызывает полное умиление и восторг. Как оказалось (после объяснений dePuff) некоторые старые конфигурации PHP (сюрприз!) несут в себе опцию register_globals в состоянии on. Это очень архаичная редкая конфигурация, но на Зеноне она именно такая — очень старый хостинг, опцию здесь держат для совместимости, иначе посыпятся сайты старой выделки, которые это использовали.

В чем смысл опции? С нею все входящие переменные попадают в глобальное пространство имен. Например, переменные $_GET, $_POST, $_REQUEST, $_COOKIE. Например, стоит обратиться к скрипту как script.php?vasya=1 — и добрый PHP тут же создает тебе глобальную переменную $vasya, присваивая ей значение 1.

Я об этом понятия не имел (хотя, признаюсь, у меня были шансы догадаться — как теперь вспоминаю, один раз я лично заметил подозрительное попадание кук в глобальное пространство, но значения не придал и разбираться не стал). Поэтому переменные я не только не инициализировал, а наоборот, проверял всякие подключаемые модули именно значением переменных (как вы увидите чуть ниже).

Далее dePuff нашел в моем коде подходящий модуль /module/stat.php, начинавшийся такими словами:

<?php
if(!isset($admin_name)) die("Error 404");

$blogs="blogs.txt";

$l=file_get_contents($host_log.$blogs);

if(!isset($_GET['link'])) die("<pre>$l</pre>");

...

После чего dePuff вызвал напрямую /module/stat.php?admin_name=1&host_log=../config.php%00

Проверка на $admin_name провалилась, а $host_log с конечным символом %00 символизировало конец строки, остановив выполнение прочих строчных директив (есть у PHP и такая особенность). Так стала видна святая святых — содержимое config.php. Ну и дальше, понятно, админский доступ.

Очень красиво и очень поучительно. По словам dePuff, это заняло у него 15 минут. Глубочайший решпект перед великим мастерством!

Владельцы остальных движков могут не волноваться (хотя советую обновиться до последней версии) — я проверил, благотворная для данного хака особенность хостинга была только у меня и еще у одного человека (я с ним безуспешно пытался связаться все это время, но он не отвечал, пришлось мне самому использовать хак, чтобы обновить ему движок до последней версии — сорри за вторжение). Последняя версия движка лишена этого бага во всех файлах (я почистил всё), а чтобы наверняка отключить поганую опцию, можно добавить в .htaccess строчку:

php_flag register_globals off

Но хакера dePuff я теперь аццки боюсь, хотя он добрый, вежливый и пишет прекрасные посты ;) И вы бойтесь. Вот такая поучительная история.

Надо сказать, что за всю двухлетнюю историю развития моего движка это четвертая критическая уязвимость в коде (кликаем на тэг «уязвимость»). Одну я обнаружил сам, две — подсказали добрые люди, читавшие исходники, благо исходники открыты. Много это или мало для такого проекта, сделанного в одиночку — не знаю, думаю, что непростительно много. Обязуюсь над собой работать.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows IE
0
0
D.iK.iJ
Это великолепно... И очень по-доброму.
А уязвимостей становится больше с размером движка. Может и еще что-то найдут. Особенно если конкурс будет ))))
Nokia-E90 Safari
 Москва
5
0
lleo Nokia E90
Этот человек не загрузил свой юзерпик, и я подобрал ему этот. Человек, пишущий такое, должен именно так выглядеть, верно?
Для того и исходники открыты.
<< предыдущая заметка следующая заметка >>