加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网_ASP源码网 (https://www.1asp.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

漏洞挖掘方法之静态扫描+经典栈溢出实例

发布时间:2021-01-11 07:55:34 所属栏目:大数据 来源:网络整理
导读:这篇文章是关于漏洞挖掘的一种方法—静态扫描潜在危险函数。为了使文章内容充实有干活,笔者在自己使用静态扫描发现的漏洞中选择一个经典栈溢出来讲解,包括对该溢出的挖掘过程,利用方法,shell?code构造等。 Part?Ⅰ静态扫描方法论及工具开发 漏洞挖掘的

代码:

bp?kernel32!lstrcpyW?".if(poi(poi(@esp+8))=0x00420042)?{kv1;}?.else{du?poi(@esp+8);g;}"

因为我们选择的测试字符串是BBAAAAAA……所以只要判断源字符串的前4个字节是否为0x00420042就行了。然后重复我们刚才的Crash场景。既然Crash是发生在第二次拷贝之后,所以我们需要看一下第二次拷贝之后栈的情况:


P7

从以上情况可以看出,栈已经被我们的数据覆盖了,这里要有一点预先判断,如果栈溢出,那么在接下来的程序运行过程中一定会因为某一个ret指令导致栈中的数据进入eip寄存器,并且这个值应该是0x00410041,然后程序从0x00410041开始继续执行,考虑到这一点我们就可以在0x00410x0041下一个断点,然后继续执行程序。


P8

程序最终在0x00410041触发了断点,到这里,已经非常明确了,程序发生了栈溢出,并且我们成功劫持了EIP,下面我们要计算这个eip取到的0x00410041位于我们的数据中的偏移地址,也就是上层函数的返回地址在栈中存放的位置,还记得第二次拷贝字符串的时候的目标地址么?没错是0x00135c7c,此时esp的值为0x1360b0,所以我们计算差值:

代码:

0:000:x86>??0x1360b0-0x00135c7c?
Evaluate?expression:?1076?=?0x00000434

由此得出在我们构造的数据的0x00000434-4个字节处的一个DWORD值就是我们可控EIP的值,下面我们验证这一结论,保存我们刚才构造的那个文件,然后用WinHex打开,编辑偏移0x00000434字节处的一个DWOR值这里注意大小端的问题?:

P9

然后保存这个文件,然后再用这个文件来触发刚才的场景,看一下EIP是否如我们预料的为0x004142430:

P10

可以看到,EIP已经是我们期望的0x00414243了,好吧,到这里这个溢出点已经被我们完全掌握了,到此为止这已经是一个完美的可利用溢出了,下面就是要写ShellCode来达到利用溢出的目的了。

看雪众测:http://ce.kanxue.com

看雪论坛:http://bbs.pediy.com/

? ?

漏洞挖掘方法之静态扫描+经典栈溢出实例

-----微信ID:ikanxue-----

看雪?安全 ?持续关注安全16年,专业为您服务!

(编辑:安卓应用网_ASP源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读