476 lines
22 KiB
Plaintext
476 lines
22 KiB
Plaintext
![]() |
N.B. : ce HOWTO n'est pas termin<69>, et par endroits tr<74>s b<>te. Je laisse cela
|
|||
|
ici seulement parce que peut <20>tre que c'est mieux que rien.
|
|||
|
|
|||
|
HPING2 HOWTO
|
|||
|
|
|||
|
Changes Log
|
|||
|
-----------
|
|||
|
Aug 7 1999 vi HPING2-HOWTO.txt
|
|||
|
Aug 8 1999 __0000, __0001, __0002, __0003
|
|||
|
Aug 10 1999 __0004
|
|||
|
|
|||
|
Index
|
|||
|
-----
|
|||
|
[cherchez __XXXX afin de sauter au point que vous souhaitez]
|
|||
|
|
|||
|
__0000: Avis de copyright
|
|||
|
__0001: Qu'est ce que hping ?
|
|||
|
__0002: Qu'est ce que j'ai besoin de conna<6E>tre de TCP/IP pour
|
|||
|
utiliser hping ?
|
|||
|
__0003: Premiers pas avec hping
|
|||
|
__0004: Le champ IP id et comment scanner des ports TCP en utilisant
|
|||
|
de l'usurpation d'adresse.
|
|||
|
__0005: Comment tester des r<>gles de filtrage. (A faire)
|
|||
|
__0006: Comment transf<73>rer des fichier au travers de firewalls. (A
|
|||
|
faire)
|
|||
|
|
|||
|
__000A: Exemple d'utilisation de hping (A faire)
|
|||
|
|
|||
|
__0000: Avis de copyright, Licence, et tout ce genre de choses
|
|||
|
|
|||
|
Copyright (C) Salvatore Sanfilippo, 1999.
|
|||
|
|
|||
|
La permission est accord<72>e de faire et distribuer des copies de ce manuel
|
|||
|
<20> condition que l'avis de copyright et cet avis de permission soient
|
|||
|
pr<70>serv<72>s sur toutes les copies.
|
|||
|
|
|||
|
Permission est accord<72>e de copier et distribuer des versions modifi<66>es de
|
|||
|
ce manuel sous les conditions de copie verbatim, <20> condition que le
|
|||
|
travail d<>riv<69> soit distribu<62> sous les termes d'un avis de permission
|
|||
|
identique <20> celui-ci. Les traductions tombent dans la cat<61>gorie des
|
|||
|
''versions modifi<66>es.''
|
|||
|
|
|||
|
Garantie : Aucune.
|
|||
|
|
|||
|
Recommandations : les redistributions commerciales sont autoris<69>es et
|
|||
|
encourag<61>es; cependant, il est fortement recommand<6E> que le redistributeur
|
|||
|
contacte l'auteur avant redistribution, dans l'int<6E>r<EFBFBD>t de garder les
|
|||
|
choses <20> jour (vous pouvez m'envoyer une copie de ce que vous faites
|
|||
|
pendant que vous y <20>tes). Les traducteurs sont <20>galement encourag<61>s <20>
|
|||
|
contacter l'auteur avant traduction. Le version imprim<69>e aura plus
|
|||
|
d'allure.
|
|||
|
Recyclez.
|
|||
|
|
|||
|
__0001 : Qu'est ce que hping ?
|
|||
|
|
|||
|
Hping est un logiciel pour tester des piles TCP/IP, pour d<>couvrir des
|
|||
|
politiques de firewalls, pour scanner les ports TCP de nombreuses mani<6E>res
|
|||
|
diff<66>rentes, pour transf<73>rer les fichiers au travers de firewalls et
|
|||
|
beaucoup d'autres choses. En utilisant hping vous pouvez m<>me faire
|
|||
|
beaucoup de choses qui ne concernent pas la s<>curit<69>. Par exemples vous
|
|||
|
pouvez tester les performances r<>seau, v<>rifier si un syst<73>me tourne,
|
|||
|
v<>rifier si le champ TOS est g<>r<EFBFBD>, etc.
|
|||
|
|
|||
|
__0002 : Qu'est ce que j'ai besoin de conna<6E>tre de TCP/IP pour utiliser
|
|||
|
hping ?
|
|||
|
|
|||
|
Si vous connaissez TCP/IP vous trouverez hping tr<74>s utile, sinon vous
|
|||
|
pouvez utiliser hping seulement pour faire des tests connus. Voir __000A
|
|||
|
pour quelques exemples.
|
|||
|
|
|||
|
__0003 : Premiers pas avec hping
|
|||
|
|
|||
|
La plus simple utilisation de hping est la suivante :
|
|||
|
|
|||
|
#hping host
|
|||
|
|
|||
|
Cette commande envoie un paquet TCP sans drapeau au port 0 du syst<73>me
|
|||
|
cible chaque seconde et montre les r<>ponses du syst<73>me. Par exemple :
|
|||
|
|
|||
|
# hping www.debian.org
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.debian.org (ppp0 209.81.8.242): NO FLAGS are set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 209.81.8.242: flags=RA seq=0 ttl=243 id=63667 win=0 time=369.4 ms
|
|||
|
40 bytes from 209.81.8.242: flags=RA seq=1 ttl=243 id=63719 win=0 time=420.0 ms
|
|||
|
40 bytes from 209.81.8.242: flags=RA seq=2 ttl=243 id=63763 win=0 time=350.0 ms
|
|||
|
[Ctrl+C]
|
|||
|
--- www.debian.org hping statistic ---
|
|||
|
3 packets tramitted, 3 packets received, 0% packet loss
|
|||
|
|
|||
|
Comme vous pouvez le voir le syst<73>me r<>pond avec un paquet TCP avec les
|
|||
|
drapeaux RST et ACK positionn<6E>s. Ainsi vous <20>tes capable d'effectuer un
|
|||
|
'ping TCP', utile quand ICMP est filtr<74>. Par d<>faut le port 0 est utilis<69>
|
|||
|
parce qu'il serait <20>trange qu'il soit <20> l'<27>tat LISTEN (ndt : en <20>coute).
|
|||
|
Si nous envoyons un paquet TCP sans drapeau <20> un port <20> l'<27>tat LISTEN, de
|
|||
|
nombreuses piles TCP/IP ne renverront pas de r<>ponse. Ainsi nous sommes
|
|||
|
capables de savoir si un port est dans l'<27>tat LISTEN. Par exemple :
|
|||
|
|
|||
|
# hping www.debian.org -p 80
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.debian.org (ppp0 209.81.8.242): NO FLAGS are set, 40 headers + 0 data bytes
|
|||
|
[Ctrl+C]
|
|||
|
--- www.debian.org hping statistic ---
|
|||
|
5 packets trasmitted, 0 packets received, 100% packet loss
|
|||
|
|
|||
|
Puisque le port 80 de www.debian.org est en mode LISTEN nous n'obtenons
|
|||
|
aucune r<>ponse.
|
|||
|
|
|||
|
Mais qu'arrive-t-il si nous essayons de 'hpinger' un port bloqu<71> par un
|
|||
|
firewall ? Cela d<>pend de la politique / configuration du firewall.
|
|||
|
Habituellement nous obtenons un paquet ICMP ou rien. Par exemple :
|
|||
|
|
|||
|
# hping www.yahoo.com -p 79
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.yahoo.com (ppp0 204.71.200.67): NO FLAGS are set, 40 headers + 0 data bytes
|
|||
|
ICMP Packet filtered from 206.132.254.41 (pos1-0-2488M.hr8.SNV.globalcenter.net)
|
|||
|
|
|||
|
--- www.yahoo.com hping statistic ---
|
|||
|
14 packets tramitted, 0 packets received, 100% packet loss
|
|||
|
|
|||
|
Le firewall de yahoo ne permet pas de connexion sur le port 79, donc il
|
|||
|
r<>pond avec un paquet ICMP Packet filtered (ICMP unreachable code 13).
|
|||
|
Cependant il y a beaucoup de firewalls qui ignorent simplement le paquet.
|
|||
|
Par exemple :
|
|||
|
|
|||
|
# hping www.microsoft.com -p 79
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.microsoft.com (ppp0 207.46.130.150): NO FLAGS are set, 40 headers + 0 data bytes
|
|||
|
|
|||
|
--- www.microsoft.com hping statistic ---
|
|||
|
4 packets tramitted, 0 packets received, 100% packet loss
|
|||
|
|
|||
|
Aucune r<>ponse de microsoft. Est-ce que le port est bloqu<71> ou en mode
|
|||
|
LISTEN ? D<>couvrir cela est tr<74>s simple. Nous essayons juste de mettre le
|
|||
|
drapeau ACK au lieu d'envoyer un paquet TCP sans drapeau. Si le syst<73>me
|
|||
|
r<>pond, peut-<2D>tre que ce port est en mode LISTEN (mais il est possible
|
|||
|
qu'il y ait une r<>gle qui refuse les paquets TCP sans drapeau mais
|
|||
|
autorise les paquets ACK).
|
|||
|
|
|||
|
# hping www.microsoft.com -A -p 79
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.microsoft.com (ppp0 207.46.130.149): A set, 40 headers + 0 data bytes
|
|||
|
|
|||
|
--- www.microsoft.com hping statistic ---
|
|||
|
3 packets tramitted, 0 packets received, 100% packet loss
|
|||
|
|
|||
|
Toujours pas de r<>ponse, ainsi ce port semble <20>tre filtr<74>. Quoi qu'il en
|
|||
|
soit, il est possible que microsoft utilise un firewall 'intelligent' qui
|
|||
|
sait que pour me connecter je dois d'abord envoyer un paquet SYN.
|
|||
|
|
|||
|
# hping www.microsoft.com -S -p 79
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.microsoft.com (ppp0 207.46.130.149): S set, 40 headers + 0 data bytes
|
|||
|
|
|||
|
--- www.microsoft.com hping statistic ---
|
|||
|
3 packets tramitted, 0 packets received, 100% packet loss
|
|||
|
|
|||
|
Ok.. il semble que le port 79 de microsoft est r<>ellement filtr<74>.
|
|||
|
Pour clarification nous envoyons quelques paquets ACK au port 80 de
|
|||
|
www.debian.org :
|
|||
|
|
|||
|
# hping www.debian.org -p 80 -A
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.debian.org (ppp0 209.81.8.242): A set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 209.81.8.242: flags=R seq=0 ttl=243 id=5590 win=0 time=379.5 ms
|
|||
|
40 bytes from 209.81.8.242: flags=R seq=1 ttl=243 id=5638 win=0 time=370.0 ms
|
|||
|
40 bytes from 209.81.8.242: flags=R seq=2 ttl=243 id=5667 win=0 time=360.0 ms
|
|||
|
|
|||
|
--- www.debian.org hping statistic ---
|
|||
|
3 packets tramitted, 3 packets received, 0% packet loss
|
|||
|
|
|||
|
Nous pouvons voir les r<>ponses m<>me si le port 80 est en mode LISTEN parce
|
|||
|
qu'un port en mode LISTEN ne devrait pas r<>pondre <20> des paquets TCP avec
|
|||
|
seulement un drapeau NULL, FIN, Xmas, ou Ymas. ACK et RST sont deux
|
|||
|
drapeaux TCP importants qui permettent de tester des ACL (ndt : listes de
|
|||
|
contr<74>le d'acc<63>s) et de deviner le champ ip->id en ne laissant pas de
|
|||
|
trace dans les journaux (g<>n<EFBFBD>ralement).
|
|||
|
|
|||
|
__0004 : Le champ IP id et comment scanner des ports TCP en utilisant de
|
|||
|
l'usurpation d'adresse.
|
|||
|
|
|||
|
Chaque paquet IP est identifi<66> par un champ id de 16 bits. Gr<47>ce <20> ce
|
|||
|
champ id les piles IP sont capables de g<>rer la fragmentation. De nombreux
|
|||
|
OS traitent ip->id trivialement : incr<63>menter ce champ de 1 champ pour
|
|||
|
chaque paquet envoy<6F>. En utilisant ce champ id vous <20>tes au minimum
|
|||
|
capable d'estimer le trafic et de scanner en usurpant l'adresse source.
|
|||
|
OpenBSD >= 2.5 et beaucoup d'autres mettent en oeuvre un champ id
|
|||
|
al<61>atoire non r<>p<EFBFBD>titif ainsi vous ne pouvez pas jouer avec le champ
|
|||
|
ip->id. Le champ ip->id des syst<73>mes Windows n'est pas positionn<6E> dans le
|
|||
|
m<>me ordre (ndt : dans le bon ordre), donc vous devez sp<73>cifier l'option
|
|||
|
--winid ou -W si vous utilisez hping2 contre un syst<73>me Windows.
|
|||
|
|
|||
|
N.B. : Vous <20>tes capable de scanner un syst<73>me avec un champ ip->id
|
|||
|
s<>re/al<61>atoire parce que pour spoofer vos paquets vous avez besoin
|
|||
|
d'un syst<73>me tiers avec un champ id incr<63>mental, mais vous n'avez
|
|||
|
pas besoin que la cible de votre scan ait un champ id incr<63>mental.
|
|||
|
|
|||
|
Comment estimer le trafic d'un syst<73>me en utilisant le champ ip->id ?
|
|||
|
C'est vraiment tr<74>s simple :
|
|||
|
|
|||
|
# hping www.yahoo.com -p 80 -A
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.yahoo.com (ppp0 204.71.200.74): A set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=0 ttl=53 id=29607 win=0 rtt=329.4 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=1 ttl=53 id=31549 win=0 rtt=390.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=2 ttl=53 id=33432 win=0 rtt=390.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=3 ttl=53 id=35368 win=0 rtt=380.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=4 ttl=53 id=37335 win=0 rtt=390.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=5 ttl=53 id=39157 win=0 rtt=380.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=6 ttl=53 id=41118 win=0 rtt=370.0 ms
|
|||
|
40 bytes from 204.71.200.74: flags=R seq=7 ttl=53 id=43330 win=0 rtt=390.0 ms
|
|||
|
|
|||
|
--- www.yahoo.com hping statistic ---
|
|||
|
8 packets tramitted, 8 packets received, 0% packet loss
|
|||
|
round-trip min/avg/max = 329.4/377.4/390.0 ms
|
|||
|
|
|||
|
Comme vous pouvez le voir le champ id augmente. Le paquet avec le num<75>ro
|
|||
|
de s<>quence 0 poss<73>de un champ id <20>gal <20> 29607, le num<75>ro 1 <20> 31549, ainsi
|
|||
|
le syst<73>me www.yahoo.com a envoy<6F> 31549-29607 = 1942 paquets en environ
|
|||
|
une seconde. En utilisant l'option -r ou --relid, hping affiche le delta
|
|||
|
entre les champs id des deux derniers paquets re<72>us.
|
|||
|
|
|||
|
# hping www.yahoo.com -P 80 -A -r
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.yahoo.com (ppp0 204.71.200.68): A set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=0 ttl=53 id=65179 win=0 rtt=327.1 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=1 ttl=53 id=+1936 win=0 rtt=360.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=2 ttl=53 id=+1880 win=0 rtt=340.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=3 ttl=53 id=+1993 win=0 rtt=330.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=4 ttl=53 id=+1871 win=0 rtt=350.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=5 ttl=53 id=+1932 win=0 rtt=340.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=6 ttl=53 id=+1776 win=0 rtt=330.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=7 ttl=53 id=+1749 win=0 rtt=320.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=8 ttl=53 id=+1888 win=0 rtt=340.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=9 ttl=53 id=+1907 win=0 rtt=330.0 ms
|
|||
|
|
|||
|
--- www.yahoo.com hping statistic ---
|
|||
|
10 packets tramitted, 10 packets received, 0% packet loss
|
|||
|
round-trip min/avg/max = 320.0/336.7/360.0 ms
|
|||
|
|
|||
|
<20>videmment si on v<>rifie le champ id toutes les demi-secondes plut<75>t que
|
|||
|
toutes les secondes, l'incr<63>ment sera diminu<6E> de moiti<74>.
|
|||
|
|
|||
|
# hping www.yahoo.com -P 80 -A -r -i u 500000
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.yahoo.com (ppp0 204.71.200.68): A set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=0 ttl=53 id=35713 win=0 rtt=327.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=1 ttl=53 id=+806 win=0 rtt=310.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=2 ttl=53 id=+992 win=0 rtt=320.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=3 ttl=53 id=+936 win=0 rtt=330.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=4 ttl=53 id=+987 win=0 rtt=310.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=5 ttl=53 id=+952 win=0 rtt=320.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=6 ttl=53 id=+918 win=0 rtt=330.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=7 ttl=53 id=+809 win=0 rtt=320.0 ms
|
|||
|
40 bytes from 204.71.200.68: flags=R seq=8 ttl=53 id=+881 win=0 rtt=320.0 ms
|
|||
|
|
|||
|
--- www.yahoo.com hping statistic ---
|
|||
|
9 packets tramitted, 9 packets received, 0% packet loss
|
|||
|
round-trip min/avg/max = 310.0/320.8/330.0 ms
|
|||
|
|
|||
|
N.B. Attention, en utilisant ip->id vous n'<27>tes capable que d'estimer *le
|
|||
|
nombre de paquets envoy<6F>s/unit<69> de temps*. Vous ne pouvez pas
|
|||
|
toujours comparer diff<66>rents syst<73>mes. Le champ ip->id concerne
|
|||
|
toutes les interfaces d'un syst<73>me et par exemple si un syst<73>me
|
|||
|
utilise de la traduction d'adresse ou redirige les connexions TCP
|
|||
|
vers un autre syst<73>me (par exemple un firewall utilis<69> pour cacher un
|
|||
|
serveur web) l'incr<63>ment du champ ip->id peut r<>sulter en de fausses
|
|||
|
augmentations.
|
|||
|
|
|||
|
En 'hpingant' les boites windows sans utiliser l'option --winid vous
|
|||
|
verrez que les incr<63>ment sont des multiples de 256 <20> cause d'un ordre des
|
|||
|
octets invers<72>. Ceci peut <20>tre r<>ellement utile pour d<>terminer le type
|
|||
|
d'OS.
|
|||
|
|
|||
|
#hping win95 -r
|
|||
|
HPING win95 (eth0 192.168.4.41): NO FLAGS are set, 40 headers + 0 data bytes
|
|||
|
46 bytes from 192.168.4.41: flags=RA seq=0 ttl=128 id=47371 win=0 rtt=0.5 ms
|
|||
|
46 bytes from 192.168.4.41: flags=RA seq=1 ttl=128 id=+256 win=0 rtt=0.5 ms
|
|||
|
46 bytes from 192.168.4.41: flags=RA seq=2 ttl=128 id=+256 win=0 rtt=0.6 ms
|
|||
|
46 bytes from 192.168.4.41: flags=RA seq=3 ttl=128 id=+256 win=0 rtt=0.5 ms
|
|||
|
|
|||
|
--- win95 hping statistic ---
|
|||
|
4 packets tramitted, 4 packets received, 0% packet loss
|
|||
|
round-trip min/avg/max = 0.5/0.5/0.6 ms
|
|||
|
|
|||
|
Les syst<73>mes windows sont "marqu<71>s", ainsi pour d<>couvrir si un syst<73>me
|
|||
|
est un Windows vous avez juste besoin d'envoyer quelques paquets.
|
|||
|
|
|||
|
Comment effectuer des scans SYN spoof<6F>s en utilisant un champ id incr<63>mental
|
|||
|
? Ce qui suit est le message original (ndt : du moins sa traduction) <20>
|
|||
|
bugtraq <20> propos de la m<>thode de scan usurp<72>e/indirecte/passive, dessous
|
|||
|
j'essayerai d'expliquer les d<>tails et comment cela est possible m<>me avec
|
|||
|
UDP avec quelques restrictions.
|
|||
|
|
|||
|
---- le postage <20> bugtraq <20> propos des scans usurp<72>s ----
|
|||
|
|
|||
|
Salut,
|
|||
|
|
|||
|
J'ai d<>couvert une nouvelle m<>thode de scan de ports TCP. Au
|
|||
|
contraire de toutes les autres elle vous permet de scanner en
|
|||
|
utilisant des paquets usurp<72>s (ndt : dont l'adresse IP source est
|
|||
|
usurp<72>e), ainsi les syst<73>mes scann<6E>s ne peuvent pas voir votre
|
|||
|
adresse r<>elle. Afin de r<>aliser cela j'utilise trois particularit<69>s
|
|||
|
bien connues des mises en oeuvre TCP/IP de la plupart des OS.
|
|||
|
|
|||
|
(1) * les syst<73>mes r<>pondent SYN|ACK <20> SYN si le port TCP cible
|
|||
|
est ouvert, et RST|ACK si le port TCP cible est ferm<72>.
|
|||
|
|
|||
|
(2) * Vous pouvez conna<6E>tre le nombre de paquets que les syst<73>mes
|
|||
|
envoient en utilisant le champ id de l'ent<6E>te IP. Voir mes
|
|||
|
pr<70>c<EFBFBD>dents postages '<27> propos de l'ent<6E>te IP' dans cette mailing
|
|||
|
liste.
|
|||
|
|
|||
|
(3) * les syst<73>mes r<>pondent RST <20> SYN|ACK, ne r<>pondent rien <20>
|
|||
|
RST.
|
|||
|
|
|||
|
|
|||
|
Les joueurs:
|
|||
|
|
|||
|
syst<73>me A - le syst<73>me malfaisant, l'attaquant.
|
|||
|
syst<73>me B - le syst<73>me silencieux.
|
|||
|
syst<73>me C - le syst<73>me victime.
|
|||
|
|
|||
|
A est votre syst<73>me.
|
|||
|
B est un syst<73>me particulier : il ne doit envoyer aucun paquet
|
|||
|
pendant que vous scannez C. Il y a <20>norm<72>ment de syst<73>mes <20> 'trafic
|
|||
|
nul' sur Internet, sp<73>cialement la nuit :)
|
|||
|
C est la victime, il doit <20>tre vuln<6C>rable aux scans SYN.
|
|||
|
|
|||
|
J'ai appel<65> cette m<>thode de scan 'scan du syst<73>me muet' (ndt :
|
|||
|
l'autre traduction de 'dumb' est b<>te) en r<>f<EFBFBD>rence aux
|
|||
|
caract<63>ristiques du syst<73>me B.
|
|||
|
|
|||
|
|
|||
|
Comment elle fonctionne :
|
|||
|
|
|||
|
Le syst<73>me A surveille le nombre de paquets sortants depuis B en
|
|||
|
utilisant le champ id de l'ent<6E>te IP. Vous pouvez faire ceci
|
|||
|
simplement en utilisant hping :
|
|||
|
|
|||
|
#hping B -r
|
|||
|
HPING B (eth0 xxx.yyy.zzz.jjj): no flags are set, 40 data bytes
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=0 ttl=64 id=41660 win=0 time=1.2 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=1 ttl=64 id=+1 win=0 time=75 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=2 ttl=64 id=+1 win=0 time=91 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=3 ttl=64 id=+1 win=0 time=90 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=4 ttl=64 id=+1 win=0 time=91 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=5 ttl=64 id=+1 win=0 time=87 ms
|
|||
|
-cut-
|
|||
|
..
|
|||
|
.
|
|||
|
|
|||
|
Comme vous pouvez le voir, les incr<63>ments du champ id sont toujours
|
|||
|
de 1. Ainsi ce syst<73>me a la caract<63>ristique requise pour jouer le
|
|||
|
r<>le de B.
|
|||
|
|
|||
|
Maintenant le syst<73>me A envoie des paquets SYN au port X de C en
|
|||
|
usurpant l'adresse source de B.
|
|||
|
(avec hping => 0.67 c'est tr<74>s facile, http://www.kyuzz.org/antirez)
|
|||
|
si le port X de C est ouvert, le syst<73>me C enverra SYN|ACK <20> B (oui,
|
|||
|
le syst<73>me C ne sait pas que le v<>ritable exp<78>diteur est A). Dans ce
|
|||
|
cas le syst<73>me B r<>pond au SYN|ACK avec un RST.
|
|||
|
Si nous envoyons au syst<73>me C quelques paquets SYN il r<>pondra <20> B
|
|||
|
quelques paquet SYN|ACK, ainsi B r<>pondra <20> C quelques RST... ainsi
|
|||
|
nous verrons que le syst<73>me B est en train d'envoyer des paquets !
|
|||
|
|
|||
|
.
|
|||
|
..
|
|||
|
-cut-
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=17 ttl=64 id=+1 win=0 time=96 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=18 ttl=64 id=+1 win=0 time=80 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=19 ttl=64 id=+2 win=0 time=83 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=20 ttl=64 id=+3 win=0 time=94 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=21 ttl=64 id=+1 win=0 time=92 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=22 ttl=64 id=+2 win=0 time=82 ms
|
|||
|
-cut-
|
|||
|
..
|
|||
|
.
|
|||
|
|
|||
|
Le port est ouvert !
|
|||
|
|
|||
|
Par contre, si le port X de C est ferm<72> alors en envoyant <20> C
|
|||
|
quelques paquets SYN avec l'adresse usurp<72>e de B, il r<>pondra avec
|
|||
|
des paquets RST <20> B, et B ne r<>pondra pas (voir 3). Ainsi nous
|
|||
|
verrons que le syst<73>me B n'est en train d'envoyer aucun paquet :
|
|||
|
|
|||
|
.
|
|||
|
..
|
|||
|
-cut-
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=52 ttl=64 id=+1 win=0 time=85 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=53 ttl=64 id=+1 win=0 time=83 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=54 ttl=64 id=+1 win=0 time=93 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=55 ttl=64 id=+1 win=0 time=74 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=56 ttl=64 id=+1 win=0 time=95 ms
|
|||
|
60 bytes from xxx.yyy.zzz.jjj: flags=RA seq=57 ttl=64 id=+1 win=0 time=81 ms
|
|||
|
-cut-
|
|||
|
..
|
|||
|
.
|
|||
|
|
|||
|
Le port est ferm<72>.
|
|||
|
|
|||
|
Tout ceci peut para<72>tre compliqu<71> <20> r<>aliser, mais utiliser deux
|
|||
|
sessions de hping dans des consoles virtuelles Linux ou sous X rend
|
|||
|
cela plus simple.
|
|||
|
La premi<6D>re session surveille le syst<73>me B : hping B -r
|
|||
|
La seconde session envoie des paquets SYN spoof<6F>s : hping C -a B -S
|
|||
|
|
|||
|
D<>sol<6F> si mon anglais n'est pas clair.
|
|||
|
Cependant ce postage n'est pas ad<61>quat pour d<>crire exhaustivement
|
|||
|
cette m<>thode de scan, ainsi je vais <20>crire un article <20> ce sujet,
|
|||
|
en particulier comment mettre en oeuvre ceci dans un scanner de
|
|||
|
ports (i.e. nmap), et <20> propos des caract<63>ristiques des joueurs et
|
|||
|
des OS utilis<69>s.
|
|||
|
|
|||
|
bonne nouvelle ann<6E>e,
|
|||
|
antirez
|
|||
|
|
|||
|
---- EOF ----
|
|||
|
|
|||
|
Comme vous pouvez le voir un scan usurp<72> est trivial <20> r<>aliser,
|
|||
|
particuli<6C>rement en utilisant hping2 vous <20>tes capable de sp<73>cifier un
|
|||
|
intervalle en micro secondes (-i uX) ainsi vous n'avez pas besoin que le
|
|||
|
syst<73>me B soit un syst<73>me totalement passif. Vous pouvez lire l'incr<63>ment
|
|||
|
du champ id une fois toutes les secondes en envoyant 10 paquets SYN par
|
|||
|
seconde. Si vous envoyez un nombre ad<61>quat de paquets SYN par seconde,
|
|||
|
l'incr<63>ment du champ id attendu est si important que vous <20>tes <20> m<>me de
|
|||
|
voir si le port est ouvert ou ferm<72> m<>me si le syst<73>me B envoie d'autres
|
|||
|
paquets. Exemple :
|
|||
|
|
|||
|
# hping awake.host.org -p 80 -A -r
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING server.alicom.com (ppp0 111.222.333.44): A set, 40 headers + 0 data bytes
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=0 ttl=249 id=47323 win=0 rtt=239.7 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=1 ttl=249 id=+6 win=0 rtt=630.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=2 ttl=249 id=+6 win=0 rtt=280.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=3 ttl=249 id=+8 win=0 rtt=340.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=4 ttl=249 id=+5 win=0 rtt=440.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=5 ttl=249 id=+5 win=0 rtt=410.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=6 ttl=249 id=+8 win=0 rtt=1509.9 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=7 ttl=249 id=+4 win=0 rtt=1460.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=8 ttl=249 id=+7 win=0 rtt=770.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=9 ttl=249 id=+5 win=0 rtt=230.0 ms
|
|||
|
...
|
|||
|
|
|||
|
comme vous pouvez le voir, ce syst<73>me n'est pas inactif, il envoie environ
|
|||
|
6 paquets chaque seconde. Maintenant scannez le port 80 de www.yahoo.com
|
|||
|
pour voir s'il est ouvert :
|
|||
|
|
|||
|
root.1# hping -a server.alicom.com -S -p 80 -i u10000 www.yahoo.com
|
|||
|
ppp0 default routing interface selected (according to /proc)
|
|||
|
HPING www.yahoo.com (ppp0 204.71.200.74): S set, 40 headers + 0 data bytes
|
|||
|
|
|||
|
[attendre quelques secondes et presser CTRL+C]
|
|||
|
|
|||
|
--- www.yahoo.com hping statistic ---
|
|||
|
130 packets tramitted, 0 packets received, 100% packet loss
|
|||
|
round-trip min/avg/max = 0.0/0.0/0.0 ms
|
|||
|
|
|||
|
En observant la sortie de 'hping awake.host.org -p 80 -A -r' il est
|
|||
|
simple de comprendre que le port 80 de www.yahoo.com est ouvert :
|
|||
|
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=59 ttl=249 id=+16 win=0 rtt=380.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=60 ttl=249 id=+75 win=0 rtt=850.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=61 ttl=249 id=+12 win=0 rtt=1050.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=62 ttl=249 id=+1 win=0 rtt=450.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=63 ttl=249 id=+27 win=0 rtt=230.0 ms
|
|||
|
40 bytes from 111.222.333.44: flags=R seq=64 ttl=249 id=+11 win=0 rtt=850.0 ms
|
|||
|
|
|||
|
notez que 16+75+12+27+11+1-6 = 136 et que nous avons envoy<6F> 130 paquets.
|
|||
|
Ainsi il est tr<74>s probable que les incr<63>ments soient produits par nos
|
|||
|
paquets.
|
|||
|
|
|||
|
Conseil : en utilisant un syst<73>me inactif pour r<>aliser un scan usurp<72> il
|
|||
|
est utile de ne montrer que les r<>ponses qui montrent un
|
|||
|
incr<63>ment diff<66>rent de 1. Essayez
|
|||
|
`hping host -r | grep -v "id=+1"'
|