-
-
[原创] 调试干扰的栈exploit
-
发表于:
2020-7-22 15:20
5099
-
几天前遇到一个问题,讨论贴见【不符合预期的栈exploit】
今天在复现通过export挂载shellcode到env中实现栈的exploit时,
注意到在调试状态下的栈与非调试状态下的栈一般是不同的,有一定偏移量(都是关闭ASLR、栈保护并开启栈执行条件下),
于是不经意联想起上述讨论的问题,初步找到了原因。
即:(1)gdb调试状态:由于栈的分布是通过gdb得到的,所以理论上的返回地址的可选值是针对gdb调试状态下的nop-sleb区间,
也即gdb下得到的,提供的理论值184到124都是可行的。
(2)非调试状态下:由于栈与gdb的不同,有一定偏移,所有提供的184参数调整的返回地址0xbfffed18肯定不在nop-sleb的首地址处,
但这时还是落在nop-sleb区间上,所有还是可行的。
(3)两者对比:
A、gdb下得到的184至124的有效空间是60,即nop-sleb的长度;(实际取值120也可行,即忽略shellcode前俩个指令,有效空间可以达到64)
B、非gdb下实测(参考后图),232到168的有效空间是64(比60多了4,是由于168实际已经不在nop-sleb区间,已经刚好跳过了shellcode的前两个指令)
由此,我们应该注意到调试态和非调试态方案的差异。
一、调试状态下得到的栈图
二、非调试状态下的盲测
略
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)