移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

栏目: 编程工具 · 发布时间: 6年前

内容简介:MobSF 一款智能化、一体化的开源移动应用(Android / iOS/Windows Phone)自动测试框架(详见:需要事先安装好JDK1.7。

*本文原创作者:ForrestX386,本文属于FreeBuf原创奖励计划,未经允许禁止转载

0×00. 引言

MobSF 一款智能化、一体化的开源移动应用(Android / iOS/Windows Phone)自动测试框架(详见: http://www.freebuf.com/terminal/141439.html ),通过框架自带的Web接口上传待分析的移动应用包,就可以自动有效、快速地对应用APK 和IPA文件 及压缩的源代码进行审计分析, 并给出分析报告。在研究MobSF 框架使用的过程中,发现github的问题列表上有人曝出0.9.4.2 以下的版本web 上传接口对上传的apk包zip解压的时候存在漏洞可导致任意文件写入,引发潜在的代码执行漏洞,本文以0.9.3.7 Beta版本为例进行复现与分析,详文如下。

0×01. 复现

1.安装MobSF 0.9.3.7

需要事先安装好JDK1.7。

然后下载MobSF 0.9.3.7,解压,在其目录下执行pip install -r requirements.txt。

最后运行:python manage.py runserver 0.0.0.0:8080。

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

2.漏洞测试

打开MobSF的web接口(基于Django开发):

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

选择事先准备好的漏洞测试验证压缩包,上传分析:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

上图表示任意文件写入成功,因为系统处于开发模式下运行,故会自动重载,然后执行__init__.py中的命令(任意文件写入成功,下图,导致代码执行,上图)

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

查看/root/MobSF/StaticAnalyzer/__init__.py 确实被写入了内容:print ‘Webcome to FreeBuf!

0×02. 分析

先来了解一下MobSF的系统代码结构:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

上传功能对应的接口/upload:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

/upload接口对应的视图函数:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

跟进MobSF.views.upload ,如下:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

上传接口的主要功能就是校验文件,然后计算上传文件的MD5值,在响应包中指明即将跳转至静态扫描接口的完整路径,也即如下图所示接口:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

开始分析/StaticAnalyzer/ 接口:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

静态分析接口位于StaticAnalyzer 模块的android.static_analyzer.static_analyzer视图函数中,跟进:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

最终回调用Unzip函数对上传的apk文件进行解压缩,问题就出在这个函数中,这函数位于MobSF安装路径/StaticAnalyzer/views目录下的shared_func.py 模块中(这个路径对于构造漏洞验证压缩包有用), 核心代码如下:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

看到这里就知道为啥能任意文件写入了,虽然Django 框架中的request.FILES对象会对上传文件的文件名进行过滤处理,使得形如../../../的目录穿越失效(详见: http://www.freebuf.com/articles/web/183125.html ),导致无法任意目录写入文件,但是request.FILES 不会对压缩包内的文件进行过滤,业务代码逻辑中也未对压缩包内的文件名进行过滤,从而导致漏洞的发生。

因为漏洞验证环境中,MobSF系统处于开发模式下,因为代码文件有变动,导致系统会自动重载,执行写入到StaticAnalyzer模块__init__.py文件的代码,也即执行:print ‘Webcome to FreeBuf!

如果写入到__init__.py中的代码是一段反弹 shell 代码,那么就存在任意代码执行导致获取系统shell的可能。

0×03. 不足与突破之策

0×02节中最终分析的结果是:导致任意代码执行的前提是:系统处理开发模式,写入代码后会导致系统重载触发代码执行。

不过在正式环境中,系统一般不会处于开发模式,所以被写入的代码不会被执行。

怎么提高恶意代码被执行的概率呢?

换个思路,不一定非要写入MobSF系统文件中,也可以写入到 python 安装包中,比如pip中。

则会将恶意代码写入到pip工具的__init__.py 中,下次执行pip 安装模块的时候就会触发恶意代码执行。

如果MobSF系统运行的权限是root,直接写入/root/.ssh/authorized_keys 获取root shell 也是完全可能的。

0×04. 如何修复

看下官方是怎么修复的,看些bug fix 的commit:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

直接用z.extract函数将zip压缩包中的文件解压缩保存至指定目录,为啥extract 就是安全的呢?看下官方文档说明:

移动安全自动化测试框架MobSF多个版本静态分析接口存在的任意文件写入漏洞复现与分析

注意红框中内容,其意思是说extract函数会自动将目录穿越符和UNC符号过滤掉,所以就没有任意文件写入啥事了。

0×05. 参考

https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.extract

https://ajinabraham.com/blog/exploiting-insecure-file-extraction-in-python-for-code-execution

*本文原创作者:ForrestX386,本文属于FreeBuf原创奖励计划,未经允许禁止转载


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码