HowTO shellcode development ?

Hallo, ich hab mir vor ein paar Tagen ein Buch "hacking - the art of exploitation" von nem Kumpel ausgeliehen. Glücklicherweise hat der Verlag gleich mal online ;-)
Iist super geschrieben aber ein haken hat das Ding doch ... (war klar oder ?)
es wird nicht erklärt wie der Autor auf den inhalt des Arrays "shellcode" kommt.

so sieht das aus:

Code:
char shellcode[] =
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";

hier ist der ganze Quellcode:

http://www.nostarch.com/extras/hacking/chap2/exploit.c

Meine Frage wie hat der diesen shellcode entwickelt ?
 
Erstellen von Shellcodes

Zur Erzeugung von Shellcode kann der auszuführende Befehl in C geschrieben und mit einem Compiler übersetzt werden. Das erzeugte Programm wird nun disassembliert (rückübersetzt) und die Funktionsweise des Programms in Assemblersprache nachprogrammiert. Viele Instruktionen können aber weggelassen oder verkürzt werden. Da in C Strings durch ein 0-Byte terminiert werden, dürfen Shellcodes für C-Programme keine 0-Bytes enthalten. Evtl. müssen noch weitere Filter umgangen werden. Da Shellcodes aber auch alphanumerisch sein können, ist dies ein lösbares Problem. Mit einem Debugger können nun die hexdezimalen Befehle (Opcodes) ausgelesen und zu einem String zusammengefügt werden.

Anstatt Befehle auf dem Stack auszuführen, was nicht immer möglich ist (z.B. bei OpenBSD), kann man auch Adressen von Funktionen und Parametern auf dem Stack ablegen. Auch so lässt sich Code ausführen. Dieses Verfahren wird return into libc genannt.
http://de.wikipedia.org/wiki/Shellcode

beispiel zur programmierung von shellcode: http://www.phrack.org/phrack/49/P49-14

in dem buch Forbidden Code wird das programmieren von shellcode auch recht ausführlich beschrieben.

edit: ich seh grad dass "hacking - the art of exploitation" (englisch) das gleiche buch ist wie "Forbidden Code" (deutsch). dann müsste doch ein kapitel übers shellcode schreiben in deinem buch drin sein?!
 
Ja auf wikipedia hät ich eigentlich auch kommen müssen ;-)

Mein Problem an dem Buch "Forbidden Code" ist nur das ich Windowshellcodes schreiben will, hätte ich vielleicht erwähnen sollen. In Windows kann ich ja schlecht Linux Systemcalls benutzen.

Ich versuch mich gerade daran die WinExec() funktion zu dissamblieren - nur wie soll ich die Adresse der funktion herrausbekommen ? damit ich die "callen" kann.
 
Original von poebel
Ich versuch mich gerade daran die WinExec() funktion zu dissamblieren - nur wie soll ich die Adresse der funktion herrausbekommen ? damit ich die "callen" kann.
mit dem programm kannst du zB die absolute adresse rausfinden:
http://www.vividmachines.com/shellcode/arwin.c
in deinem fall müsstest du das programm folgendermaßen aufrufen:
"arwin.exe kernel32.dll WinExec" ("arwin.exe library funktion")

andere möglichkeit wäre zb über ollydbg
- File -> open: C:\winnt\system32\kernel32.dll
- "Launch LOADDLL.EXE?" -> Ja
- Debug -> Call DLL Export
- oben in der dropdownlist stehen alle funktionen und davor jeweils die adresse
 
Zurück
Oben