5.4_APP渗透基础

  • APP渗透流程


  • 工具下载链接


# PS: 以下所有操作的工具,所在路径中尽量都不要包含中文

# 工具一:jadx-gui
# 下载链接(下载 jadx-gui-1.5.1-with-jre-win.zip )
https://github.com/skylot/jadx/releases/tag/v1.5.1


# 工具二:Apktool
# 下载链接
https://apktool.org/


# 工具三:keytool
# 下载链接(下载 jadx-gui-1.5.1-with-jre-win.zip )
https://github.com/skylot/jadx/releases/tag/v1.5.1
# jdax-gui 目录下\jre\bin 中自带一个 keytool.exe

  • 客户端


客户端程序安全
描述 && 检测方法防御方式
反编译
  • 描述:APK —> 源代码
  • 检测方法:通过使用反编译工具看能否对APP进行反编译

jadx-gui

# 描述:图形化界面一键获取源码,多用于查看
apktool
# 描述:命令行界面,多用于修改和打包

# 语句
java -jar apktool_2.10.0.jar d apk文件.apk -o 输出文件名
# 举例
java -jar apktool_2.10.0.jar d wns.apk -o wns

APP加密,代码混淆,加壳

重打包/签名
apktool
  • 描述:源代码 —> APK
  • 检测方法:看重打包后的APP是否可以运行,无法运行则具备防二次打包的措施
    # 描述:重打包
    
    # 语句
    java -jar apktool_2.10.0.jar b 输出文件名 -o apk文件名.apk
    # 举例
    java -jar apktool_2.10.0.jar b wns -o wns1.apk
keytool / jarsigner
  • 描述:包名相同的两个APK会被认为是同一应用,当新版本覆盖旧版本时,签名证书必须一致,否则会被拒绝安装
  • 检测方法:通过进行签名对比 或 签名校验
  • # 伪造签名
    # 第一步:生成证书
    # 语句
    keytool -genkey -alias 证书别名 -keyalg 密钥加密算法 -validity 证书有效天数 -keystore 生成的证书路径
    # 举例
    keytool -genkey -alias alias -keyalg RSA -validity 36500 -keystore new.keystore

    # 回车后输入密钥口令,姓氏、单位名称、组织名称等信息
    # 不做特殊用途的话,随便输入就行了(记住密码,签名时用)
    # 最后 Y/y 确认,会在目录下生成证书文件

  • # 第二步:签名
    # 语句
    jarsigner -verbose -keystore 生成的证书路径 -signedjar 签名后apk文件名 未签名apk文件名 证书别名
    # 举例
    jarsigner -verbose -keystore new.keystore -signedjar wns_sign.apk wns.apk alias

    # PS:jarsigner 错误: java.lang.RuntimeException: 密钥库加载: Invalid keystore format
    # 如果你遇到上面这个问题,确认参数如上,不用听网上什么绝对路径,参数错误,工具问题
    # 检查一遍jarsigner路径中是否包含中文,有的话换个路径就行了;

  • # 其他
    # 提取证书
    keytool -printcert -jarfile apk文件名

  • # 其他
    # 签名校验(若看到CN=发布方,则判定为无风险;若CN=Debug证书、第三方(开发方)证书则判定为高风险)
    # 简略
    jarsigner.exe -verify APK文件路径 
    # 详细
    jarsigner.exe -verify APK文件路径 -verbose -certs

验证APP签名,签名对比(获取二次打包后APP的签名与正确的APP签名进行对比)
组件安全
组件防御
行为 / Activity (交互界面)如果组件不需要与其他App共享数据或交互,则将 android:exported 设为 false ;
服务 / Service (后台作业)AndroidMenifest.xml 中将相应组件的 android:exported 属性设为 false
内容提供者 / ContentProvider (共享数据)AndroidManifest.xml 文件的各Provider标签中,设置 android;exported="false"
广播接收者 / Broadcast Receiver (获取广播信息)AndroidManifest.xml 文件的各 Receiver 标签中,设置 android:exported="false"
  • 检测方法:通过反编译查看 AndroidManifest 文件(或直接扫描暴露组件),分析反编译相关的组件代码,查看是否存在漏洞并进行验证;
    • PS:AndroidManifest.xml 文件,是Android 应用的核心配置文件,内容包含APP的基本信息(manifest),组件(application),活动(activity)以及权限(uses-permission);

检测组件是否可以被外部应用调用 

敏感信息安全
威胁描述&&检测方法防御
APP 所在目录文件权限
  • 描述:由于权限配置不当,导致普通用户可以读写APP目录下的 本地存储数据 或 运行日志;
  • 检测方法:ls -al 查看App目录文件权限,查看其他组成员是否允许读写(普通文件后3位为-,目录则可以多一个执行。例: rw-rw---- , rwxrwx--x);

检查APP所在目录,设置其权限不允许其他用户读写;

SQLite 数据库文件的安全性
  • 描述:SQLite 数据库 /data/data/包名/databases 下存在未授权;
  • 检测方法:查看 /data/data/包名/databases 下的数据库文件是否包含敏感信息;
对数据库信息进行加密存储
Logcat 日志
  • 描述:客户端的 Logcat 日志会保存一些敏感信息;
  • 检测方法:尝试使用 adb logcat -v time > 保存路径 命令或 DDMS工具,获取 Logcat 信息
关闭敏感信息调试开关
敏感数据明文存储于Sdcard
  • 描述:为了实现持久化存储,部分Android会将数据存储到外部(/sdcard, /mnt/sdcard),但这可能会导致同一设备的不同app对其进行读取和修改;
  • 检测方法:查看代码是否有保存到外部存储设备;
存储到外部前,对数据进行加密
安全策略
威胁防御方式
密码复杂度不允许设置弱密码,如大小写,字母,数字
认证失败锁定策略连续认证失败5次,则锁定账号
单点登录限制策略同一时间一个账号只能在一个地方登录
会话超时策略设置会话超时时间,例30分钟
界面切换保护当该APP切换到后台时,是否会模糊,清空表单和会话,防止信息泄露,并且返回时是否需要再认证(手势,密码等)
错误提示账号密码输入错误均提示"账号或密码错误"
安全退出退出登录时,服务端及时清除session;
密码修改验证修改密码前进行身份验证;
密码安全
威胁描述&&检测方法

防御方式

键盘劫持
  • 描述:通过特殊的病毒(键盘监听病毒,输入法劫持病毒等) 或 自定义的恶意键盘,记录用户的键盘输入;
  • 检测方法:通过观察输入敏感信息时,是否会使用自定义的恶意键盘;

使用安全的输入法 或 键盘随机化处理

屏幕截屏 / 录像
  • 描述:通过其他恶意进程 或 APP内的恶意功能持续截屏录像发送;
  • 检测方法:通过连接截屏/录像,观察是否可以捕捉到用户输入的密码;

防止连续截图,敏感信息页禁止截图

手势密码
策略防御方式
手势密码修改和取消手势密码修改前需进行认证
手势密码本地信息保存手势密码本地信息加密存储
手势密码锁定策略多次认证失败锁定账号
进程保护
威胁描述
注入
  • 描述:将一段代码或一段完整的可执行程序加载到目标程序中
Hook
  • 描述:通过劫持程序执行流程来改变程序运行行为
其他
Webview漏洞
  • 设置activity不可被导出 明确
  • 禁止WebView 使用 File 协议
界面劫持
  • 描述:通过伪造 Activity 并添加标志位 FLAG_ACTIVITY_NEW_TASK ,使伪造的恶意界面覆盖原界面,实现劫持获取敏感数据;
  • 检测方法:通过检测最前端的 Activity 应用是不是APP本身的或者是系统应用;
  • 防止 activity 被劫持
本地拒绝服务
  • 描述:通过Intent机制发送空数据,异常数据和畸形数据给受害者应用,导致其崩溃;
    • PS:Intent机制:对APP中的动作,动作涉及的数据 和 附加数据进行描述;
    • Android系统则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用;
  • 检测方法:通过 Android 扫描工具进行扫描;
  • 使用 try catch 捕获异常;
  • 将不必要的组件设为不导出;
应用数据可备份
  •  描述:当 AndroidManifest.xml 文件中 allowBackupTure 时用户即可通过 adb backup  和 adb restore 命令来进行对应用数据的备份和恢复,不过这种设置可能会组成一定的风险;
  • 检测方法:通过查看 AndroidManifest.xml 文件中是否有 allowBackup,如果没有则 allowBackup 属性值,默认 allowBackup 值为True,则默认为可以备份应用数据,存在安全风险;如果allowBackup属性值为false,则不可以备份应用数据。
  • 将APP的 AndroidManifest.xml 中的 allowbackup 属性设为 False
debug调试
  • 描述:当 android:debuggable  为 Ture(0xffffffff) 时,表示开启 debug 权限;
  • 检测方法:使用 aapt 工具 :
    Windows:aapt list -v -a apk路径 | findstr debuggable
    Linux:aapt list -v -a apk路径 | grep debuggable
    查看 android:debuggable 是否为 0x0(False)
  • 关闭debug调试功能android:debuggable=false
Janus安卓签名漏洞
  • 描述:攻击者可以绕过安卓系统的signature scheme V1签名机制,进而直接对app进行篡改
  • 检测方法:检测 META-INF 目录下签名文件是否完整;
  • App使用signature scheme V2及以上版本签名机制;
Root环境检测
  • 描述:在mobile 应用启用 certificate pinning 的情况下使用 Rooted 手机+xposed+justtrustme 组件依然可以通过API hook进行中间人攻击。 监控客户端与后台的通信内容
  • 检测方法:检测系统文件权限 和 应用程序权限,是否为root;
  • 应用启动时检测手机环境,确保为非root环境 
  • 检测如xposed Cydia Substratefrida等逆向工具是否运行时,弹窗提醒用户设备已root
模拟器环境检测
  • 描述:攻击者可以用模拟器运行、多开、调试、攻击程序;
  • 检测方法:检测设备型号,硬件信息,操作系统版本等,或调用特定的API检测模拟器环境;
  • 在客户端代码中增加模拟器检测
代理环境检测
  • 描述:攻击者通过设置代理的方式,抓取客户端与服务器之间的数据包
  • 检测方法:检测系统,网络连接设置和HTTP请求头信息,查看是否配置了代理服务器
  • 客户端存在代理时停止通络通信,并提醒用户关闭代理

  • 数据传输


威胁描述防御方式
数据窃听
  • APP与服务端通信过程中,未对数据进行加密性保护;
    • 例如:很多APP与服务端在不安全的传输通道中直接使用HTTP协议通信;
  • 检测方法:Burp抓包,查看通信信息是否加密,并且如果抓包是APP自动退出,则描述APP有做证书校验;
  • 使用HTTPS等加密协议进行通信,确保数据传输的安全性
数据篡改
  • 描述:APP与服务端通信过程中,未对数据进行完整性保护;
  • 使用数字签名或哈希验证来确保数据的完整性
数据重放
  • 描述:APP与服务端通信过程中,未对数据进行一次性令牌保护;
  • 实施时间戳或一次性令牌机制,防止数据被截获后重放
证书绑定
  • 描述:攻击者通过替换证书解密客户端与服务端之间的数据
  • 客户端应对服务端证书进行强验证

  • 服务端


威胁描述
不安全的中间件
认证与会话管理
威胁防御方式
短信/邮箱轰炸
  • 限制发送频率,对频繁发起请求的IP进行封禁;
用户枚举
  • 设置统一的错误信息 和 信息验证,如验证码等;
暴力破解
  • 设置严格的 密码策略 和 信息验证,如验证码等;
验证码
策略防御
验证码取消回显验证码前端回显漏洞
验证码有效次数,例1次验证码复用漏洞
验证码绑定用户信息验证码未绑定漏洞
验证码链接隐藏(防止爆破)验证码爆破漏洞
验证码有效期,例3分钟验证码超时可用漏洞
设置验证码空验证码绕过漏洞

漏洞参考文章:3.6_逻辑漏洞-CSDN博客

访问控制
威胁测试方法
水平越权

原理:程序在对数据进行操作时,未能正确验证用户的身份信息;

  • 修改个人资料时,抓取数据包寻找特定参数,修改特定参数即可查看或修改其他用户信息,则存在平行越权;

(可能需要看页面源码,并自己添加特定的参数)

垂直越权

原理:程序在对数据进行操作时,未能正确验证用户的权限级别;

  • 登录管理员账户和普通用户,先获得普通用户的Cookie;
  • 再访问管理员修改用户的功能点抓包,将数据包中的Cookie替换为普通用户的Cookie,如果操作成功则存在垂直越权:
  • 或是修改其他参数可以获取只有管理员能够访问的数据;
注入
参考链接
SQL注入1.4_SQL注入-CSDN博客
XSS注入2.2_XSS跨站脚本攻击-CSDN博客
命令注入,代码注入(RCE)3.4_RCE漏洞_rce漏洞常见命令符-CSDN博客
XML注入(XXE)2.5_XXE(XML外部实体注入)-CSDN博客
JNDI注入(Log4j2,Fastjson)

Log4j2:3.4_RCE漏洞_rce漏洞常见命令符-CSDN博客

Fastjson:3.5_反序列化漏洞_对fastjson,shiro,nacos,weblogic,jboss,以及各种oa的nday熟悉-CSDN博客

......
应用层拒绝服务攻击
  • 描述:通过并发大量的请求,造成系统资源耗尽,导致服务器拒绝服务;
密码算法和密钥管理
  • 描述:采用弱加密算法导致信息泄露(如MD5DES算法)
  • 检测方法:反编译后查看源码,查找敏感数据和敏感函数加密代码是否使用弱加密
  • 防御方式
    • 使用对称加密算法时避免使用DES算法,可以选择3DES 
    • IvParameterSpec初始化时,不使用常量vector 
    • 使用 RSA 算法加密时,指定Padding模式,建议密钥长度>1024 bit

  • APP抓包配置


# 抓模拟器的包
# 步骤(文字版)
打开模拟器 ——> 下拉并点击设置 ——> 点击WLAN ——> 长按 wiredSSID,点击修改网络 
——> 依次点击高级选项,代理,设置为手动 ——> 对主机名和端口进行修改(与Burp设置的IP和端口一致) 
——> 模拟器的浏览器访问 http://burp/ ,点击 CA certxxx (后缀为der) ——> 点击模拟器工具栏中下载 
——> 长按修改下载der文件后缀为cer ——> 模拟器回到桌面设置找到安全 ——> 点击从SD卡安装  
——> 安装,修改名称,确定 ——> 打开app,使用Burp抓包;

# PS:使用的是夜神模拟器,下载链接:https://www.yeshen.com/
  1. 打开模拟器下拉并点击设置

  2. 点击WLAN

  3. 长按 wiredSSID ,点击修改网络

  4. 依次点击高级选项,代理,设置为手动

  5. 对主机名和端口进行修改 (与Burp设置的IP和端口一致)

  6. 模拟器的浏览器访问 http://burp/   , 点击 CA certxxx  (下载后缀为der的证书 ),

  7. 返回桌面,找到下载的 cacert.der ,

  8. 将后缀改为cer

  9. 模拟器回到桌面设置找到安全

  10. 点击从SD卡安装

  11. 点击,安装

  12. 名称任意,确定,安装成功

  13. 打开app,使用Burp抓包

  • APP漏洞扫描器:Yaazhini && ApplicationScanner(kali)


漏洞扫描器描述
Yaazhini
# 作用:Android APK 和 API 漏洞扫描器

# 下载链接:https://www.vegabird.com/yaazhini/
# 下载后会要求你填入邮箱获取免费版
# 电脑端打开邮箱内的链接,会显示 Window OS.exe 和 Mac.dmg 俩个版本
# 根据自己需求选即可

# 使用方式:双击运行,填入参数,等待结果

ApplicationScanner(kali)
# 作用:apk扫描器(不支持Windows)

# 下载链接:https://github.com/paradiseduo/ApplicationScanner

# 参数说明:
-i 指定apk文件  -s 保存.cache文件(默认删除)  
-l 选择语言zh,en(默认zh中文)     -f 指定字串文件(会特别关注)

# -f 举例:python AppScanner.py -i 5555.apk -f checklist
# checklist文件内容:
    dlsym
    dlopen
    respondsToSelector
    performSelector
    method_exchangeImplementations
    支付宝
    微信
    

# 使用
pip3 install -r requirement.txt
python AppScanner.py -i apk路径

# 常用语句
python AppScanner.py -i apk路径

# 举例
python AppScanner.py -i 5555.apk

APP安全服务平台:腾讯御安全,阿里聚安全,360显危镜,梆梆,娜迦,爱加密等;

  • 参考推荐文章


  1. 移动APP安全测试:移动APP安全测试 - AAA五金批发王建军 - 博客园
  2. 安卓APP客户端渗透测试指南:https://jenchoi.top/2023/android-app-client-pentest-guide/#WebView组件远程代码执行
  3. App安全测试—Android安全测试规范:App安全测试—Android安全测试规范-腾讯云开发者社区-腾讯云
  4. APP渗透测试漏洞实战教程:爱住了 | APP渗透测试漏洞实战教程-CSDN博客
  5. 渗透测试之App安全测试详解:渗透测试之App安全测试详解_app渗透测试-CSDN博客
  6. Android APP常见漏洞和挖掘技巧 PART1:Android APP常见漏洞和挖掘技巧 PART1 | Clang裁缝店
  7. Android APP常见漏洞和挖掘技巧 PART2:Android APP常见漏洞和挖掘技巧 PART2 | Clang裁缝店

  • 免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值