首页
社区
课程
招聘
一种找漏洞触发位置的思路
发表于: 2018-8-28 16:37 5222

一种找漏洞触发位置的思路

2018-8-28 16:37
5222

第一次发帖,不是很会弄格式,附件中有word文档,图片清晰些。
本贴非常的基础,但是对于我这个刚刚弄漏洞的小白来说,还是颇费了一番周折,自认为比较通用,所以发出来给像我这样的新手朋友一点借鉴,大佬直接飘过。

首先确定shellcode的位置,然后找最近一层的堆栈调用,不是用od中的k,是堆栈窗口中的堆栈数据
堆栈覆盖可能覆盖的不止一层,所以看k是没啥用的
然后跟到调用的位置,这时堆栈还没有被覆盖,数据也没有被破坏
一、先确定大概漏洞触发位置,利用od里面的自动步过,只要有跳到shellcode的地方就把那个地方下断点,然后从那个位置继续步过
这样经过几个来回,基本就能确定漏洞触发的大概位置了,然后再来确定是哪一条触发的
二、漏洞触发的现象是某个函数覆盖了堆栈的值,所以思路就是下写入断点
一般在漏洞触发后,堆栈中的数据被设置好了,返回地址也会返回到rop链,观察是哪一层返回地址发生了变化,导入到rop链上了,直接对这个位置下写入断点,然后就可以准确的确定是哪行导致了漏洞触发

测试环境:
xp sp3 专业版+adobe 9.3.0EN
找了个验证poc,漏洞触发会弹出计算器,为了便于调试,手工把随机基址关掉
对winexec下断点,加载pdf,会断下来
此时OD中的K窗口

因为堆栈数据被破坏,所以看到的回溯也是错的
直接看堆栈窗口的数据

缓冲区溢出往往只是破坏某一个或者几个栈帧的返回地址,而不会对整个栈帧破坏,所以查看临近的栈调用是可行的
跟随最近的调用,并下好断点

然后我们重新载入,打开pdf
f9运行之后,会断到20BA8252,利用OD的自动步过(Ctrl+F8),这里如果用自动步入,会走很多函数,很难等到我们要的函数。
我们先大致确定漏洞触发的范围,然后再对关键部分进行步入跟进。
由于在winexec位置还是有断点,自动步过之后会断到那个位置,我们用键盘的减号“-”返回,查看是哪个函数调用跳到winexec上的

找到20BA719E处的调用,跳到目标函数,我们在这个函数调用里面下好断点,然后再次载入,运行之后,F9再次来到我们刚刚下好断点的位置
同样的,当断到winexec时,用减号回放

依然在函数调用里面下好断点,然后重新载入
重复这个过程多次之后,我们可以发现函数的调用越来越深入,甚至连rop链都已经跟出来了
下面这个跳转之后返回,就返回到rop链上了

既然都能跟到rop链(至于rop链的判断完全凭经验,一般都是小零件一样的汇编代码,不是成片的),说明漏洞已经触发,构造好的数据已经被写入到堆栈中了。
下面,我们来找漏洞触发的具体位置
本来这一系列函数地址都是AcroForm模块中的调用,返回地址也是这个模块的,所以我就找到了跳往rop链的地址作为突破口(这里只要是自己确定的数据被修改了都是可以,也可以用没有问题的pdf文件打开作为对比)。
在函数20CB59A0被调用前,返回地址是正常的

调用之后,返回地址被修改为了rop链地址了


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

上传的附件:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 861
活跃值: (683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
2018-8-28 19:25
0
雪    币: 1000
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
2018-8-28 19:37
0
雪    币: 1
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持陈大佬
2018-8-28 20:49
0
雪    币: 3
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
至此陈大佬
2018-9-3 09:40
0
雪    币: 300
活跃值: (2477)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mark
2018-9-3 09:47
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
一点点往回找有点麻烦,不如把ASLR关了,然后在关键API上下执行断点,找到返回地址以后,重新载入程序,然后在那个地址上下个硬件写断点,这样漏洞触发的位置也找到了。。。
2018-9-3 10:11
0
游客
登录 | 注册 方可回帖
返回
//