Ce qui suit est le postage original (ndt : du moins sa traduction)  bugtraq
 propos de la mthode de scan usurpe/passive/indirecte. Voir le fichier
HPING2-HOWTO pour plus d'informations.

antirez

---

  Salut,

        J'ai dcouvert une nouvelle mthode de scan de ports TCP.  Au
        contraire de toutes les autres elle vous permet de scanner en
        utilisant des paquets usurps (ndt : dont l'adresse IP source est
        usurpe), ainsi les systmes scanns ne peuvent pas voir votre
        adresse relle. Afin de raliser cela j'utilise trois particularits
        bien connues des mises en oeuvre TCP/IP de la plupart des OS.

          (1) * les systmes rpondent SYN|ACK  SYN si le port TCP cible
            est ouvert, et RST|ACK si le port TCP cible est ferm.

          (2) * Vous pouvez connatre le nombre de paquets que les systmes
            envoient en utilisant le champ id de l'entte IP. Voir mes
            prcdents postages ' propos de l'entte IP' dans cette mailing
            liste.

          (3) * les systmes rpondent RST  SYN|ACK, ne rpondent rien 
            RST.


        Les joueurs:

          systme A - le systme malfaisant, l'attaquant.
          systme B - le systme silencieux.
          systme C - le systme victime.

        A est votre systme.
        B est un systme particulier : il ne doit envoyer aucun paquet
         pendant que vous scannez C. Il y a normment de systmes  'trafic
         nul' sur Internet, spcialement la nuit :)
        C est la victime, il doit tre vulnrable aux scans SYN.

        J'ai appel cette mthode de scan 'scan du systme muet' (ndt :
        l'autre traduction de 'dumb' est bte) en rfrence aux
        caractristiques du systme B.


        Comment elle fonctionne :

        Le systme A surveille le nombre de paquets sortants depuis B en
        utilisant le champ id de l'entte 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 incrments du champ id sont toujours
        de 1. Ainsi ce systme a la caractristique requise pour jouer le
        rle de B.

        Maintenant le systme A envoie des paquets SYN au port X de C en
        usurpant l'adresse source de B.
        (avec hping => 0.67 c'est trs facile, http://www.kyuzz.org/antirez)
        si le port X de C est ouvert, le systme C enverra SYN|ACK  B (oui,
        le systme C ne sait pas que le vritable expditeur est A). Dans ce
        cas le systme B rpond au SYN|ACK avec un RST.
        Si nous envoyons au systme C quelques paquets SYN il rpondra  B
        quelques paquet SYN|ACK, ainsi B rpondra  C quelques RST... ainsi
        nous verrons que le systme 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 alors en envoyant  C
        quelques paquets SYN avec l'adresse usurpe de B, il rpondra avec
        des paquets RST  B, et B ne rpondra pas (voir 3). Ainsi nous
        verrons que le systme 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.

        Tout ceci peut paratre compliqu  raliser, mais utiliser deux
        sessions de hping dans des consoles virtuelles Linux ou sous X rend
        cela plus simple.
        La premire session surveille le systme B : hping B -r
        La seconde session envoie des paquets SYN spoofs : hping C -a B -S

        Dsol si mon anglais n'est pas clair.
        Cependant ce postage n'est pas adquat pour dcrire exhaustivement
        cette mthode de scan, ainsi je vais crire un article  ce sujet,
        en particulier comment mettre en oeuvre ceci dans un scanner de
        ports (i.e.  nmap), et  propos des caractristiques des joueurs et
        des OS utiliss.

bonne nouvelle anne,
antirez
