ref: https://angr.io/
ref: https://bbs.pediy.com/thread-266757.htm
目前,CTF的PWN题越来越难以PWN掉,漏洞的挖掘和利用正逐步由人工向自动化。本文主要介绍自动化挖掘的一些实例,来学习自动化挖掘。
然而,目前angr框架是个很不错的选择,angr是二进制分析的一个开源python框架。它采用符号执行技术,其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。
开源地址: https://github.com/angr/angr
涉及题目附件找i0gan要。
为了方便不与pwntools库引起冲突,我们采用拉取docker镜像的方式进行使用,当然也可以直接 pip install angr也可以。
在开始之前,我使用angr docker来运行scirpt,我编写了一个bash脚本来运行我们的angr脚本,如下所示,方便例1和例2使用。
Usage:
来自2021红明谷杯总决赛
checksec:
运行情况
程序逻辑如下
上面,我们不知道密码是什么,我们也不管它是什么,我们只要能拿到shell就可以,那么如何让程序流跳到shell函数呢?angr可以方便的来实现。
下面就是shell函数的地址,只要能使程序流执行到0x08048783
,我们就可以拿到shell。
好了,我们只要使程序流跑到我们的目标地址,再把输入数据给dump出来,dump出来的数据也就是我们的payload数据了。
angr脚本pwn1_angr.py 如下
运行:
这里我采用16进制方式打印出数据的,payload就是'\x31\x0a\x32\x0a'
测试:
好了,现在我们得到了拿到shell的payload,那么我们怎么实现自动化去挖掘和pwn掉它呢?
我们只需要让他先本地自动挖掘之后,让他自动打远程,如下。
pwn1_exp.py
运行pwn1_exp.py脚本
通过以上实验,我们也可以自己来改进,我们是通过手动分析shell的函数在哪里,当然我们也可以让他自动找这个函数。
这个例子比较简单的,但感觉比手动分析的没什么两样,下面我们来个有用的。
来自第六届全国网络空间安全技术大赛
ida打开之后,对main函数进行F5,发现IDA报下面错误
采用汇编查看图报下面错误
这是由于程序函数中的代码分支块太多,IDA没法生成图和伪代码来利于我们分析。
我截一部分有用代码如下:
输入8个字符之后,就跳到了函数代码分支块中不断的跳来跳去的。
然而发现有个函数有堆栈溢出
且有后门函数
若我们输入某些数据,能够使程序流执行到该函数,那么我们就可以利用该漏洞来获得shell,当然我们也可以直接使程序流跳到get_sh函数,但分支块中是没有用到get_sh函数的,而login_again在 ass函数中进行调用的。
ass函数也是在代码分支块中进行调用,所以这类似于fuzz,fuzz有关系的路径比没关系的要容易得多,我们就使程序流到达login_again之后,再利用堆栈溢出漏洞调用后门函数即可。
与例1差不多,只需要让angr引擎找到一个输入的数据满足程序流到达login_again函数即可。
编写angr脚本如下:
auto_angr.py
这里还是借助之前我们写的一个angr脚本。
运行如下:
那么我们得到的payload就是'\x55\x58\x59\x55\x4b\x56\x4e\x5a',这个输入能够使我们的程序流执行到login_again函数,之后呢我们就采用简单的堆栈溢出达到获得shell了。
运行如下
通过以上两个例子,我们没有去分析输入之后程序是怎么处理该数据的,我们只关心结果,面对例子2,手动分析和调试起来极其困难,程序太大了,人工分析起来很困难,这时候,借助AUTO PWN的手段,很方便我们能够找的payload,我这个惨杂了手工分析的一些参数,这只是方便于理解,当然也可以开发出自己的一套自动化系统,自动去识别程序逻辑,完成自动构建payload,这也是今后需要不断提升和研究的。目前很多pwn也需要该手段,比如xctf中start ctf babypac可以采用angr引擎很方便的找到触发漏洞的payload,那个是个aarch架构的pwn,angr引擎是跨架构的,不影响angr来实现符号执行分析,还有vm pwn这些,若懒得分析程序逻辑,只想快速找到每个opcode对应什么分支块,采用该技术也是Perfect!。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。