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

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

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