2012-04-05 6 views
3

Wie kann man ein Paket Daten mit Scapy ändern?Wie ändert man ein Paket Daten mit Scapy?

Ich habe versucht, sniff() und dann send() das editierte Paket zu verwenden, aber es wird nicht funktionieren, da das ursprüngliche Paket bereits sein Ziel erreicht hat.

Antwort

2

"aber es wird nicht funktionieren, da das ursprüngliche Paket bereits sein Ziel erreicht hat."

Also zuerst müssen Sie einige MiTM-Lösung einrichten, so dass alle Kommunikationen zwischen beiden Enden durch Ihr Gerät traversieren und Sie Paketdaten ändern können.

Einige bekannte Softwarepakete für diese Funktionalität/Angriff sind Ettercap und Cain/Abel.

3

iTayb,

scheint, dass Sie in Proxying irgendeine Art von Service interessiert sind, mit scapy? Wenn ja, welcher?

Erste Ordnung des Geschäfts ist einige, wie haben die Pakete durch die Box laufen scapy. Tun Sie dies, indem Sie das Gateway auf dem Remote-Computer so einstellen, dass es der Scapy-Box entspricht. Wenn dies für eine Art Penstest ist, müssen Sie einige Mac-Adressen spoofen. Sie können dies mit Scapy mit Arpcachepoison-Methode oder mit einem Drittanbieter-Programm wie Ettercap tun.

Sobald dies abgeschlossen ist, sollte Ihre Methode der Verwendung von sniff() und send() ein wenig besser funktionieren nur sicherstellen, dass Sie das Paket ändern, bevor Sie zum sendenden Teil kommen;) Hier ist ein kleines Beispiel dafür mach das ... hier ändere ich einfach die IP-Header-Zieladresse, aber du könntest alles ändern, was du willst.

from scapy import * 

def chgSend(x): 
    x[IP].dst = '192.168.1.1' 
    send(x) 
while 1: 
    sniff(prn=chgSend) 

dc

+0

Ich weiß, das etwas älteren Thread ist aber ein ähnliches - Kann man das ausgehende Paket in einem mehr ändern komplexer Weg? ZB Einfügen einer anderen Art von HTTP-Header in eine HTTP-Payload, ohne IP- oder TCP-Header zu ändern. Irgendwelche Hinweise auf relevante API usw.? – fayyazkl

+0

Absolut, abhängig davon, was Sie ändern möchten, können andere Module beteiligt sein. Zum Beispiel, wenn Sie die Payload für alle http GET-Request-Pakete ändern wollte, würde ich re verwenden, um den Header zu analysieren und dann das modifizierte Paket entsprechend zu senden. – dc5553

+1

Ich möchte eigentlich einen neuen http-Header einfügen. Dies würde bedeuten, das letzte \ r \ n zu überschreiben und ein paar weitere Felder hinzuzufügen. – fayyazkl

2

hatte ich das gleiche Problem,

Ich denke, das Problem ist, dass Sie ip_forward aktiviert haben so das ursprüngliche Paket an das ursprüngliche Ziel vor dem modifizierten Paket weitergeleitet wird, wird durch scapy gesendet .

theorically ist die Lösung eine Regel in iptables zu erstellen, um die Pakete weitergeleitet werden, was Sie zu einem anderen Port ändern möchten (Dies ist mehr oder weniger das, was Ettercap tut internaly),

 i.e = iptables -t nat -A PREROUTING -p tcp --destination-port "YourInterestingPort" -j REDIRECT --to-port 1234 

Und dann in scapy hören Modifizieren Sie das Paket und senden Sie das Paket an den ursprünglichen Port.

Diese Lösung ist schwierig, da der Filter implementieren, müssen Sie nur die Pakete umleiten und ändern, die Sie wollen und verstehen sich inklusive syn ack arp etc ...

Wenn Sie die Antworten eines Servers ändern möchten , Ein einfacherer Weg, dies zu tun, ist, anstatt die Pakete im laufenden Betrieb zu modifizieren, um wie ein Vermittler zu agieren.

  • arpspoof
  • ipatbles
  • Öffnen Sie eine Buchse, das Paket empfangen, eine Verbindung öffnen und es an das ursprüngliche Ziel wie senden, wenn Sie ein Kunde waren und die Antwort erhalten, ändern Sie die Antwort und senden Sie es zum ursprünglichen Querier.

    während True: c, addr = s_mb.accept() # Verbindung mit Client herstellen. query = c.recv (BUFFER_SIZE)

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
        s.connect((IP, PORT)) 
        s.send(PACKET) 
        response = s.recv(1024) 
        if response = "THIS IS THE RESPONSE THAT I WANT TO MODIFY": 
        if(real_simulation): 
         fakeresponse = "MODIFIED RESPONSE" 
         #print "The packet has beeb modified" 
         else: 
         fakeresponse = response 
        s.close()  
        c.send(fakeresponse) 
    

(Sorry für die schmutzigen Code)