某App渗透测试实战:从信息泄漏到OSS凭据暴露的多维度漏洞分析
字数 1604 2025-12-24 12:14:42
某App渗透测试实战教学文档
一、前言
本教学文档基于某App渗透测试实战案例,详细分析从信息泄漏到OSS凭据暴露的多维度漏洞。重点涵盖数据包签名逆向分析、App配置错误导致的漏洞以及基础渗透测试技术。
二、App查壳技术
2.1 查壳目的
- 检测App是否经过加固保护
- 判断是否需要脱壳处理
- 评估逆向分析难度
2.2 查壳方法
- 使用专业查壳工具检测APK文件
- 观察检测结果:本案例中App未加固且无代码混淆
- 注意:查壳工具检测成功率约90%,可能存在误判
2.3 结果分析
- 无加固:直接反编译分析
- 无代码混淆:代码可读性高,接口信息清晰可见
三、信息泄漏漏洞
3.1 漏洞发现
- 测试功能点:忘记密码功能
- 输入正确账号:回显脱敏手机号
- 数据包分析:返回包未做脱敏处理
3.2 漏洞验证
请求示例:
POST /xx/xx/smsCode/sendByAccount HTTP/1.1
Accept: application/json
token: 35be2affbe754aab1fadaa473b908fc9
Content-Type: application/json
Content-Length: 57
Host: xxs.xx.com
{"account":"030600","timestamp":1734567890123,"sign":912940}
3.3 漏洞特征
- 前端显示脱敏,后端返回完整数据
- 存在手机号信息泄漏风险
四、逆向分析技术
4.1 签名机制分析
发现点: 更换account字段时提示"无效签名校验"
4.2 逆向分析步骤
4.2.1 反编译APK
- 工具选择:使用主流反编译工具
- 优势:无加固、无混淆,直接分析源码
4.2.2 关键代码定位
- 搜索特征字段:timestamp、sign、token
- 分析请求URI:sendByAccount
- 定位关键方法:sendAccountCode
4.2.3 核心代码分析
public final void sendAccountCode(String account, RetrofitCallBack<Base<String>> callBack) {
JSONObject jSONObject = new JSONObject();
try {
long jCurrentTimeMillis = System.currentTimeMillis() / 1000;
int iRandom = RangesKt.random(new IntRange(100000, 999999), Random.INSTANCE);
jSONObject.put("account", account);
jSONObject.put("timestamp", jCurrentTimeMillis);
jSONObject.put("sign", iRandom);
String strMd5Encode = StringExtensionsKt.md5Encode(account + jCurrentTimeMillis + iRandom);
// ... 后续请求处理
} catch (JSONException e) {
e.printStackTrace();
}
}
4.2.4 签名生成逻辑
- 参数拼接:account + timestamp + sign
- MD5加密:对拼接字符串进行MD5处理
- Token设置:MD5值放入请求头token字段
4.2.5 时间戳关键点
- 服务端预期:毫秒级时间戳
- 常见错误:误传秒级时间戳(数值差1000倍)
- 正确格式:System.currentTimeMillis() 直接使用
4.3 自动化实现
根据分析结果编写自动化脚本,实现:
- 自动生成有效签名
- 批量账号爆破
- 手机号信息获取
五、Backup备份漏洞
5.1 漏洞位置
AndroidManifest.xml配置:
<application
android:allowBackup="true"
android:fullBackupContent="@xml/backup_rules">
5.2 漏洞利用
5.2.1 备份操作
adb backup -noapk com.xxx.apps.xxxx -f xx_backup.ab
5.2.2 验证方法
- 检查备份文件大小(正常应有几十KB)
- 删除App后恢复测试:
adb restore xx_backup.ab
5.2.3 风险影响
- 未授权数据导出
- 跨设备账号无密码登录
- 敏感信息泄漏
六、组件导出漏洞
6.1 漏洞配置
<activity
android:name="com.xxx.apps.xxx.ui.profile.ChangePasswordActivity"
android:exported="true"/>
6.2 漏洞验证
adb shell am start -n com.xxx.apps.xxxg/com.xxx.apps.xxx.ui.profile.ChangePasswordActivity
6.3 攻击场景
- 未授权访问:直接调用修改密码页面
- 钓鱼攻击:恶意App诱导用户操作
- 权限绕过:跳过正常登录流程
七、OSS凭据泄漏漏洞
7.1 漏洞发现
- 登录后获取阿里云OSS临时凭据
- 凭据包含访问密钥和令牌信息
7.2 漏洞利用
- 凭据验证:测试临时凭据有效性
- OSS访问:登录阿里云OSS控制台
- 数据枚举:查看存储桶内容和文件
7.3 风险影响
- 云存储数据泄漏
- 敏感文件暴露
- 企业信息资产损失
八、渗透测试流程总结
8.1 测试流程
- 信息收集:查壳、反编译、接口分析
- 漏洞挖掘:信息泄漏、配置错误、权限问题
- 漏洞验证:实际测试、风险确认
- 报告编写:详细记录、风险评级
8.2 技术要点
- 逆向分析:关注签名算法、加密逻辑
- 配置审计:检查AndroidManifest.xml安全配置
- 数据流跟踪:从请求到响应的完整分析
8.3 防护建议
- 代码保护:适当加固和混淆
- 配置安全:合理设置组件导出权限
- 数据传输:完整的数据脱敏和加密
- 凭据管理:安全的云服务访问控制
九、附录
9.1 工具推荐
- APK查壳工具
- 反编译工具(Jadx、JEB等)
- 抓包工具(Burp Suite、Charles)
- ADB调试工具
9.2 参考标准
- OWASP Mobile Security Testing Guide
- 移动互联网应用程序安全开发规范