MASTG-Hacking-Playground 渗透测试:用 Frida 动态 hook 危险方法与 JS 接口的入门指南
【免费下载链接】MASTG-Hacking-Playground项目地址: https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground
MASTG-Hacking-Playground是面向移动安全初学者的漏洞演练场,它把 OWASP MASVS 中大量经典漏洞做成了可以运行的 Android(Kotlin + Java)与 iOS 示例应用。对于想入门Android 渗透测试的新手来说,这个项目最吸引人的地方在于:你能在一个真实可运行的 App 里,亲手体验 WebView 漏洞、不安全的 JS 接口、弱加密、SharedPreferences 明文存储等问题。本文将以Frida 动态 hook为主线,带你一步步 hook 掉应用中的危险方法与 JS 接口,完成一次完整的渗透测试实战,零基础也能跟上。
什么是 MASTG-Hacking-Playground?为什么适合渗透测试入门?
简单来说,它就是一个"故意写坏"的应用合集。项目内同时提供了 Java 与 Kotlin 两套实现,方便对照学习。在Android/目录下你可以看到:
MSTG-Android-Java-App:老牌 Java 版本,包含大量 OWASP 漏洞示例MASTG-Android-Kotlin-App:Kotlin 版本,更贴近现代开发风格
每个漏洞示例都以OMTG_开头命名,并严格对应 OWASP MASVS 的测试类别,例如:
| 漏洞类别 | 示例类名 | 说明 |
|---|---|---|
| 代码注入 | OMTG_CODING_004_Code_Injection | 动态加载外部 dex/jar |
| WebView 漏洞 | OMTG_ENV_005_WebView_* | 不安全的 WebView 加载 |
| 不安全存储 | OMTG_DATAST_001_* | 明文存储、弱加密等 |
| 网络通信 | OMTG_NETW_004_SSL_Pinning | SSL 固定绕过练习 |
获取项目的方式很简单,克隆仓库即可:
git clone https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground渗透测试前必看:WebView 与 JS 接口为何危险?
在做 Frida hook 之前,先搞清楚我们要攻击的目标长什么样。在unsafe_content.html(位于app/src/main/assets/)中,网页脚本可以直接调用原生方法:
var result = window.Android.returnString(); document.getElementById("output").innerHTML = result;而对应的原生接口定义在owasp/mastgkotlin/util/JS_Interface.kt:
@JavascriptInterface fun returnString(): String { return "<strong>This is a Secret String only obtainable via JavaScript</strong>" }更危险的是 Java 版本中的local.htm,它通过 JS 接口直接反射执行系统命令:
function execute(cmd){ return window.jsinterface.getClass().forName('java.lang.Runtime') .getMethod('getRuntime',null).invoke(null,null).exec(cmd); }只要 JS 接口被恶意网页利用,攻击者就能读写文件、执行命令,这也就是渗透测试中必须重点 hook 的目标。
Frida 动态 hook 入门:环境准备三步走
Frida 是目前移动端渗透测试最主流的动态插桩工具,它允许你在应用运行时注入 JavaScript 代码、拦截函数调用。准备环境只需三步:
- 安装 Frida 工具(在 PC 上执行):
pip install frida-tools - 安装 frida-server:从官网下载与 PC 端版本一致的 frida-server,推送到手机并运行
- 验证连接:执行
frida-ps -U能列出手机进程即表示成功
💡 模拟器或已 root 的真机是最佳实验环境,MASTG-Hacking-Playground 的 APK 已编译好,直接安装即可开始。
核心实战一:用 Frida hook 危险方法
安装并启动 App 后,我们先找到目标进程。Kotlin 应用的包名是owasp.mastgkotlin,Java 应用是sg.vp.owasp_mobile。用frida-ps -U | grep owasp即可定位。
第 1 步:hook 不安全的 WebView 配置
应用在InsecureWebViewActivity.kt中开启了javaScriptEnabled = true,还调用了addJavascriptInterface。我们可以 hook 这些方法观察调用轨迹:
Java.perform(function () { var WebSettings = Java.use("android.webkit.WebSettings"); WebSettings.setJavaScriptEnabled.implementation = function (flag) { console.log("[*] setJavaScriptEnabled(" + flag + ") 被调用"); return this.setJavaScriptEnabled(flag); }; var WebView = Java.use("android.webkit.WebView"); WebView.addJavascriptInterface.overload( 'java.lang.Object', 'java.lang.String' ).implementation = function (obj, name) { console.log("[*] addJavascriptInterface 注入名: " + name); return this.addJavascriptInterface(obj, name); }; });运行方式:frida -U -l hook_webview.js owasp.mastgkotlin,然后进入 App 的 WebView 页面,终端就会实时打印出调用记录。✅
第 2 步:hook JS 接口返回的敏感字符串
接下来是重头戏:拦截JS_Interface的returnString(),看看它到底返回了什么,并尝试篡改返回值:
Java.perform(function () { var JSInterface = Java.use("owasp.mastgkotlin.util.JS_Interface"); JSInterface.returnString.implementation = function () { console.log("[*] returnString() 被调用"); var result = this.returnString(); console.log("[*] 原始返回值: " + result); return "Hooked by Frida: 敏感信息已拦截!"; }; });刷新 WebView 页面,你会看到网页中原本显示的 "Secret String" 变成了我们注入的内容——这就是动态 hook 篡改业务逻辑的完整演示。🛑
第 3 步:hook root 检测方法绕过
Java 版菜单中提供了不安全的 root 检测(insecureCheckRootMethod只检查/system/bin/su)。用 Frida 直接让它"失效":
Java.perform(function () { var Menu = Java.use("owasp.mastgkotlin.MenuActivity"); Menu.insecureCheckRootMethod.implementation = function () { console.log("[*] root 检测被绕过"); return false; }; });核心实战二:利用 JS 接口实现远程命令执行
理解 Frida 之后,我们再回到漏洞本身。在 Java 应用里,OMTG_ENV_005_WebView_Remote.java把 JS 接口以"Android"为名注入到 WebView,再加载远程URL。一旦远程页面被控制,攻击者就能通过window.Android调用原生方法。
完整的攻击链是:
- 恶意网页注入
window.Android.returnString() - 接口方法无权限校验,直接暴露给 JS
- 结合
allowFileAccessFromFileURLs等配置,可进一步扩大攻击面
用 Frida hookaddJavascriptInterface,我们可以快速确认应用中所有被注入的 JS 接口及其名称,这是渗透测试中审计 WebView 组件的标准手法。配合OMTG_ENV_005_WebView_Local.java中通过反射执行Runtime.exec的示例,你就能理解为什么安全规范一再强调:不要把原生能力暴露给不可信的网页内容。
安全加固建议:如何修复这类漏洞?
作为渗透测试新手,除了会攻击,还要会提修复建议。对照 SecureWebViewActivity 的安全实现,修复思路如下:
- 关闭不必要的 JavaScript:
setJavaScriptEnabled(false)是默认最佳实践 - 严格过滤 JS 接口:只暴露最小必要方法,且必须校验调用来源
- 不要使用
addJavascriptInterface暴露敏感数据:如 JS_Interface.kt 中返回 Secret String 的做法应避免 - 限制 file 协议访问:不要开启
allowFileAccessFromFileURLs - 优先 HTTPS 并做证书固定:参考
OMTG_NETW_004_SSL_Pinning的示例
总结:从 Frida hook 入门到持续精进
通过本文,你已经完成了 MASTG-Hacking-Playground 上的第一次 Frida 实战:hook 了危险方法、篡改了 JS 接口返回值、绕过了 root 检测,并理解了 WebView 漏洞的成因与修复方向。🎉
后续你可以沿着Android/MSTG-Android-Java-App/app/src/main/java/sg/vp/owasp_mobile/OMTG_Android/目录逐个练习其余漏洞,例如用 Frida 解密 OMTG_DATAST_001_BadEncryption.java 的弱加密数据、绕过 SSL Pinning 等。记住:渗透测试的目的不是破坏,而是理解攻击路径、推动安全修复。多动手、多对照 OWASP MASVS,你很快就能从"照着脚本跑"进阶到"自己写 hook 脚本"。
【免费下载链接】MASTG-Hacking-Playground项目地址: https://gitcode.com/gh_mirrors/ma/MASTG-Hacking-Playground
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考