Переписываем небольшой execve шеллкод
Проходя черезhttp://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html
Я понял программу Nasm, которая вызываетexecve
и пытался переписать это.
Некоторая справочная информация:
int execve(const char *filename, char *const argv[], char *const envp[]);
Так,eax = 11
(номер вызова функции дляexecve
),ebx
следует указать на,char* filename
ecx
следует указать наargv[]
(который будет таким же, какebx
так как первый аргумент является*filename
сам, например "/ Бен / ш» в этом случае) иedx
будет указывать на (envp[]
null
в этом случае).
Оригинальный код носа:
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
Стек выглядит следующим образом:
Теперь я попытался оптимизировать это, уменьшив несколько инструкций. Я согласен, что доmov ebx, esp
код останется прежним. Тем не менее, так какecx
нужно будет указать наebx
Я могу переписать код следующим образом:
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
Однако, я получаю ошибку сегментации, когда я запускаю свой переписанный код.
Мой стек выглядит следующим образом:
Есть идеи, почему переписанный код не работает? Я'Мы также запустили GDB, и значения адресов соответствуют моим представлениям, но он просто победил.Т беги.