网络安全中级阶段学习笔记(十一):服务器解析漏洞全解析(原理、利用与防御)

本文所有知识点仅用于网络安全防御技术学习 ,测试手段仅可在合法授权的测试环境 中使用。如需复现漏洞,可使用 phpStudy 搭建本地靶机测试环境,模拟不同服务器版本进行验证。未经授权侵入他人系统、窃取信息属违法行为,将承担相应法律责任。网络安全的核心是 "攻防兼备",掌握攻击手段的同时,更要牢记防护使命,共同维护网络空间安全。

目录

一、解析漏洞核心概念

二、主流服务器解析漏洞详解

[(一)Apache 解析漏洞](#(一)Apache 解析漏洞)

[1. 核心特性](#1. 核心特性)

[2. 典型利用场景](#2. 典型利用场景)

[3. 补充知识点](#3. 补充知识点)

[(二)IIS 解析漏洞](#(二)IIS 解析漏洞)

[1. IIS 6.0 漏洞(经典高风险)](#1. IIS 6.0 漏洞(经典高风险))

[2. IIS 7.x 漏洞(Fast-CGI 模式)](#2. IIS 7.x 漏洞(Fast-CGI 模式))

[(三)Nginx 解析漏洞](#(三)Nginx 解析漏洞)

[1. 核心漏洞类型](#1. 核心漏洞类型)

[2. 利用条件](#2. 利用条件)

三、漏洞利用常见绕过方式

四、漏洞修复方案(实战可直接落地)

[1. 通用防御措施](#1. 通用防御措施)

[2. 服务器专属修复](#2. 服务器专属修复)

[3. PHP 配置优化](#3. PHP 配置优化)

五、实战案例总结

六、关键注意事项


一、解析漏洞核心概念

解析漏洞是指 Apache、IIS、Nginx 等主流 Web 服务器,在特定条件下将非脚本格式文件 (如图片、文本文件)错误解释为可执行脚本文件(如 PHP、ASP)并执行,从而被攻击者利用的安全漏洞,核心危害是攻击者可通过上传恶意文件获取服务器控制权。

二、主流服务器解析漏洞详解

(一)Apache 解析漏洞

1. 核心特性

解析规则:从右到左识别文件后缀,未识别后缀则向左递归判断(如1.php.jhh1会被解析为 PHP 文件)。

关键漏洞:CVE-2017-15715(影响 2.4.0~2.4.29 版本),因正则$可匹配\n\r1.php\x0A会被当作 PHP 文件解析。

2. 典型利用场景

配置AddHandler application/x-httpd-php .php后,任何含.php后缀的文件都会被解析。

上传test.php.(后缀加点),抓包修改为test.php%0A(换行符),直接访问即可执行。

3. 补充知识点

Apache 默认依赖mime.types文件识别后缀,自定义AddType指令可能扩大解析范围(如AddType application/x-httpd-php .jpg会让 JPG 文件以 PHP 执行)。

(二)IIS 解析漏洞

1. IIS 6.0 漏洞(经典高风险)

(1) 文件名截断:*.asp;.jpg格式文件会忽略;后内容,按 ASP 解析(如shell.asp;.jpg)。

核心意思:IIS 6.0 服务器遇到shell.asp;.jpg这类文件名时,会自动忽略分号(;)及后面的所有内容 ,只把前面的shell.asp当作有效文件名,最终按 ASP 脚本执行这个文件(哪怕实际是 JPG 后缀)。

简单类比:就像你给文件起名 "笔记.txt;.pdf",电脑却只认 "笔记.txt" 并按文本文件打开,完全不管后面的.pdf 后缀 ------ 这里 IIS 6.0 就是 "认.asp 不认后面的内容",让恶意文件披着 JPG 的 "外衣" 执行 ASP 恶意代码。

(2) 文件夹欺骗:*.asp/目录下所有文件均按 ASP 解析,新建1.asp文件夹后,其中shl.jpg会被当作 ASP 执行。

核心意思:IIS 6.0 服务器会把名称带*.asp/的文件夹,当成 "ASP 脚本执行目录"------ 哪怕文件夹里是 JPG、TXT 这类普通文件,都会被强制按 ASP 脚本解析执行。

简单类比:就像给文件夹贴了 "ASP 专属" 标签,不管里面装的是照片(JPG)还是笔记(TXT),服务器都只认 "标签",不认文件本身,一律按 ASP 脚本运行。

(3) 特殊后缀支持:默认解析.asa、.cer、.cdx后缀文件为 ASP 脚本。

核心意思:IIS 6.0 服务器有个默认规则 ------不用额外配置,就会把后缀是.asa.cer.cdx的文件,直接当作 ASP 脚本解析执行,哪怕文件内容是恶意代码也会运行。

简单类比:这就像系统默认把标了 "ASP 专属" 标签的文件直接放行,哪怕这些文件看起来不是常见的.asp后缀,服务器也会按 ASP 脚本执行,相当于给攻击者多了几个 "伪装通道"。

2. IIS 7.x 漏洞(Fast-CGI 模式)

解析规则:文件后加/.php即可触发(如1.jpg/.php会将 JPG 解析为 PHP)。

核心意思:IIS 7.x 在 Fast-CGI 模式下,给任意文件(比如图片、文本)的 URL 后面加 /.php,服务器就会把这个文件当成 PHP 脚本执行 ------ 比如 1.jpg 本身是图片,访问 1.jpg/.php 时,IIS 会让 PHP 解析器去执行这张 "图片"。

简单类比:就像给普通文件贴了个 "PHP 脚本" 的标签,服务器只看标签(URL 里的 /.php),不管文件本身是什么类型,直接按标签对应的规则执行。

漏洞根源:默认开启cgi.fix_pathinfo=1,PHP 会自动寻找路径中存在的文件并执行。

(三)Nginx 解析漏洞

1. 核心漏洞类型

(1) 路径欺骗漏洞:1.jpg/xxx.php形式 URL,Nginx 传递路径给 PHP 后,因xxx.php不存在,PHP 会以1.jpg作为执行文件。

核心意思:Nginx 服务器遇到 1.jpg/xxx.php 这种 URL 时,会因为 URL 以 .php 结尾,把整个路径传给 PHP 解析;但服务器上根本没有 xxx.php 文件,PHP 就会 "退而求其次",找到路径中真实存在的 1.jpg,并把它当作 PHP 脚本执行。

简单类比:就像你要找 "张三 / 李四",发现李四不存在,就直接让张三来替李四办事 ------ 这里的 "张三" 就是 1.jpg,"李四" 是 xxx.php,服务器最终让图片文件执行了 PHP 的 "活"。

(2) 空字节漏洞(影响 0.5.、0.6. 、0.7<=0.7.65、0.8<=0.8.37 版本):shell.jpg%00.php(%00为空字节)会被解析为 PHP,不受cgi.fix_pathinfo配置影响。

核心意思:低版本 Nginx(0.5.、0.6. 、0.7<=0.7.65、0.8<=0.8.37)遇到 shell.jpg%00.php 这类 URL 时,会把 %00(空字节)当作 "字符串结束符",直接忽略后面的 .php,将 shell.jpg 当作 PHP 文件解析执行 ------ 而且这个漏洞和 cgi.fix_pathinfo 配置无关,哪怕设为 0 也会触发。

简单类比:就像给文件名字符串 "画了终止线",%00 前面的内容(shell.jpg)被服务器当作完整文件名,后面的 .php 直接 "作废",但因为 URL 里有 .php 结尾,服务器还是按 PHP 脚本执行前面的文件。

2. 利用条件

服务器开启 PHP-FastCGI 模式,且未限制上传目录脚本执行权限。

三、漏洞利用常见绕过方式

检测类型 绕过手段分类 具体绕过方式 适用场景
前端 JS 检测 抓包修改 1. 前端限制后缀(如禁止.php),上传合法文件后用 Burp 抓包改名为恶意后缀(如 test.php) 仅前端 JS 校验,无后端二次检测
前端 JS 检测 本地 JS 篡改 2. 浏览器控制台禁用前端 JS,直接上传恶意文件 前端 JS 逻辑简单可绕
服务器 MIME 检测 Content-Type 篡改 1. 上传图片时,抓包将Content-Type: image/jpeg改为application/x-httpd-php 仅校验请求头 MIME,不校验文件内容
黑名单检测 后缀变形 1. 大小写绕过Test.PHP/tEsT.pHp(适用于 Windows IIS、Apache 低版本) 服务器仅禁止小写恶意后缀,不区分大小写
黑名单检测 后缀变形 2. 双写绕过test.pphphp(服务器过滤一次.php 后剩余 test.php) 服务器仅简单替换恶意后缀(如把.php 替换为空)
黑名单检测 后缀变形 3. 特殊后缀绕过:test.php./test.php_(后缀加空格 / 点 / 下划线,部分服务器自动截断) 服务器未过滤带特殊符号的后缀
黑名单检测 后缀变形 4. 多后缀绕过:test.php.jpg(Apache 从右向左识别,结合解析漏洞执行) 服务器仅检测最后一个后缀,未防御解析漏洞
黑名单检测 特殊符号截断 5. 0x00 截断:test.jpg%00.php(低版本服务器截断 %00 后内容) PHP<5.3.4、IIS 6.0 等老旧环境
黑名单检测 特殊符号截断 6. 分号截断:test.asp;.jpg(IIS 6.0 忽略;后内容) 仅适用于 IIS 6.0
黑名单检测 配置文件攻击 7. .htaccess攻击:上传.htaccess 文件,内容写AddType application/x-httpd-php .jpg(Apache 将 jpg 解析为 PHP) Apache 服务器允许上传.htaccess,且未限制其权限
黑名单检测 操作系统特性 8. 文件名含特殊字符:test.php (末尾加空格,Windows 自动去除)/test.php:(Windows 不允许的符号,服务器自动截断) Windows 服务器未过滤文件名特殊字符
白名单检测 解析漏洞结合 1. 路径欺骗:test.jpg/.php(IIS 7.x/Nginx,结合 cgi.fix_pathinfo=1) 白名单仅允许图片后缀,服务器开 Fast-CGI 模式
白名单检测 解析漏洞结合 2. 文件夹欺骗:test.asp/目录下传 test.jpg(IIS 6.0 解析为 ASP) 白名单仅允许图片后缀,适用于 IIS 6.0
白名单检测 解析漏洞结合 3. 特殊后缀解析:test.cer/test.asa(IIS 默认解析为 ASP) 白名单允许.cer/.asa 等 IIS 默认解析后缀
白名单检测 本地文件包含(LFI)结合 4. 上传 test.jpg(含 PHP 代码),通过 LFI 漏洞包含执行 服务器存在 LFI,且上传路径可访问
文件内容检测 文件头伪装 1. 恶意代码前加图片头(如 JPG 头FF D8 FF E0),保存为 test.jpg 仅校验文件头,不校验完整内容
文件内容检测 代码注入 2. 图片中嵌入 PHP 代码(如<?php eval($_POST['cmd']);?>),结合解析漏洞执行 仅校验文件格式,未检测内容中的恶意代码
文件内容检测 二次渲染绕过 3. 利用图片二次渲染漏洞(如压缩时保留代码),嵌入代码到图片可保留区域 服务器对图片二次渲染,但逻辑有缺陷
其他检测 协议绕过 1. 远程文件包含(RFI):上传文件到远程服务器,通过 RFI 包含执行 服务器允许 RFI,且上传文件可公网访问
其他检测 分块上传 2. 分块上传恶意文件,绕过单文件大小 / 内容检测 服务器对单文件检测严格,未限制分块上传
其他检测 符号绕过 3. 反斜杠绕过:test.php\(Windows 服务器自动去除反斜杠)

四、漏洞修复方案

1. 通用防御措施

禁用文件上传目录脚本执行权限(Apache/Nginx/IIS 均需配置)。

实现 "库站分离":上传文件存储在独立服务器或云存储,不与 Web 服务同服务器。

严格校验文件:前端 + 后端双重校验,检查文件后缀、内容(如图片文件校验文件头)。

2. 服务器专属修复

Apache:升级至 2.4.30 + 版本;禁用不必要的AddHandler/AddType指令;正则匹配文件后缀时加\z替代$(精准匹配字符串结尾)。IIS 6.0:限制.asp.asa等后缀的文件上传;禁用危险文件夹命名规则;升级至更高版本。

IIS 7.x:修改php.inicgi.fix_pathinfo=0,重启 PHP-CGI 服务;配置 IIS 禁止 URL 中包含/.php后缀的访问。

Nginx:升级至安全版本;配置security.limit_extensions = .php(仅允许 PHP 后缀执行);禁止上传目录的execute权限。

3. PHP 配置优化

关闭cgi.fix_pathinfo(设为 0),避免路径自动补全。

限制open_basedir,防止 PHP 访问非授权目录。

五、实战案例总结

  1. IIS 6.0 案例 :上传asp大马.asp;.jpg,利用;截断特性,成功执行 ASP 脚本获取服务器权限。
  2. IIS 7.5 案例 :上传1.png恶意图片马,通过20200318110451.png/.php访问执行,获取虚拟终端。
  3. Nginx 案例 :论坛上传图片马baidu.jpg,通过baidu.jpg/index.php访问,利用解析漏洞连接菜刀工具,窃取数据库信息。

六、关键注意事项

  1. 解析漏洞常与文件上传漏洞结合利用,防御需 "上传校验 + 解析限制" 双重保障。
  2. 老旧服务器(如 IIS 6.0、Apache 2.4.29 以下)是漏洞高发区,优先升级版本。
  3. 云服务器需额外配置安全组,限制上传目录的外部访问权限。

提示:实际测试需获得合法授权,禁止未授权渗透测试!如需复现漏洞,可使用 phpStudy 搭建本地靶机测试环境,模拟不同服务器版本进行验证。

相关推荐
默|笙2 小时前
【Linux】进程(6)虚拟地址空间
linux·运维·服务器
linzihahaha2 小时前
vmware-ubuntu 虚拟机共享文件及复制拖动配置
linux·运维·ubuntu
重生之我在番茄自学网安拯救世界2 小时前
网络安全中级阶段学习笔记(十二):PHP 文件包含漏洞全解析(原理 + 利用 + 防御 )
笔记·学习·web安全·文件包含漏洞·网安基础
HIT_Weston2 小时前
70、【Ubuntu】【Hugo】搭建私人博客:新建站点
linux·运维·ubuntu
·云扬·2 小时前
MySQL服务器性能优化:硬件与存储配置全指南
服务器·mysql·性能优化
麦麦Max2 小时前
Docker
运维·docker·容器
Danileaf_Guo2 小时前
让Ubuntu服务器变身OSPF路由器!实现服务器与网络设备直接对话
linux·运维·服务器·ubuntu
HalvmånEver2 小时前
Linux:库制作与原理(三)
linux·运维·服务器
管理大亨2 小时前
Linux服务器性能优化全攻略
linux·服务器·性能优化