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

裂痕发掘要领之静态扫描+经典栈溢出实例

发布时间:2021-01-16 15:30:37 所属栏目:大数据 来源:网络整理
导读:这篇文章是关于裂痕发掘的一种要领—静态扫描隐藏伤害函数。为了使文章内容充分有干活,笔者在本身行使静态扫描发明的裂痕中选择一个经典栈溢出来讲授,包罗对该溢出的发掘进程,操作要领,shell?code结构等。 Part?Ⅰ静态扫描要领论及器材开拓 裂痕发掘的方
副问题[/!--empirenews.page--]

这篇文章是关于裂痕发掘的一种要领—静态扫描隐藏伤害函数。为了使文章内容充分有干活,笔者在本身行使静态扫描发明的裂痕中选择一个经典栈溢出来讲授,包罗对该溢出的发掘进程,操作要领,shell?code结构等。


Part?Ⅰ静态扫描要领论及器材开拓

裂痕发掘的要领浩瀚,好比Fuzz,源码审计,二进制代码扫描等等。Fuzz属于动态要领,往往动态要领的都必要有一个较量全面的路径包围,以是必要较量高的自动化体系,实现本钱较量高。源码审计实现较量简朴,可是必要打仗到源代码,以是对很于第三方检测机构来说一样平常得不到源码无法回收这种要领。

接下来就是本日的主角了—二进制代码扫描:这种裂痕发掘要领的思绪就是扫描方针措施的二进制文件,通过PE文件说明,指令说明等来发明方针措施中存在的隐藏裂痕代码。最轻易想到的就是通过扫描PE文件的倒入表,查找是否存在伤害函数,这种扫描要领速率快,并且较量有用,可是也有弱点:检出率不高,存在漏掉,由于只能扫描到倒入表这一方面,而假如一些模块是行使了静态lib链接的话,那就也许直接把某些伤害函数嵌入了模块内部,倒入表中不存在。以是还必要加以指令说明的要领,可是指令说明的实现难度和本钱都较量高,由于要思量到全部的裂痕模式,这也导致了另一个弱点检测速率很是慢。

对付零星的裂痕发掘职员来说,没有经验和时刻来实现较量体系化的器材,可是倒入表的扫描这一点来嗣魅照旧较量轻易实现的。假如不闲贫困,找到一个措施目次,然后行使Dependency?Walker一个一个去查找倒入表,找到你以为伤害的函数,谁会有这么多体力呢……以是,动动小手写个器材吧,BinCodeAudit就此降生了。


BinCodeAudit是一个基于Python说话开拓的用于批量扫描措施导入的隐藏伤害函数的器材,该器材的最初计划布局如下图:

P1
此刻,除了UI界面之外其他成果都已经实现。这里贴出一下今朝的一个呼吁行模式的主措施模块代码:

裂痕发掘要领之静态扫描+经典栈溢出实例

裂痕发掘要领之静态扫描+经典栈溢出实例


行使要领:

裂痕发掘要领之静态扫描+经典栈溢出实例

天生的陈诉行使HTML文件的方法:

裂痕发掘要领之静态扫描+经典栈溢出实例

P2

这个项目已经在sf建设了版本,假若有乐趣的同窗可以申请一路插手开拓维护,假若有好的较量大成果想资助添加也接待找我拉取分支。
Git?地点:http://git.code.sf.net/p/bincodeaudit/code?
SourceForge项目主页:http://sourceforge.net/projects/bincodeaudit

Part?Ⅱ静态扫描拭魅战及经典栈溢出一例

上面简朴先容了静态扫描器材的开拓,开拓器材不是目标,行使器材去找到更多的裂痕才是我们的目标,磨完刀就可以试一下了,我在这里选取Notepad++这个措施来做实例。

一、扫描二进制代码,发明方针

?起首用我们的器材来扫描整个安装目次下的全部文件,以检测是否有方针函数,这里我们的方针函数选取了CRT库函数strcpy,wcscpy,以及Kernle32模块中的lstrcpyA/W,lstrcatA/W。然后直接启动扫获得扫描功效陈诉:

裂痕发掘要领之静态扫描+经典栈溢出实例

P3

可以看到可以或许导致栈溢出的伤害函数照旧许多的,主措施内里只检测出来两个伤害函数,而其他的多半是notepad++的插件模块,看来Notepad++插件的开拓者孝顺的代码质量并不是很高。此刻选定一个方针,我们就以notepad++.exe这个措施中导入的lstrcpyW这个函数为靶子,然后就要开始说明白。

二、实行静态说明函数挪用点,发明裂痕触发场景

?起首静态说明notepad++.exe看是否可以找到挪用lstrcpyW函数的处所行使了我们可以节制的数据作为源字符串参数的。可是……颠末行使IDA起源查察,该函数的挪用点太多,静态说明的要领必要淹灭太大的人力:

?
P4
以是,这一步就直接略过了,由于这只是找到题目的一种要领,既然此要领本钱太高,就没须要纠结必然要用这种要领,往后有机遇再选择一个可以直接通过静态说明直接找到裂痕的例子。
三、调试说明,发明裂痕触发场景
静态说明要领行不通,那就直接调试了,调试的时辰要大白三点:
1.我们要找的是栈溢出
2.溢出函数也许产生在lstrcpyW
3.我们要找到在挪用lstrcpyW函数的时辰源字符串使我们可控的
清晰上面三点我们就要想要领通过调试器来帮忙我们找到上面3所描写的景象了,很轻易想到要在lstrcpyW函数下断点,而且每次断点的时辰都要把lstrcpyW函数的源字符串输出,以便于我们确认该数据是否可控。
打开Noetpad++.exe然后用Windbg附加历程,配置断点:

代码:

bp?kernel32!lstrcpyW?"du?poi(@esp+8);g"

(编辑:湖南网)

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

热点阅读