前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AUTO PWN

AUTO PWN

原创
作者头像
i0gan
修改2021-06-26 13:08:18
2K0
修改2021-06-26 13:08:18
举报
文章被收录于专栏:I0ganI0gan

ref: https://angr.io/

ref: https://bbs.pediy.com/thread-266757.htm

介绍

目前,CTF的PWN题越来越难以PWN掉,漏洞的挖掘和利用正逐步由人工向自动化。本文主要介绍自动化挖掘的一些实例,来学习自动化挖掘。

然而,目前angr框架是个很不错的选择,angr是二进制分析的一个开源python框架。它采用符号执行技术,其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。

开源地址: https://github.com/angr/angr

涉及题目附件找i0gan要。

安装angr

为了方便不与pwntools库引起冲突,我们采用拉取docker镜像的方式进行使用,当然也可以直接 pip install angr也可以。

在开始之前,我使用angr docker来运行scirpt,我编写了一个bash脚本来运行我们的angr脚本,如下所示,方便例1和例2使用。

Usage:

Example 1

来自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的函数在哪里,当然我们也可以让他自动找这个函数。

这个例子比较简单的,但感觉比手动分析的没什么两样,下面我们来个有用的。

Example 2

来自第六届全国网络空间安全技术大赛

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 安装angr
    • Example 1
    • Example 2
    • 总结
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档