Android 渗透测试篇之SQL注入

上期回顾:html

    上一篇,分享so文件注入相关的知识、实践,以及扩展,如何把用户自定义的so文件加载到宿主进程中,自由改变宿主进程的执行逻辑。本篇将从一个SQL注入漏洞的场景,引出针对Android平台的渗透测试知识。前端


在Android 端测试与评估过程当中,攻击者经常逆向APP客户端存在的各类代码逻辑漏洞,分析客户端与服务端数据包通讯风险,甚至挖掘APP服务端的漏洞,部分开发者只考虑到加密客户端与服务端传输数据,却忽略了APP前端最基础的过滤和服务端的安全加固,其中,最多见的就是SQL注入漏洞,本篇就以此为主题,引出相关的知识,实践,以及扩展。python


SQL注入漏洞原理


SQL注入漏洞狭义上是经过对本地数据库提交SQL注入命令,致使数据库执行恶意的SQL命令,从而实现本地注入或者经过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,达到欺骗服务器执行恶意的SQL命令实现远程注入,致使APP的数据库被拖库,或者获取服务端的管理权限。android


漏洞利用过程


这里咱们主要介绍两种SQL注入方式,一种是本地SQL注入,一种是远程SQL注入。
git

1. 本地SQL注入
github

本地SQL注入主要使用Drozer(原名mercury) ,是一款很是不错的Android端的测试工具。
web

下载地址:https://labs.f-secure.com/tools/drozer/sql

开源项目: https://github.com/fsecurelabs/drozer/ (python版)数据库

(1)配置环境跨域

步骤1:在PC端安装 下载好的Drozer;

步骤2:在 Android 测试机中安装 agent.apk;

步骤3:在 PC 端使用 adb 命令进行端口转发,转发到 Drozer使用的端口 31415

命令:adb forward tcp:31415 tcp:31415

步骤4:在 Android 测试机中开启 Drozer Agent,并选择 embedded server-enable;

步骤5:在 PC 端开启 Drozer console;

命令:drozer console connect

(2)测试命令集合

操做命令 功能介绍
run App.package.list  -f 包名 获取包名
run App.package.info  -a 包名 获取应用的基本信息
run App.package.attacksurface 包名 查看apk存在的攻击组件接口
run App.activity.info  -a 包名 收集Activity信息,查找暴露面
run App.activity.start  --component 包名 activity 构造intent信息绕过鉴权直接运行Activity
run App.provider.info  -a 包名 获取 Content Provider  信息

run  scanner.provider.finduris -a 包名

run App.provider.query  uri

run App.provider.query  ....

先获取全部能够访问的 Uri

获取各个 Uri 的数据

查询到数听说明存在漏洞

run  scanner.provider.injection -a 包名

run  scanner.provider.traversal -a 包名

检测 SQL 注入

目录遍历

run App.service.info  -a 包名 获取 service 详情
run App.broadcast.info  -a 包名 获取broadcast  receivers信息

扩展阅读:

http://www.secpulse.com/archives/5228.html


(3)实践案例

步骤1:利用 drozer查找全部能够访问content provider的URIs

命令:run scanner.provider.finduris  -a  包名

注:这里Content URI必须是 “content:///” 的形式,所以咱们须要构造部分content URIs来访问DBcontent Provider。

步骤2: 根据上图中获取到的URIs,继续查询数据:

命令: run app.provider.query URIs --vertical

上图获取了用户名,邮箱,以及Base64编码的密码字符串。

步骤3: 进行SQL注入操做

注:Android操做系统默认使用SQLite数据库存储用户数据,SQLite数据库支持SQL语句,可使用--projection参数和--seleciton参数传递一些简单的SQL注入语句到Content provider)

r命令: un URIs --projection "'"  (这里是双引号里有个逗号)

命令: run URIs --selection "'" (这里是双引号里有个逗号)

上面两条命令执行后Android设备返回了许多的错误信息,说明存在SQL注入漏洞。

步骤4:列出数据库中的全部数据表

命令: run URIs  –projection “*FROM SQLITE_MASTER WHERE type=’table';–“

步骤5:获取某个表(如 Key )中的数据

命令:run URIs --projection "* FROM Key;--"


2. 远程SQL注入

远程SQL注入一种是使用post方式提交数据,而后抓到数据包,再使用sqlmap工具直接利用。

sqlmap工具使用方法参考连接:http://www.vuln.cn/6491

另一种是APP存在xml注入,能够修改数据包的内容,而后在返回的数据包中查看到命令执行的结果。

如:将数据包中的filename字段修改成SQL注入语句

查看返回的数据包,可获得命令执行返回的用户名信息:


修复建议


1. 使用PDO方式对SQL语句进行预处理,防止SQL注入。

2. 使用WAF配置防止SQL注入的相关策略,防止SQL注入。

3. 将没必要要导出的Content Provider设置为不导出,建议显示设置注册的ContentProvider组件的“android:exported”属性为false;
4. 建议移除该Content Provider的没必要要的openFile()接口。
5. 过滤限制跨域访问,对访问的目标文件的路径进行有效判断,

6. 使用签名验证来控制Content Provider共享数据的访问权限:设置protectionLevel=”signature”。



本文主要介绍使用Drozer工具进行SQL注入测试,它不仅是支持SQL注入,还支持组件漏洞测试等等,在Android平台还有不少优秀的用于Android端的渗透测试工具,下面是收集的一些典型Android 网络渗透的相关文章,只供你们参考学习,请勿用于其余用途。




1. Android网络渗透套件DSploit :

博客地址:

http://www.freebuf.com/articles/wireless/6279.html

2. Android平台渗透测试套件zANTI 2.0版

博客地址: 

https://www.freebuf.com/sectool/42487.html

3. 使用Introspy进行黑盒测试

博客地址: 

http://bobao.360.cn/learning/detail/154.html (此篇文章末尾有惊喜)


好了,本篇文章就分享到此,下一期再见。


END
---------------------------------------------
本篇部份内容节选《Android 应用安全测试与防御》
若是您对App安全有任何问题
可在本公众号进行留言
咱们会进行回复~
---------------------------------------------
本书由中国工信出版集团人民邮电出版社(2020年5月)出版,可到各大电商平台(京东、天猫、当当等)购买,搜索书名《Android 应用安全测试与防御》便可。

欢迎关注本书公众号
获取更多App安全知识

       

本文分享自微信公众号 - App安全红宝书(apphongbaoshu)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索