首页
社区
课程
招聘
[原创] 调试干扰的栈exploit
发表于: 2020-7-22 15:20 5100

[原创] 调试干扰的栈exploit

2020-7-22 15:20
5100


几天前遇到一个问题,讨论贴见【不符合预期的栈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的前两个指令)


    由此,我们应该注意到调试态和非调试态方案的差异。

                            

一、调试状态下得到的栈图


二、非调试状态下的盲测





[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 292
活跃值: (800)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
linux的不太熟,windows下你编译一个debug版本的环三程序和release版本的环三程序观察栈就是不一样的,debug版本的函数栈会比release大很多
2020-7-23 10:39
0
游客
登录 | 注册 方可回帖
返回
//