Salut chers amis pentesteurs ! Cet article lève un coin de voile sur un outil disponible sur Kali Linux qu’est Hping3. Il s’agit d’un outil bien plus avancé que l’outil ping traditionnel.
Dans ce tutoriel, vous découvrirez comment Hping3 est applicable à un grand nombre de cas d’usage pour l’attaque et la découverte du réseau.
Pourquoi utiliser Hping3?
Hping3 est un logiciel en ligne de commande créé par Salvatore Sanfilippo, fonctionne en envoyant des paquets TCP à un port de destination puis en signalant les paquets qu’il reçoit en retour.
Il peut également assembler des paquets réseau, ce qui peut être très utile pour les pentesteurs pour la découverte de périphériques et de services et des actions illégales telles que l’exécution d’une attaque par déni de service (DoS).
Hping3 peut notamment être utile dans divers autres scénarios dont:
- Obtenir le fingerprint des OS sur le réseau
- Estimer l’uptime d’un équipement réseau
- Faire du traceroute avancé
- Tester un réseaux et ses Firewalls
- Faire du spoofing d’utilisateurs
L’aide de l’outil vous donne une idée sur la richesse de ses fonctionalités
root@kali:~# hping3 -h usage: hping3 host [options] -h --help show this help -v --version show version -c --count packet count -i --interval wait (uX for X microseconds, for example -i u1000) --fast alias for -i u10000 (10 packets for second) --faster alias for -i u1000 (100 packets for second) --flood sent packets as fast as possible. Don't show replies. -n --numeric numeric output -q --quiet quiet -I --interface interface name (otherwise default routing interface) -V --verbose verbose mode -D --debug debugging info -z --bind bind ctrl+z to ttl (default to dst port) -Z --unbind unbind ctrl+z --beep beep for every matching packet received Mode default mode TCP -0 --rawip RAW IP mode -1 --icmp ICMP mode -2 --udp UDP mode -8 --scan SCAN mode. Example: hping --scan 1-30,70-90 -S www.target.host -9 --listen listen mode IP -a --spoof spoof source address --rand-dest random destionation address mode. see the man. --rand-source random source address mode. see the man. -t --ttl ttl (default 64) -N --id id (default random) -W --winid use win* id byte ordering -r --rel relativize id field (to estimate host traffic) -f --frag split packets in more frag. (may pass weak acl) -x --morefrag set more fragments flag -y --dontfrag set don't fragment flag -g --fragoff set the fragment offset -m --mtu set virtual mtu, implies --frag if packet size > mtu -o --tos type of service (default 0x00), try --tos help -G --rroute includes RECORD_ROUTE option and display the route buffer --lsrr loose source routing and record route --ssrr strict source routing and record route -H --ipproto set the IP protocol field, only in RAW IP mode ICMP -C --icmptype icmp type (default echo request) -K --icmpcode icmp code (default 0) --force-icmp send all icmp types (default send only supported types) --icmp-gw set gateway address for ICMP redirect (default 0.0.0.0) --icmp-ts Alias for --icmp --icmptype 13 (ICMP timestamp) --icmp-addr Alias for --icmp --icmptype 17 (ICMP address subnet mask) --icmp-help display help for others icmp options UDP/TCP -s --baseport base source port (default random) -p --destport [+][+] destination port(default 0) ctrl+z inc/dec -k --keep keep still source port -w --win winsize (default 64) -O --tcpoff set fake tcp data offset (instead of tcphdrlen / 4) -Q --seqnum shows only tcp sequence number -b --badcksum (try to) send packets with a bad IP checksum many systems will fix the IP checksum sending the packet so you'll get bad UDP/TCP checksum instead. -M --setseq set TCP sequence number -L --setack set TCP ack -F --fin set FIN flag -S --syn set SYN flag -R --rst set RST flag -P --push set PUSH flag -A --ack set ACK flag -U --urg set URG flag -X --xmas set X unused flag (0x40) -Y --ymas set Y unused flag (0x80) --tcpexitcode use last tcp->th_flags as exit code --tcp-mss enable the TCP MSS option with the given value --tcp-timestamp enable the TCP timestamp option to guess the HZ/uptime Common -d --data data size (default is 0) -E --file data from file -e --sign add 'signature' -j --dump dump packets in hex -J --print dump printable characters -B --safe enable 'safe' protocol -u --end tell you when --file reached EOF and prevent rewind -T --traceroute traceroute mode (implies --bind and --ttl 1) --tr-stop Exit when receive the first not ICMP in traceroute mode --tr-keep-ttl Keep the source TTL fixed, useful to monitor just one hop --tr-no-rtt Don't calculate/show RTT information in traceroute mode ARS packet description (new, unstable) --apd-send Send the packet described with APD (see docs/APD.txt)
Installé par défaut sur Kali Linux, Hping3 est, vous l’aurez compris, vraiment utile en matière de pentesting réseau.
Utiliser hping3 pour la découverte de réseau
Dans une architecture réelle, nous sommes souvent confrontés à des restrictions des pare-feu lors de nos découvertes sur le réseau cible. Hping3 vient à point nommé nous soulager sur ce point.
Scan d’un port à l’aide de hping3
Si nous utilisons Hping3 pour sonder un port spécifique en envoyant des paquets SYN forcera la cible à se révéler.
sudo hping3 -S [Adresse IP ou hostname] -p [Port] -c [nombre]
-S
spécifie les paquets SYN
-p
définit le port
-c
spécifie le nombre de paquet à envoyer

D’après l’image ci-dessus, nous avons reçu une réponse de la part de la cible. Donc le port 80 de la cible est ouvert.
Découverte des services par hping3
Hping3 permet de révéler des informations sur les ports ouverts comme nous le faisions avec nmap.
sudo hping3 -S --scan 1-1000 scanme.nmap.org
Cette découverte a été effective grâce à l’option --scan
. Elle prend pour paramètre la plage de port à scanner.

Sniffing de réseau avec Hping3
Cet outil nous permet aussi de faire du sniffing sur le réseau cible. Pour y arriver, nous allons autoriser la ligne net.ipv4.conf.all.accept_source_route = 0
en enlevant le commentaire (#) qui le précède dans le fichier /etc/sysctl.conf
.
sudo hping3 --listen HTTP -I wlan0
l’option --listen
prend en argument le nom du paquet que vous voulez renifler
l’option -I
précise l’interface sur laquelle le reniflement se fera.
Attaque par déni de service avec Hping3
En effet, une telle attaque est faisable avec hping3 à partir de la commande ci-après:
sudo hping3 -S --flood -V scanme.nmap.org
Cette commande est surtout caractérisée par l’option --flood
qui permet d’envoyer les paquets aussi vite que possible sans prendre en compte les réponses de retour.
Par ailleurs, notre attaque peut être aussi menée avec plus d’options comme la commande ci-après:
sudo hping3 -c 20000 -d 120 -S -w 64 -p 80 --flood --rand-source scanme.nmap.org
-d
pour fixer la taille du corps du paquet.
-w
fixe la taille de la fenêtre TCP. Le défaut est 64.
--rand-source
pour envoyer des paquets avec des adresses sources aléatoires.
Usurpation d’adresse IP
Hping3 nous permet de leurrer notre cible avec une autre adresse IP. En effet, la commande ci-après fait l’usurpation d’adresse IP.
sudo hping3 -S <adresse IP cible> -a <adresse IP usurpée>
ou encore
sudo hping3 -S <adresse IP cible> --spoof <adresse IP usurpée>

NB: cette option a pour but de fixer une fausse adresse source, cette option assure que le
système cible n’obtiendra pas votre adresse réelle. Quoi qu’il en soit les réponses seront envoyées à l’adresse usurpée, ainsi vous ne serez pas capable de les voir: Cela justifie le 100% packet loss obtenu sur l’image ci-dessus.
Mode source aléatoire
Ce mode consite à envoyer des paquets à notre cible avec des adresses IP aléatoires. Cette technique est un peu différente de la précédente où nous définissons l’adresse IP à usurper.
En effet, cette technique est possible avec hping3 avec l’option --rand-source
sudo hping3 <adresse IP cible> --rand-source

FIN, URG et PUSH scan
En ajoutant les options –F, -P et –U dans la commande hping3, nous définissons les paquets FIN, PUSH et URG dans les paquets de sonde. A travers cette commande, nous effectuons des analyses FIN, PUSH et URG sur un port spécifique de l’hôte cible. En effet, si le port questionné est ouvert, on n’aura aucune réponse et dans le cas contraire, nous recevrons une réponse avec le flag RST.
sudo hping3 -F -U -P <adresse IP> -p 80 -c 5
Dans notre nous avons effectué le scan sur une cible dont le port 80 est ouvert et le port 800 est fermé.


Test des IDS/pare-feu
De nombreux pare-feu incluent une règle pour supprimer les paquets TCP qui n’ont pas d’option d’horodatage TCP, ce qui est courant dans les scanners de ports courants. L’option --tcp-timestamp
nous permet d’ajouter des informations d’horodatage.
sudo hping3 -S < adresse IP > -p 80 --tcp-timestamp -c 1

Conclusion
Pour bien mener nos missions de pentest, il est plus qu’indispensable de savoir bypasser les pare-feu afin d’obtenir beaucoup plus d’informations et de vecteurs d’attaque. Hping3 fait partie des outils qui nous aident à atteindre ce but.
Hping3 regorge de plusieurs fonctionnalités dont ceux qu’on a pu aborder dans cet article. Il revient au pentesteur de bien l’utiliser en fonction de ses besoins. Vous pouvez en savoir plus sur hping à l’aide la commande man hping3 ou depuis ce lien.
Sur ce, n’oubliez pas de vous abonner à la newsletter pour ne pas rater nos prochains articles.
A très vite !