Einen kleinen Execve-Shellcode neu schreiben
Durchgehenhttp://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html
Ich habe das aufgerufene nasm-Programm verstandenexecve
und versuchte es neu zu schreiben.
Einige Hintergrundinformationen:
int execve(const char *filename, char *const argv[], char *const envp[]);
So,eax = 11
(Funktionsrufnummer fürexecve
),ebx
sollte zeigen aufchar* filename
, ecx
sollte zeigen aufargv[]
(das wird das gleiche sein wieebx
da ist das erste argument das*filename
selbst z.B. "/ bin / sh" in diesem Fall) undedx
wird zeigen aufenvp[]
(null
in diesem Fall).
Ursprünglicher nasm code:
global _start
section .text
_start:
xor eax, eax
push eax
; PUSH //bin/sh in reverse i.e. hs/nib//
push 0x68732f6e
push 0x69622f2f
mov ebx, esp
push eax
mov edx, esp
push ebx
mov ecx, esp
mov al, 11
int 0x80
Der Stack sieht wie folgt aus:
Jetzt habe ich versucht, dies zu optimieren, indem ich einige Anweisungen reduzierte. Ich bin damit einverstanden, bismov ebx, esp
Der Code bleibt gleich. Seitdem jedochecx
muss zeigen aufebx
Ich kann den Code wie folgt umschreiben:
global _start
section .text
_start:
xor eax, eax
push eax
; PUSH //bin/sh in reverse i.e. hs/nib//
push 0x68732f6e
push 0x69622f2f
mov ebx, esp
mov ecx,ebx
push eax
mov edx, esp
mov al, 11
int 0x80
Ich erhalte jedoch einen Segmentierungsfehler, wenn ich meinen neu geschriebenen Code ausführe.
Mein Stack ist wie folgt:
Irgendwelche Ideen, warum der neu geschriebene Code nicht funktioniert? Ich habe auch gdb ausgeführt und die Adresswerte entsprechen meinen Vorstellungen, aber es wird einfach nicht ausgeführt.