Mobile WebDev
题目描述
来源:Hacker101 CTF
难度:中等(Moderate)
Flag 数量:2 个
Mobile WebDev 利用了两个关键漏洞:
- APK 中硬编码的 HMAC 密钥→ 获取 Flag 1
- ZIP 目录穿越漏洞(Zip Slip)→ 获取 Flag 2
验证实例:https://b5c5a9fbbd2822e636e2b70765ec180f.ctf.hacker101.com/
第一步:分析 App,收集线索
1. 安装与抓包
# 安装 APKadbinstallwebdev.apk# 设置 Burp Suite 代理,拦截网络请求2. 发现后台接口
通过操作 App(点击 REFRESH 或 EDIT 按钮),抓包发现主要交互路径:
| 路径 | 功能 |
|---|---|
/save.php | 保存编辑内容 |
/edit.php | 编辑页面 |
/content/ | 内容目录 |
3. 找到上传入口
查看/edit.php页面的 HTML 源码,发现关键提示:
<!-- 提示:/upload.php -->这是一个文件上传入口。
Flag 1:计算 HMAC 上传 ZIP
1. 访问上传页面
访问/upload.php,页面提示:
- 只允许上传 ZIP 文件
- 需要提供 HMAC 参数
2. 逆向 APK,提取密钥
使用 JADX-GUI 反编译 APK:
jadx-gui webdev.apk在代码中搜索HmacKey,找到硬编码的十六进制密钥:
// MainActivity.java 中的密钥privatestaticfinalStringHmacKey="8c34bac50d9b096d41cafb53683b315690acf65a11b5f63250c61f7718fa1d1d";3. 编写 Python 脚本计算 HMAC
importhmacimporthashlibimportbinascii# 从 APK 中提取的密钥key=binascii.unhexlify('8c34bac50d9b096d41cafb53683b315690acf65a11b5f63250c61f7718fa1d1d')# 读取 ZIP 文件withopen("test.zip",'rb')asf:data=f.read()# 计算 HMAC-MD5h=hmac.new(key,data,hashlib.md5)print(f"HMAC:{h.hexdigest(