从PHP eval()到shell通配符:RCE-labs靶场通关后,我总结了这份Web安全实战笔记

张开发
2026/5/19 6:27:39 15 分钟阅读
从PHP eval()到shell通配符:RCE-labs靶场通关后,我总结了这份Web安全实战笔记
从PHP eval()到shell通配符RCE-labs靶场通关后我总结了这份Web安全实战笔记在完成RCE-labs靶场的通关挑战后我意识到将这些零散的知识点系统化整理的重要性。这份笔记不仅是对Level1-5关卡的技术复盘更是对远程代码执行RCE攻击链的深度剖析。通过靶场实战我们可以清晰地看到从PHP代码注入到系统命令执行的完整路径以及各种精妙的绕过技巧。1. PHP代码执行eval()与assert()的攻防艺术在Level1和Level2中我们直面PHP中最危险的两个函数eval()和assert()。这两个函数都能直接执行字符串形式的PHP代码但它们的应用场景和绕过方式各有特点。eval()的核心特征直接执行传入的字符串作为PHP代码常用于动态代码生成场景典型payloadeval(system(whoami);)assert()的隐蔽性利用// 传统用法测试断言 assert(2 1); // 危险用法代码执行 assert(system(whoami));在靶场实践中我发现几个关键点当直接使用echo $flag被过滤时可尝试print_r($flag)使用${phpinfo()}这类可变函数语法通过call_user_func(system, whoami)间接调用注意现代PHP版本中assert()默认不再执行字符串参数需要特别注意环境差异2. 系统命令执行的三种武器库Level3展示了最直接的系统命令执行方式。当开发者不慎使用system()、exec()等函数处理用户输入时就会打开潘多拉魔盒。常见危险函数对比函数名称返回值输出方式管道支持system()命令最后一行直接输出是exec()最后一行需指定变量部分shell_exec()全部输出需指定变量是passthru()无直接输出是实战中常用的测试payload# 基础探测 whoami id uname -a # 文件系统探查 ls -la / find / -name flag* 2/dev/null3. Shell运算符的魔法从Level4看命令拼接技巧Level4展示了如何利用Shell运算符突破限制。当直接命令执行被拦截时这些运算符往往能打开新天地。四大运算符的妙用串联执行;cd /tmp; cat /flag无论前命令是否成功都会执行后续命令逻辑与ping -c 1 127.0.0.1 cat /flag只有前命令成功才会执行后续命令逻辑或||ping invalid || cat /flag前命令失败才会执行后续命令后台执行sleep 10 cat /flag前命令放入后台立即执行后续命令在靶场中?ip127.0.0.1||cat/flag这个payload完美诠释了||运算符的绕过价值。当ping命令因参数合法而执行失败时正好触发flag读取操作。4. 通配符与空字符Level5的高级绕过艺术Level5将我们带入Shell特性的深水区。当关键路径被过滤时通配符和空字符处理机制往往能创造奇迹。通配符的三板斧星号(*)匹配cat /fl*匹配任意长度字符问号(?)匹配cat /fl?g匹配单个字符字符集匹配cat /fl[a-z]g匹配指定范围内的字符空字符的妙用cat /flag /bin/cat /flag这些技巧之所以有效是因为Shell会自动忽略引号内的空字符串保持引号外字符的连贯性最终拼接成可执行的合法命令在靶场实践中?cmd/???/?at /fl*这个payload堪称经典/???/匹配/bin/目录?at匹配cat命令/fl*匹配所有以fl开头的文件5. 防御视角从攻击手法看安全加固经历了这些关卡后作为开发者应该建立哪些防御意识我总结了几个关键点输入过滤的黄金法则白名单优于黑名单严格限制特殊字符; | * ?等对文件路径进行规范化处理PHP安全配置建议// 禁用危险函数 disable_functions exec,passthru,shell_exec,system,proc_open,popen // 限制文件操作 open_basedir /var/www/html:/tmp系统层防护使用chroot隔离Web环境配置适当的文件权限如flag文件600权限定期更新系统和Web组件在靶场通关过程中我最大的收获不是掌握了多少攻击技巧而是真正理解了防御者思维。每个漏洞利用手法的背后都对应着开发过程中的某个疏忽点。只有双向理解攻击和防御才能构建真正安全的Web应用。

更多文章