公开文集
0x01 SRC 资产管理系统
0x02 Web 漏洞案例库
0x03 小程序漏洞案例库
第一章:小程序渗透基础
1.1 微信小程序反编译与动态调试
1.2 微信小程序强制开启开发者模式
0x99 信息安全学习体系
01-网络安全基础
Day-001-TCP-IP协议栈安全分析
Day-002-DNS协议安全与DNS劫持攻防
Day-003-IPv6 安全基础与过渡
Day-004-HTTP-HTTPS协议深度解析
Day-005-网络嗅探与流量分析技术
Day-006-防火墙原理与配置实践
Day-007-网络地址转换 NAT 安全分析
Day-008-路由协议安全 RIP-OSPF-BGP
Day-009-VLAN 安全与 VLAN-Hopping
Day-010-无线网络基础与安全 802.11
Day-011-网络访问控制 802.1X-NAC
Day-012-网络分段与微隔离设计
Day-013-负载均衡器安全配置
Day-014-CDN安全与防护
Day-015-NTP安全
Day-016-DHCP安全与攻击防护
Day-017-ICMP协议安全分析
Day-018-网络协议模糊测试基础
Day-019-网络流量基线建立
Day-020-网络取证基础
Day-021-网络入侵检测系统 NIDS
Day-022-网络入侵防御系统 NIPS
Day-023-网络流量加密与解密
Day-024-网络协议逆向工程基础
Day-025-网络性能与安全权衡
Day-026-SDN 安全
Day-027-网络虚拟化安全
Day-028-网络欺骗技术
Day-029-网络威胁情报应用
Day-030-网络容量规划与安全
Day-031-网络安全架构设计实战
02-Web 安全
Day-032-OWASP-Top-10-2021详解
Day-033-SQL 注入原理与手工检测
Day-034-SQL注入进阶报错注入与盲注
Day-035-XSS跨站脚本攻击基础
Day-036-XSS 进阶绕过与利用
Day-037-XSS进阶绕过与利用
Day-038-CSRF 跨站请求伪造
Day-039-文件上传漏洞
Day-040-反序列化漏洞基础
Day-041-PHP反序列化深入
Day-042-Java反序列化深入
Day-043-SSTI 服务端模板注入
Day-044-文件包含漏洞 LFI-RFI
Day-045-命令注入漏洞
Day-046-XXE-XML 外部实体注入
Day-047-反序列化漏洞进阶
Day-048-API 安全基础
Day-049-API认证与授权安全
Day-050-API漏洞挖掘实战
Day-051-文件上传漏洞进阶
Day-052-反序列化漏洞实战
Day-053-Web 安全综合实战
Day-054-移动安全基础
Day-055-Android 应用安全测试
Day-056-iOS 应用安全测试
Day-057-移动应用综合实战
Day-058-云安全基础
Day-059-AWS 安全实战
Day-060-Azure 安全实战
Day-061-GCP 安全实战
Day-062-云安全综合实战
Day-063-容器安全基础
Day-064-Docker 安全实战
Day-065-Kubernetes 安全实战
Day-066-容器安全综合实战
Day-067-API 安全进阶
Day-068-服务端请求伪造 SSRF 深入
Day-069-文件上传漏洞进阶
Day-070-反序列化漏洞实战进阶
Day-071-业务逻辑漏洞深入
Day-072-前端安全深入
Day-073-Web 安全综合实战
Day-074-云安全进阶
Day-075-移动安全进阶
Day-076-API 安全进阶
Day-077-前端安全进阶
Day-078-业务逻辑漏洞进阶
Day-079-反序列化漏洞实战进阶
Day-080-文件上传漏洞实战进阶
Day-081-SSTI 服务端模板注入进阶
Day-082-XXE-XML 外部实体注入进阶
Day-083-SSRF 服务端请求伪造进阶
Day-084-命令注入漏洞进阶
Day-085-文件包含漏洞进阶
Day-086-反序列化漏洞实战进阶
Day-087-文件上传漏洞实战进阶
Day-088-SSTI 服务端模板注入实战进阶
Day-089-XXE-XML 外部实体注入实战进阶
Day-090-SSRF 服务端请求伪造实战进阶
Day-091-命令注入漏洞实战进阶
Day-092-Web 安全综合实战
Day-093-GraphQL 安全
Day-094-JWT 与 OAuth2 安全
03-系统安全
Day-095-系统监控与检测
Day-096-主机防火墙配置
Day-097-系统审计与合规
Day-098-Linux 系统安全进阶
Day-099-Windows 系统安全进阶
Day-100-容器安全进阶
Day-101-容器编排安全进阶
Day-102-Linux 内核安全
Day-103-Windows 内核安全
Day-104-系统安全总结与实战
Day-105-Linux 系统安全基础
Day-106-Windows 系统安全基础
Day-107-容器安全基础
Day-108-系统加固技术
Day-109-日志分析技术
Day-110-威胁狩猎技术
04-应用安全
Day-111-安全编码规范
Day-112-输入验证技术
Day-113-输出编码技术
Day-114-错误处理安全
Day-115-会话管理安全
Day-116-认证安全
Day-117-授权安全
Day-118-数据保护安全
Day-119-日志安全
Day-120-API 安全
Day-121-微服务安全
Day-122-新兴技术安全概论
Day-123-DevSecOps 流水线安全
Day-124-云原生安全架构
Day-125-API 安全最佳实践
Day-126-安全编码规范
Day-127-SDL 安全开发生命周期
Day-128-威胁建模实战
Day-129-安全需求分析
Day-130-安全架构设计
Day-131-安全编码实践Java
Day-132-安全编码实践Python
Day-133-代码审计方法论
Day-134-静态代码分析SAST
Day-135-动态应用测试DAST
Day-136-交互式测试IAST
Day-137-软件成分分析SCA
Day-138-依赖漏洞管理
Day-139-安全测试自动化
Day-140-漏洞管理与响应
Day-141-应用安全总结与展望
Day-142-OWASP-Top10-2024 详解
Day-143-CWE-Top25 分析
Day-144-漏洞挖掘方法论
Day-145-模糊测试技术
Day-146-逆向工程基础
Day-147-漏洞利用开发基础
Day-148-漏洞复现与验证
Day-149-漏洞披露流程
Day-150-CVE 申请与管理
Day-151-漏洞赏金计划
Day-152-等保2.0详解
Day-153-GDPR 合规实践
Day-154-数据安全法解读
Day-155-个人信息保护法与合规指南
Day-156-个人信息保护法解读
Day-157-ISO-27001 信息安全管理体系
Day-158-SOC-2 合规与审计
Day-159-PCI-DSS 支付卡行业数据安全标准
Day-160-网络安全审查办法解读
Day-161-数据出境安全评估办法
Day-162-应用安全评估实战
Day-163-红蓝对抗演练
Day-164-安全应急响应
Day-165-安全运营中心建设
Day-166-应用安全总结与展望
05-密码学
Day-167-密码学基础
Day-168-对称加密算法详解
Day-169-非对称加密算法详解
Day-170-哈希函数与数字签名
Day-171-密钥管理与PKI
Day-172-TLS-SSL 协议详解
Day-173-国密算法详解
Day-174-认证与密钥协议
Day-175-随机数生成与熵源
Day-176-椭圆曲线密码学详解
Day-177-后量子密码学详解
Day-178-高级密码学主题
Day-179-密码学行业应用精选
Day-180-常用加密算法原理与实现
Day-181-密码学总结与展望
Day-182-密码学系列总结与展望
06-渗透测试
Day-183-渗透测试方法论
Day-184-信息收集技术详解
Day-185-漏洞扫描技术详解
Day-186-漏洞利用技术详解
Day-187-渗透测试中的漏洞利用框架
Day-188-漏洞利用框架与 Metasploit 深入
Day-189-渗透测试中的 WAF 绕过技术
Day-190-渗透测试中的模糊测试技术
Day-191-渗透测试中的代码审计与静态分析
Day-192-渗透测试中的密码哈希破解技术
Day-193-渗透测试报告编写指南
Day-194-Web 应用渗透测试
Day-195-渗透测试中的 API 安全测试
Day-196-渗透测试中的 GraphQL 安全测试
Day-197-渗透测试中的前后端分离应用测试
Day-198-渗透测试中的小程序安全测试
Day-199-渗透测试中的浏览器安全测试
Day-200-OAuth-SSO安全测试
Day-201-渗透测试中的业务逻辑漏洞测试
Day-202-渗透测试中的厚客户端安全测试
Day-203-渗透测试综合实战演练
Day-204-内网渗透技术详解
Day-205-渗透测试中的内网信息收集进阶
Day-206-渗透测试中的域森林渗透技术
Day-207-渗透测试中的权限维持技术
Day-208-渗透测试中的横向移动技术
Day-209-渗透测试中的痕迹清理与反取证技术
Day-210-渗透测试中的数据窃取与 Exfiltration 技术
Day-211-渗透测试中的内部威胁与数据泄露测试
Day-212-渗透测试中的物理安全渗透
Day-213-社会工程学攻击技术
Day-214-移动应用渗透测试
Day-215-云安全渗透测试
Day-216-渗透测试中的容器与 Kubernetes 安全渗透
Day-217-渗透测试中的 Serverless 安全测试
Day-218-渗透测试中的微服务安全测试
Day-219-物联网安全渗透测试
Day-220-工业控制系统安全渗透测试
Day-221-无线网络安全渗透测试
Day-222-数据库安全渗透测试
Day-223-渗透测试中的供应链安全测试
Day-224-红队演练技术详解
Day-225-渗透测试中的红队基础设施搭建
Day-226-渗透测试中的威胁情报与狩猎
Day-227-渗透测试中的综合指纹识别技术
Day-228-自动化渗透测试技术
Day-229-渗透测试中的运维安全测试
Day-230-渗透测试中的区块链与智能合约安全测试
Day-231-渗透测试中的漏洞管理与修复验证
Day-232-渗透测试法律与合规
Day-233-后渗透攻击技术详解
Day-234-渗透测试中的人工智能应用
Day-235-漏洞利用开发深入
Day-236-云原生渗透测试深入
07-应急响应
Day-237-应急响应概述与核心概念
Day-238-应急响应流程框架
Day-239-CSIRT 团队组建与职责分工
Day-240-应急响应工具包准备
Day-241-应急响应法律与合规要求
Day-242-安全事件检测方法与指标
Day-243-云原生应急响应
Day-244-日志收集与分析技术
Day-245-网络流量分析与异常识别
Day-246-自动化响应与 SOAR
Day-247-端点监控与 EDR 技术
Day-248-威胁狩猎方法论
Day-249-威胁情报在检测中的应用
Day-250-数字取证基础与证据链管理
Day-251-内存取证技术
Day-252-磁盘取证与文件恢复
Day-253-网络取证与数据包分析
Day-254-云环境与容器取证
Day-255-恶意代码静态分析技术
Day-256-恶意代码动态分析技术
Day-257-恶意代码行为分析方法
Day-258-逆向工程基础与工具
Day-259-沙箱技术与自动化分析
Day-260-事件隔离与遏制策略
Day-261-威胁根除与系统修复
Day-262-系统恢复与数据重建
Day-263-业务连续性计划
Day-264-事件复盘与经验总结
Day-265-APT 攻击事件复盘分析
Day-266-勒索软件事件响应实战
Day-267-数据泄露事件处置流程
Day-268-内部威胁调查与取证
Day-269-综合应急响应演练
08-安全运维
Day-270-安全运营中心 SOC 概述
Day-271-安全监控指标体系
Day-272-安全告警管理
Day-273-安全可视化与仪表盘
Day-274-监控工具选型
Day-275-日志采集技术
Day-276-日志标准化与解析
Day-277-日志存储与归档
Day-278-日志分析技术
Day-279-日志合规要求
Day-280-SIEM 架构与设计
Day-281-关联规则引擎
Day-282-高级关联分析
Day-283-UEBA 用户实体行为分析
Day-284-威胁狩猎
Day-285-SOAR 基础概念
Day-286-剧本设计
Day-287-自动化响应技术
Day-288-安全工具集成
Day-289-SOAR 度量与优化
Day-290-安全基线管理
Day-291-漏洞管理流程
Day-292-补丁管理策略
Day-293-变更安全管理
Day-294-合规审计技术
Day-295-7x24 安全运营
Day-296-安全事件管理流程
Day-297-安全运营度量体系
Day-298-持续改进机制
Day-299-安全运维综合演练
Day-300-云原生安全运营
Day-301-AI 与机器学习安全运营
Day-302-安全自动化脚本实战
09-移动安全
Day-303-移动安全威胁概述
Day-304-移动设备安全架构
Day-305-移动操作系统安全模型
Day-306-移动应用权限管理
Day-307-移动端数据加密
Day-308-330-Android 安全合集
Day-309-Android 安全架构
Day-310-Android 组件安全
Day-311-Android 权限与隐私
Day-312-Android 逆向工程
Day-313-Android 应用加固
Day-314-iOS 安全架构
Day-315-iOS 应用沙盒机制
Day-316-越狱与反越狱
Day-317-iOS 逆向工程
Day-318-iOS 企业分发安全
Day-319-移动安全开发生命周期
Day-320-移动应用安全测试
Day-321-移动应用加固技术
Day-322-移动威胁防护
Day-323-移动安全合规
10-云安全
Day-324-云计算安全模型
Day-325-责任共担模型
Day-326-云安全威胁模型
Day-327-云安全合规框架
Day-328-云安全架构设计
Day-329-AWS IAM 安全
Day-330-AWS 网络安全
Day-331-AWS 存储安全
Day-332-AWS 安全监控
Day-333-AWS 安全最佳实践
Day-334-Azure AD 安全
Day-335-Azure 网络安全
Day-336-Azure 存储安全
Day-337-Azure 安全中心
Day-338-Azure 安全最佳实践
Day-339-容器安全基础
Day-340-Kubernetes 安全
Day-341-Serverless 安全
Day-342-云原生 DevSecOps
Day-343-云安全态势管理 CSPM
11-物联网工控
Day-344-物联网安全概述
Day-345-IoT 通信协议安全
Day-346-IoT 设备安全
Day-347-IoT 平台安全
Day-348-IoT 应用安全
Day-349-工业控制系统概述
Day-350-工控协议安全
Day-351-PLC 安全
Day-352-SCADA 系统安全
Day-353-工控安全防护
12-综合与总结
Day-354-安全职业发展路径
Day-355-安全技术趋势展望
Day-356-安全建设方法论
Day-357-经典攻防案例复盘
Day-358-安全学习资源指南
Day-359-信息安全行业求职指南
-
+
首页
Day-214-移动应用渗透测试
# Day 222: 移动应用渗透测试 > 渗透测试系列第 12 天 | 预计阅读时间:60 分钟 | 难度:★★★★☆ --- ## 清单 目录 1. [移动应用渗透测试概述](#移动应用渗透测试概述) 2. [移动应用架构分析](#移动应用架构分析) 3. [移动应用测试环境](#移动应用测试环境) 4. [Android 应用安全测试](#android 应用安全测试) 5. [iOS 应用安全测试](#ios 应用安全测试) 6. [移动 API 安全测试](#移动 api 安全测试) 7. [移动应用常见漏洞](#移动应用常见漏洞) 8. [逆向工程技术](#逆向工程技术) 9. [移动应用渗透实战案例](#移动应用渗透实战案例) 10. [移动应用渗透最佳实践](#移动应用渗透最佳实践) 11. [总结与思考](#总结与思考) 12. [参考资料](#参考资料) --- ## 移动应用渗透测试概述 ### 什么是移动应用渗透测试 移动应用渗透测试是对移动应用程序(Android、iOS)进行全面的安全评估,发现可能被攻击者利用的安全漏洞。 **移动应用渗透测试的核心定义**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 移动应用渗透测试定义 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 移动应用渗透测试 = 客户端测试 + API 测试 + 服务端测试 │ │ │ │ 关键要素: │ │ 1. 客户端测试(Client-side Testing) │ │ - 应用逆向分析 │ │ - 本地数据存储 │ │ - 硬编码密钥 │ │ - 代码保护 │ │ │ │ 2. API 测试(API Testing) │ │ - 认证授权 │ │ - 数据验证 │ │ - 速率限制 │ │ - 加密传输 │ │ │ │ 3. 服务端测试(Server-side Testing) │ │ - 后端 API 安全 │ │ - 数据库安全 │ │ - 业务逻辑安全 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 移动应用安全挑战 **独特挑战**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 移动应用安全挑战 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 设备多样性: │ │ ├── 不同操作系统版本 │ │ ├── 不同厂商定制 │ │ └── 不同屏幕尺寸 │ │ │ │ 网络环境复杂: │ │ ├── 公共 WiFi 风险 │ │ ├── 网络切换频繁 │ │ └── 离线数据处理 │ │ │ │ 数据存储风险: │ │ ├── 本地敏感数据存储 │ │ ├── 密钥硬编码 │ │ └── 日志泄露 │ │ │ │ 逆向工程风险: │ │ ├── 应用容易被反编译 │ │ ├── 代码容易被分析 │ │ └── 协议容易被破解 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 移动应用架构分析 ### 典型移动应用架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 移动应用典型架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 移动客户端: │ │ ├── UI 层(Activity/Fragment/ViewController) │ │ ├── 业务逻辑层 │ │ ├── 数据访问层 │ │ └── 网络通信层 │ │ │ │ 通信协议: │ │ ├── HTTPS/TLS │ │ ├── WebSocket │ │ ├── GraphQL │ │ └── 自定义协议 │ │ │ │ 后端服务: │ │ ├── API 网关 │ │ ├── 业务服务 │ │ ├── 数据库 │ │ └── 第三方服务 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 攻击面分析 **Android 攻击面**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Android 攻击面 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用组件: │ │ ├── Activity(界面组件) │ │ ├── Service(后台服务) │ │ ├── BroadcastReceiver(广播接收器) │ │ └── ContentProvider(内容提供者) │ │ │ │ 数据存储: │ │ ├── SharedPreferences │ │ ├── SQLite Database │ │ ├── File Storage │ │ └── External Storage │ │ │ │ 通信机制: │ │ ├── Intent(组件间通信) │ │ ├── Binder(进程间通信) │ │ └── AIDL(接口定义) │ │ │ └─────────────────────────────────────────────────────────────┘ ``` **iOS 攻击面**: ``` ┌─────────────────────────────────────────────────────────────┐ │ iOS 攻击面 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用组件: │ │ ├── ViewController(界面) │ │ ├── AppDelegate(应用代理) │ │ ├── Extension(扩展) │ │ └── Widget(小组件) │ │ │ │ 数据存储: │ │ ├── UserDefaults │ │ ├── Core Data │ │ ├── Keychain(密钥链) │ │ └── File System │ │ │ │ 通信机制: │ │ ├── URL Scheme │ │ ├── Universal Links │ │ └── Inter-App Communication │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 移动应用测试环境 ### Android 测试环境 **模拟器设置**: ```bash # 安装 Android Studio # 下载:https://developer.android.com/studio # 创建模拟器 $ avdmanager create avd -n test_device -k "system-images;android-30;google_apis;x86_64" # 启动模拟器 $ emulator -avd test_device -writable-system # 获取 root 权限 $ adb root $ adb remount # 安装 Frida Server $ adb push frida-server /data/local/tmp/frida-server $ adb shell chmod 755 /data/local/tmp/frida-server $ adb shell /data/local/tmp/frida-server & ``` **真机测试设置**: ```bash # 开启开发者选项 # 设置 → 关于手机 → 连续点击版本号 7 次 # 开启 USB 调试 # 设置 → 开发者选项 → USB 调试 # 连接设备 $ adb devices # 安装测试证书 $ adb push burp.der /sdcard/burp.der # 手动安装到系统证书 # 绕过网络安全性配置 # 需要修改应用或使用 Frida hook ``` ### iOS 测试环境 **模拟器设置**: ```bash # 安装 Xcode # App Store 下载 # 启动模拟器 $ open -a Simulator # 安装应用 $ xcrun simctl install booted app.ipa # 越狱模拟器(有限支持) # 建议使用真机测试 ``` **真机测试设置**: ```bash # 越狱设备(推荐) # 使用 checkra1n、unc0ver 等工具 # 安装 Cydia/Sileo # 添加源:https://build.frida.re/ # 安装 Frida $ apt install frida # 启动 Frida $ frida-server & # 安装证书 # 设置 → 通用 → 关于本机 → 证书信任设置 # 启用 Burp Suite 证书 ``` ### 代理配置 **Burp Suite 配置**: ``` 1. 启动 Burp Suite 2. Proxy → Options → Proxy Listeners 3. 添加监听器:0.0.0.0:8080 4. 手机设置 WiFi 代理 - 服务器:电脑 IP - 端口:8080 5. 安装 Burp 证书 - Android: http://burpsuite/cert - iOS: http://burpsuite/cert ``` **Charles 配置**: ``` 1. 启动 Charles 2. Proxy → Proxy Settings → Port: 8888 3. 手机设置 WiFi 代理 4. 安装 Charles 证书 5. SSL Proxying → 添加目标域名 ``` --- ## Android 应用安全测试 ### APK 分析 **反编译 APK**: ```bash # 使用 apktool $ apktool d app.apk -o app_decompiled # 使用 jadx $ jadx -d app_source app.apk # 查看 AndroidManifest.xml $ cat app_decompiled/AndroidManifest.xml # 查看应用组件 $ grep -r "android:name" app_decompiled/AndroidManifest.xml ``` **静态分析要点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Android 静态分析要点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 权限检查: │ │ ├── 敏感权限(SMS、联系人、位置) │ │ ├── 危险权限组合 │ │ └── 权限滥用 │ │ │ │ 组件安全: │ │ ├── exported 属性 │ │ ├── permission 属性 │ │ └── intent-filter 配置 │ │ │ │ 代码安全: │ │ ├── 硬编码密钥 │ │ ├── 调试代码残留 │ │ └── 日志泄露 │ │ │ │ 网络安全: │ │ ├── cleartextTrafficPermitted │ │ ├── 证书绑定 │ │ └── 自定义 CA 信任 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 动态分析 **Frida Hook**: ```javascript // hook_ssl.js - Hook SSL 验证 Java.perform(function() { var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); var SSLContext = Java.use('javax.net.ssl.SSLContext'); X509TrustManager.checkServerTrusted.implementation = function(chain, authType) { console.log('[+] checkServerTrusted called'); }; SSLContext.init.overload('[Ljavax.net.ssl.KeyManager;', '[Ljavax.net.ssl.TrustManager;', 'java.security.SecureRandom').implementation = function(keyManager, trustManager, secureRandom) { console.log('[+] SSLContext.init called'); this.init(keyManager, null, secureRandom); }; }); // 运行 $ frida -U -f com.target.app -l hook_ssl.js ``` **SSL Pinning Bypass**: ```javascript // ssl_pinning_bypass.js Java.perform(function() { // OkHttp 3 var CertificatePinner = Java.use('okhttp3.CertificatePinner'); CertificatePinner.check.overload('java.lang.String', 'java.util.List').implementation = function() { console.log('[+] OkHttp3 CertificatePinner.check bypassed'); }; // OkHttp 4 CertificatePinner.check.overload('java.lang.String', 'java.lang.Object').implementation = function() { console.log('[+] OkHttp4 CertificatePinner.check bypassed'); }; // TrustManager var TrustManager = Java.use('javax.net.ssl.X509TrustManager'); TrustManager.checkServerTrusted.implementation = function() { console.log('[+] TrustManager.checkServerTrusted bypassed'); }; }); // 运行 $ frida -U -f com.target.app -l ssl_pinning_bypass.js ``` ### 数据存储测试 **本地数据检查**: ```bash # 备份应用数据 $ adb backup -noapk com.target.app -f backup.ab # 提取备份 $ java -jar abe.jar unpack backup.ab backup.tar # 查看 SharedPreferences $ adb shell cat /data/data/com.target.app/shared_prefs/*.xml # 查看数据库 $ adb shell sqlite3 /data/data/com.target.app/databases/app.db sqlite> .tables sqlite> SELECT * FROM users; # 查看文件存储 $ adb shell ls -la /data/data/com.target.app/files/ $ adb shell ls -la /sdcard/Android/data/com.target.app/ ``` **敏感数据检测**: ``` ┌─────────────────────────────────────────────────────────────┐ │ Android 敏感数据存储检测 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ SharedPreferences: │ │ ├── 明文密码 │ │ ├── 认证 Token │ │ └── 个人敏感信息 │ │ │ │ SQLite Database: │ │ ├── 未加密用户数据 │ │ ├── 聊天记录 │ │ └── 交易记录 │ │ │ │ 文件存储: │ │ ├── 缓存敏感数据 │ │ ├── 日志文件 │ │ └── 临时文件 │ │ │ │ External Storage: │ │ ├── 公开目录存储敏感数据 │ │ └── 未加密文件 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## iOS 应用安全测试 ### IPA 分析 **IPA 解包**: ```bash # 从设备提取 IPA $ mkdir Payload $ cp -R /var/containers/Bundle/Application/App.app Payload/ $ zip -r app.ipa Payload/ # 解包 IPA $ unzip app.ipa # 查看 Info.plist $ cat Payload/App.app/Info.plist # 查看二进制 $ otool -l Payload/App.app/App | grep -A 5 LC_VERSION_MIN_IPHONEOS ``` **静态分析要点**: ``` ┌─────────────────────────────────────────────────────────────┐ │ iOS 静态分析要点 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ Info.plist 检查: │ │ ├── ATS 配置(App Transport Security) │ │ ├── URL Scheme 配置 │ │ ├── 权限描述 │ │ └── 后台模式 │ │ │ │ 二进制分析: │ │ ├── ARC 启用情况 │ │ ├── 堆栈保护(Stack Canary) │ │ ├── PIE(位置无关可执行文件) │ │ └── 代码签名 │ │ │ │ 代码安全: │ │ ├── 硬编码密钥 │ │ ├── 调试代码 │ │ └── 日志函数 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 动态分析 **Frida Hook iOS**: ```javascript // hook_ios.js - iOS Hook 示例 Interceptor.attach(ObjC.classes.NSURLSession['- dataTaskWithRequest:completionHandler:'].implementation, { onEnter: function(args) { var request = ObjC.Object(args[2]); var url = request.URL().absoluteString().toString(); console.log('[+] Request URL:', url); } }); // Hook Keychain var Keychain = ObjC.classes.SecItem; Interceptor.attach(Keychain['SecItemAdd'].implementation, { onEnter: function(args) { console.log('[+] SecItemAdd called'); } }); // 运行 $ frida -U App -l hook_ios.js ``` **SSL Pinning Bypass iOS**: ```javascript // ios_ssl_bypass.js if (ObjC.available) { var NSURLSessionDelegate = ObjC.classes['NSURLSessionDelegate']; // NSURLSessionDelegate if (NSURLSessionDelegate) { NSURLSessionDelegate['- URLSession:didReceiveChallenge:completionHandler:'].implementation = function(session, challenge, handler) { console.log('[+] SSL Pinning bypassed'); var credential = ObjC.classes.NSURLCredential['+ credentialForTrust:'](challenge.protectionSpace().serverTrust()); handler(credential, 0); }; } // AFNetworking var AFSecurityPolicy = ObjC.classes['AFSecurityPolicy']; if (AFSecurityPolicy) { AFSecurityPolicy['- evaluateServerTrust:forDomain:'].implementation = function(trust, domain) { console.log('[+] AFNetworking SSL Pinning bypassed'); return true; }; } } // 运行 $ frida -U App -l ios_ssl_bypass.js ``` ### Keychain 测试 **Keychain 数据提取**: ```bash # 使用 Keychain-Dumper $ git clone https://github.com/awslabs/keychain-dumper $ make $ ./keychain_dumper # 输出示例: Generic ======= Service: com.target.app Account: user_token Data: abc123... Internet ======== Server: https://api.target.com Account: user123 Data: password123 ``` **Keychain 安全检测**: ``` ┌─────────────────────────────────────────────────────────────┐ │ iOS Keychain 安全检测 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 存储属性检查: │ │ ├── kSecAttrAccessible(访问属性) │ │ ├── kSecAttrAccessibleWhenUnlocked │ │ ├── kSecAttrAccessibleAfterFirstUnlock │ │ └── kSecAttrAccessibleAlways │ │ │ │ 敏感数据类型: │ │ ├── 密码 │ │ ├── Token │ │ ├── 私钥 │ │ └── 个人数据 │ │ │ │ 共享 Keychain: │ │ ├── App Group 共享 │ │ └── 跨应用访问风险 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 移动 API 安全测试 ### API 测试要点 **认证授权测试**: ``` ┌─────────────────────────────────────────────────────────────┐ │ 移动 API 认证授权测试 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 认证测试: │ │ ├── Token 有效性验证 │ │ ├── Token 过期处理 │ │ ├── Token 刷新机制 │ │ └── 多设备登录处理 │ │ │ │ 授权测试: │ │ ├── 水平权限提升(访问其他用户数据) │ │ ├── 垂直权限提升(访问管理员功能) │ │ ├── IDOR 漏洞 │ │ └── 功能级访问控制 │ │ │ │ 会话管理: │ │ ├── 会话固定 │ │ ├── 会话劫持 │ │ └── 会话超时 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### API 测试工具 **Burp Suite 测试**: ``` 1. 配置手机代理指向 Burp 2. 捕获移动应用流量 3. 分析 API 请求 4. 修改参数测试 5. 重放请求验证 测试点: - 修改用户 ID 测试 IDOR - 修改权限参数测试越权 - 修改金额参数测试业务逻辑 - 重放请求测试重放攻击 - 删除认证头测试认证绕过 ``` **Postman 测试**: ```bash # 导出 Burp 请求到 Postman # 或使用 Postman 直接测试 # 测试认证 POST /api/login { "username": "test", "password": "test123" } # 使用 Token 测试 GET /api/user/profile Authorization: Bearer <token> # 测试越权 GET /api/user/123/profile # 自己的 GET /api/user/124/profile # 他人的 ``` ### 常见 API 漏洞 **OWASP API Top 10**: ``` ┌─────────────────────────────────────────────────────────────┐ │ OWASP API Security Top 10 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ API1: Broken Object Level Authorization │ │ API2: Broken Authentication │ │ API3: Excessive Data Exposure │ │ API4: Lack of Resources & Rate Limiting │ │ API5: Broken Function Level Authorization │ │ API6: Mass Assignment │ │ API7: Security Misconfiguration │ │ API8: Injection │ │ API9: Improper Assets Management │ │ API10: Insufficient Logging & Monitoring │ │ │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 移动应用常见漏洞 ### OWASP MSTG Top 10 **移动安全测试指南 Top 10**: ``` ┌─────────────────────────────────────────────────────────────┐ │ OWASP MSTG Top 10 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ M1: Improper Platform Usage │ │ - Android Intent 滥用 │ │ - iOS URL Scheme 滥用 │ │ │ │ M2: Insecure Data Storage │ │ - 明文存储敏感数据 │ │ - 不安全的 Keychain 使用 │ │ │ │ M3: Insecure Communication │ │ - 未加密通信 │ │ - 证书验证绕过 │ │ │ │ M4: Insecure Authentication │ │ - 弱认证机制 │ │ - 认证绕过 │ │ │ │ M5: Insufficient Cryptography │ │ - 弱加密算法 │ │ - 密钥管理不当 │ │ │ │ M6: Insecure Authorization │ │ - 权限检查缺失 │ │ - 越权访问 │ │ │ │ M7: Client Code Quality │ │ - 代码注入漏洞 │ │ - 内存安全问题 │ │ │ │ M8: Code Tampering │ │ - 缺少完整性校验 │ │ - 容易被篡改 │ │ │ │ M9: Reverse Engineering │ │ - 缺少代码保护 │ │ - 容易被逆向 │ │ │ │ M10: Extraneous Functionality │ │ - 调试代码残留 │ │ - 测试功能未移除 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 漏洞检测清单 **Android 漏洞检测**: ```bash # 使用 MobSF 自动化扫描 $ git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF $ cd Mobile-Security-Framework-MobSF $ ./setup.sh $ ./run.sh # 访问 http://127.0.0.1:8000 # 上传 APK 进行自动分析 # 使用 QARK 静态分析 $ git clone https://github.com/linkedin/qark $ qark --apk app.apk --output-dir output/ ``` **iOS 漏洞检测**: ```bash # 使用 Needle 框架 $ git clone https://github.com/OWASP/needle $ cd needle $ ./needle # 模块示例: needle > use core/framework/check_dynamic_libraries needle > run needle > use core/framework/check_url_scheme needle > run needle > use storage/keychain/dump needle > run ``` --- ## 逆向工程技术 ### Android 逆向 **Smali 分析**: ```smali # Smali 代码示例 .method public checkPassword(Ljava/lang/String;)Z .locals 2 const-string v0, "admin123" # 硬编码密码 invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v1 return v1 .end method # 修改 Smali # 将密码改为空字符串或总是返回 true ``` **动态调试**: ```bash # 使用 android-studio 调试 # 1. 设置断点 # 2. 附加到进程 # 3. 单步调试 # 使用 Frida 动态分析 $ frida -U -f com.target.app --no-pause # 跟踪函数调用 $ frida-trace -U -f com.target.app -j "java.*.checkPassword*" ``` ### iOS 逆向 **Hopper 反编译**: ``` 1. 打开 Hopper 2. 导入 App 二进制文件 3. 查看伪代码 4. 分析关键函数 5. 定位敏感逻辑 ``` **LLDB 调试**: ```bash # 附加到进程 $ lldb (lldb) process attach -n App # 设置断点 (lldb) breakpoint set -n "-[ViewController checkPassword:]" # 继续执行 (lldb) continue # 查看寄存器 (lldb) register read # 查看内存 (lldb) memory read ``` --- ## 移动应用渗透实战案例 ### 案例背景 **目标**:某电商移动应用 **平台**:Android + iOS **测试范围**:应用客户端、API、后端服务 ### 测试过程 #### 第 1 阶段:信息收集 ```bash # APK 下载 $ wget https://play.google.com/store/apps/details?id=com.target.shop # 反编译 $ apktool d shop.apk # 分析 Manifest $ cat shop/AndroidManifest.xml # 发现: # - 导出的 Activity: 3 个 # - 导出的 Service: 2 个 # - 权限:15 个(含敏感权限 5 个) ``` #### 第 2 阶段:静态分析 ``` 发现漏洞: 1. 硬编码 API 密钥 - 位置:com/target/shop/util/Config.smali - 密钥:AKIAIOSFODNN7EXAMPLE 2. 明文存储密码 - 位置:SharedPreferences - 文件:user_prefs.xml 3. 调试代码残留 - Log.d("DEBUG", "Password: " + password) ``` #### 第 3 阶段:动态分析 ```javascript // Hook 认证逻辑 Java.perform(function() { var LoginActivity = Java.use('com.target.shop.activity.LoginActivity'); LoginActivity.login.implementation = function(username, password) { console.log('[+] Login called:', username, password); return this.login(username, password); }; }); // 发现: // - 密码在日志中明文输出 // - 认证逻辑可绕过 ``` #### 第 4 阶段:API 测试 ``` 发现漏洞: 1. IDOR 漏洞 - GET /api/user/123/profile - 修改为 GET /api/user/124/profile - 成功访问其他用户数据 2. 未授权访问 - 删除 Authorization 头 - 部分 API 仍可访问 3. 速率限制缺失 - 暴力破解登录接口 - 无限制尝试 ``` #### 第 5 阶段:数据存储测试 ```bash # 提取数据 $ adb backup -noapk com.target.shop -f backup.ab $ java -jar abe.jar unpack backup.ab backup.tar # 发现: # - SharedPreferences 明文存储 Token # - SQLite 数据库未加密 # - 缓存目录包含敏感图片 ``` ### 漏洞汇总 | 漏洞 | 平台 | 风险等级 | CVSS | |------|------|----------|------| | 硬编码 API 密钥 | Android | 高危 | 7.5 | | 明文存储密码 | Android | 高危 | 8.1 | | IDOR 漏洞 | API | 高危 | 7.8 | | 认证绕过 | API | 严重 | 9.1 | | 日志泄露 | Android | 中危 | 5.3 | | 缺少速率限制 | API | 中危 | 5.7 | | SSL Pinning 可绕过 | iOS | 中危 | 4.8 | ### 修复建议 ``` 短期(1-2 周): 1. 移除硬编码密钥,使用安全存储 2. 加密本地存储的敏感数据 3. 修复 IDOR 漏洞,添加权限检查 4. 实施速率限制 中期(1 月): 1. 实施证书绑定 2. 添加代码混淆 3. 移除调试代码 4. 实施日志脱敏 长期(3 月): 1. 建立安全开发流程 2. 定期安全测试 3. 实施 RASP 4. 建立威胁情报 ``` --- ## 移动应用渗透最佳实践 ### 测试清单 ``` ┌─────────────────────────────────────────────────────────────┐ │ 移动应用渗透测试清单 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 静态分析: │ │ □ 反编译应用 │ │ □ 分析 Manifest/Info.plist │ │ □ 检查硬编码密钥 │ │ □ 检查调试代码 │ │ □ 检查权限配置 │ │ │ │ 动态分析: │ │ □ 配置代理捕获流量 │ │ □ Hook 关键函数 │ │ □ 绕过 SSL Pinning │ │ □ 检查本地存储 │ │ □ 检查 Keychain/Keystore │ │ │ │ API 测试: │ │ □ 认证测试 │ │ □ 授权测试 │ │ □ 输入验证测试 │ │ □ 速率限制测试 │ │ □ 加密测试 │ │ │ │ 逆向工程: │ │ □ 代码反编译 │ │ □ 动态调试 │ │ □ 代码修改测试 │ │ □ 重打包测试 │ │ │ └─────────────────────────────────────────────────────────────┘ ``` ### 工具推荐 **Android 工具**: | 工具 | 用途 | 链接 | |------|------|------| | **apktool** | 反编译 | https://ibotpeaches.github.io/Apktool | | **jadx** | 反编译 | GitHub | | **Frida** | 动态 Hook | https://frida.re | | **MobSF** | 自动化扫描 | GitHub | | **QARK** | 静态分析 | GitHub | **iOS 工具**: | 工具 | 用途 | 链接 | |------|------|------| | **Hopper** | 反编译 | https://hopperapp.com | | **Frida** | 动态 Hook | https://frida.re | | **Needle** | 测试框架 | GitHub | | **Keychain-Dumper** | Keychain 提取 | GitHub | | **iMazing** | 设备管理 | https://imazing.com | **通用工具**: | 工具 | 用途 | 链接 | |------|------|------| | **Burp Suite** | 代理/测试 | https://portswigger.net/burp | | **Charles** | 代理 | https://charlesproxy.com | | **Postman** | API 测试 | https://postman.com | | **OWASP ZAP** | 扫描 | https://zaproxy.org | --- ## 总结与思考 ### 核心要点回顾 1. **移动应用测试需要客户端 + API + 服务端** 全面测试 2. **逆向工程是核心技能**,需要掌握反编译和动态调试 3. **本地数据安全** 是移动应用的特殊风险点 4. **API 安全** 与 Web API 测试类似,但需考虑移动特性 5. **防护与检测并重**,既要测试也要建议防护措施 ### 深入思考 **问题 1:移动应用安全与 Web 安全的区别?** 我的观点: - 客户端不可信(用户控制设备) - 网络环境复杂(公共 WiFi) - 数据存储风险(本地存储) - 逆向工程风险(应用可反编译) **问题 2:如何平衡安全与用户体验?** 我建议: - 生物识别替代密码 - 无感知的安全检测 - 合理的安全策略 - 用户教育 **问题 3:移动安全的未来趋势?** 我预测: - 零信任架构 - 端侧 AI 检测 - 隐私计算 - 安全芯片集成 ### 实战建议 **给新手的建议**: ``` 1. 学习基础 - Android/iOS 开发基础 - 移动应用架构 - 常见漏洞类型 2. 搭建环境 - 测试设备/模拟器 - 抓包工具 - 逆向工具 3. 练习实践 - DVGA(漏洞应用) - InsecureBankV2 - OWASP Goat 4. 持续学习 - 关注新漏洞 - 学习新工具 - 参与社区 ``` **给企业的建议**: ``` 1. 安全开发 - 安全编码规范 - 代码审查 - 自动化扫描 2. 防护措施 - 代码混淆 - 完整性校验 - 反调试 3. 定期测试 - 上线前测试 - 定期复测 - 漏洞赏金 4. 应急响应 - 漏洞响应流程 - 热修复能力 - 用户通知 ``` --- ## 参考资料 ### 学习资源 | 资源 | 类型 | 链接 | |------|------|------| | **OWASP MSTG** | 指南 | https://owasp.org/www-project-mobile-security-testing-guide | | **OWASP MASVS** | 标准 | https://owasp.org/www-project-mobile-app-security | | **Android Security** | 文档 | https://developer.android.com/topic/security | | **iOS Security** | 文档 | https://apple.com/business/docs/iOS_Security_Guide.pdf | ### 工具资源 | 工具 | 官网 | 用途 | |------|------|------| | **Frida** | https://frida.re | 动态 Hook | | **MobSF** | GitHub | 自动化扫描 | | **apktool** | GitHub | APK 反编译 | | **jadx** | GitHub | APK 反编译 | | **Burp Suite** | https://portswigger.net/burp | 代理测试 | ### 书籍推荐 | 书名 | 作者 | 难度 | |------|------|------| | 《Android 安全攻防实战》 | various | 入门 | | 《iOS 安全攻防实战》 | various | 入门 | | 《Mobile Application Hacker's Handbook》 | various | 进阶 | | 《Real-World Bug Bounty》 | Peter Yaworski | 实战 | --- *365 天信息安全技术系列 | Day 222 | 移动应用渗透测试 | 字数:约 22,000 字*
myh0st
2026年4月13日 23:19
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码