Всем привет, данная статья не очень прям серьезная, а чисто как "эксперимент" что ли... , но она касается фришных *******ов, которые работают по принципу прямой отправки без шифрования ***** в телеграм, либо дискорд по токену/вебхуку. Так вот. Мы можем не просто перехватывать ****, спамить в чаты, а также подсадить потенциального злоумышленника на нашего зверька, коль тупость может оказаться у него больше. Для себя я выделил несколько *******ов: это Empyrean ******* (на C#), 44Caliber (Написан на C#), ну и остался Umbral *******, тоже написанный на C# На его разборе мы и посмотрим как можем добраться до вебхука и почему не всегда получается достать его посредством простого залития на VT, либо еще какой-нибудь дефолтный сандбокс. Приступим, для начала нам нужнен подопытный, найти его можно на Hatching-е, по поиску аллертом YARA: familly:Umbral По стандарту закидываем в ExePEINFO C#, значит летим во всеми известный dnspy, перейдя в entry point мы видим следующую картину: Защита заключается в ренейме классов , как мы уже поняли декообфускатор de4dot спокойно справляется с этим, закинув наш семпл в него, мы получаем чистый семпл. Закидываем его также в dnspy Теперь попробуем воспользоваться популярными песочницами, которые способны отслеживать любые манипуляции с вебхуками. Начнем с virustotal, предварительно закинув билд на VT Как мы видим, в активности нет никакого вебхука, только ип адреса сетевой активности других приложений, а также ип адреса самого сандбокса, где семпл был и запущен. Мы в принципе ничего толкового с этой картины и не узнали Перейдем к следующему, один из наших вариантов tria.ge Можем заметить, что детект произошёл по YARA, но никакой сетевой активности в плане отправки нам файл не дал. Теперь пойдем в сам файл. Слегка погуляя по классам мы можем найти сам Anti-VM и посмотреть как он реализован и почему все-таки мы не могли изначально узнать сторону отстука данного семпла. Далее идет проверка uuids Ну и проверка так называемых "Пользователей", из них вы можете увидеть системы Windows Sandbox-а, название тачек триаги, эни рана. Ну и утилиты соотвественно для дебага В данном случае он убивает сразу двух зайцев, так как Virustotal тестирует все на своих машинах VMWARE. В совокупности с нормальной обфускацией вышла хорошая бы связка. Ибо большинство песочниц, популярных дебаггеров , снифферов тут "заблокировано". Но и также стоит отметить что особо и не разгуляешься в самой проверке. Также стоит отметить, что в нем имеется небольшой шеллкод, отключающий нам дефендер, опять же все шифруется Base64 xd: Этим действием отключает функции дефендера. Едем дальше, в чем же основная суть, вытащить отсюда Webhook дискорда Переходим в класс1 и замечаем такую картину: Мы видим зашифрованные строки, теперь нам нужно их расшифровать для последующего получения вебхука. Для удобства я переписал код на Python, коль алгоритм расшифровки всего этого сразу идёт ниже))) Чем мы любезно пользуемся и пиздим код, предварительно переписав его под Python import base64 from Crypto.Cipher import AES def smethod_0(encryptedData, key, iv): cipherText = encryptedData[:len(encryptedData) - 16] authTag = encryptedData[-16:] cipher = AES.new(key, AES.MODE_GCM, nonce=iv) decryptedData = cipher.decrypt_and_verify(cipherText, authTag) return decryptedData.decode('utf-8') s = "stroka" s2 = "stroka" s3 = "stroka" s4 = "stroka" s5 = "stroka" encryptedData = base64.b64decode(s3) key = base64.b64decode(s) iv = base64.b64decode(s2) webhook = smethod_0(encryptedData, key, iv) print(webhook) Python import base64 from Crypto.Cipher import AES def smethod_0(encryptedData, key, iv): cipherText = encryptedData[:len(encryptedData) - 16] authTag = encryptedData[-16:] cipher = AES.new(key, AES.MODE_GCM, nonce=iv) decryptedData = cipher.decrypt_and_verify(cipherText, authTag) return decryptedData.decode('utf-8') s = "stroka" s2 = "stroka" s3 = "stroka" s4 = "stroka" s5 = "stroka" encryptedData = base64.b64decode(s3) key = base64.b64decode(s) iv = base64.b64decode(s2) webhook = smethod_0(encryptedData, key, iv) print(webhook) Применив его к данным значениям мы получаем нужный нам вебхук. Что делаем дальше, попробуем написать какой-то привет нашему злоумышленнику. Воспользуемся следующим кодом: import requests def send_discord_message(webhook_url, message): payload = { 'content': message } response = requests.post(webhook_url, json=payload) if response.ok: print('+') webhook_url = 'полученный вебхук' message = 'ку хуй' send_discord_message(webhook_url, message) Python import requests def send_discord_message(webhook_url, message): payload = { 'content': message } response = requests.post(webhook_url, json=payload) if response.ok: print('+') webhook_url = 'полученный вебхук' message = 'ку хуй' send_discord_message(webhook_url, message) Как мы видим наше сообщение приходит в канал нашему кул-хацкеру. Мы можем зафлудить ему канал с логами или подкинуть нашего говна. Допустим создать Password.docx, где будет макрос с нашим говном в последствии. Вот пример такого файла import requests def send_discord_file(webhook_url, file_path): with open(file_path, 'rb') as file: response = requests.post(webhook_url, files={'file': file}) if response.ok: print('+') webhook_url = 'ваш вебхук тут' file_path = 'test.rar' send_discord_file(webhook_url, file_path) Python import requests def send_discord_file(webhook_url, file_path): with open(file_path, 'rb') as file: response = requests.post(webhook_url, files={'file': file}) if response.ok: print('+') webhook_url = 'ваш вебхук тут' file_path = 'test.rar' send_discord_file(webhook_url, file_path) И как мы заметим он приходит, подделав примерно под вид лога, можно подкинуть его. Спасибо за внимание, статья не несет никакого гайда, а скорее технический аспект и то, почему такие проекты лучше не использовать.
Бля. Да это гениально. Могу страдать херней и скидывать порнуху дибилам со *******ом. А этого дерьма хватает в темат чатах по типу читы майна.
Doklsi, я всегда все ехе файлы запускаю на вмрке. А там очко бабы. Думаю им уже будет не столь приятен этот вид
это ююйды которые на китайских платах все одинаковые? wmic csproduct get UUID вроде да? наизучасть вроде выучил команду
LordS_Inactive, это юиды, которые стояли на вм тачках, ханипотах и так далее, вот пример, с эни рана, две разные виртуалки, с разными конфигами с плана (200$) имеют одинаковые UUID
Doklsi, да я знаю ) там от платы это зависит ещё, если китайский кусок дерьма там везде одинаковый идет, 0306000- че-то там.