文件解析漏洞


一、文件解析漏洞简介

文件解析漏洞是Web安全领域中的一种常见漏洞,主要发生在应用程序解析文件时,未能正确处理文件内容或格式,从而导致安全问题。这种漏洞可能被攻击者利用,通过上传或处理恶意构造的文件,来执行未授权的操作,例如远程代码执行、信息泄露、拒绝服务攻击等。

文件解析漏洞可以为文件上传漏洞提供漏洞利用的可能,两者关系紧密,相辅相成。结合文件上传漏洞,上传的是一张图片木马的话,利用解析漏洞可以使服务器将png等图片文件当作php等脚本文件执行。

二、.htaccess攻击(.htaccess 文件解析)

2.1 .htaccess配置简介

如果网站允许.htaccess配置覆盖全局配置文件,并且.htaccess文件用户可以上传或编辑修改,那么网站存在巨大的安全漏洞,导致任意文件解析,网站沦陷。

.htaccess是Apache服务器的分布式配置文件,该配置文件会覆盖Apache服务器的全局配置,作用域是当前目录及其子目录。

如果一个Web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apache的配置,这是十分危险的。. htaccess 攻击想象空间非常大。

首先看Apache的配置,允许.htaccess文件覆盖掉Apache的配置。

EX:Apache 允许.htaccess 文件覆盖掉Apache的配置

httpd.conf

AllowOverride All

如何利用.htaccess 攻击:

2.2 将.png文件当作PHP文件解析

将以下代码写入文件,并保存成.htaccess名字, 放到测试目录下

AddType application/x-httpd-php .png

在同一目录下创建一个文件[info.png],文件内容如下

<?php
	 phpinfo();
?>

当我们访问该文件时,[ info.png]内的PHP代码将会被执行。

EX:利用.htaccess文件使得.png文件可以被解析执行

1、准备.htaccess文件,win系统没法创建。

mac 创建,并上传到相应目录。mac上创建的话会隐藏起来。可以在BP抓包的时候再修改文件名。

mac 如何显示隐藏文件和.点开头文件?

如果想在Finder中就能直观看到隐藏文件,那么在终端中输入以下下命令:

defaults write com.apple.Finder AppleShowAllFiles YES
killall Finder

win 用notepad++穿件新文件,保存的时候选择*.*格式即可创建.htaccess文件。

2、准备后缀名为.png的php脚本。

3、访问解析执行。

注释掉.htaccess中的配置,.png不可解析执行。

利用思路: 利用文件上传漏洞上传.htaccess文件,其中配置相关条目使得jpg,png等文件可以被当作php等可执行脚本解析。

2.3 文件名字中包含.php关键字即可执行

当文件名[info.php.png]中包含关键字[.php],并且.htaccess文件内容如下,info.php.png中的代码会被执行。

AddHandler php5-script php

EX:.htaccess 解析任意包含.php.关键字的文件

.htaccess 文件的内容

AddHandler php5-script php

准备相关测试文件:

haha.phpinfo.png 【❌,这种文件名不行,前后都有点才行】

haha.php.info.png 【✅,这种文件名可以,前后都有点才行】

2.4 匹配文件名解析

以下配置是匹配文件名[hack],找到该文件,并执行其中的PHP代码

<FilesMatch "hack">
	SetHandler application/x-httpd-php
</FilesMatch>

EX:匹配文件名解析执行任意文件

1、.htaccess 文件的内容:

<FilesMatch "hack">
		SetHandler application/x-httpd-php
</FilesMatch>

2、准备测试文件:

hack【✅可以解析执行】

sxkhack【✅ 可以解析执行】

3、结论,只需要文件名中包含关键词就行。

EX:upload-labs-pass-4

1、准备.htaccess文件和待解析的目标文件 sxkhack

.htaccess

<FilesMatch "sxk">
	SetHandler application/x-httpd-php
</FilesMatch>

sxkhack

<?php phpinfo();?>

2、上传两者进行测试

.htaccess 和目标文件均上传成功,目标文件可以解析。

三、Web容器文件解析漏洞

3.1 Apache解析漏洞

Apache从后往前解析文件名,直到碰到它认识的文件名后缀时开始解析,这个过程中黑名单被绕过,目标可执行文件被成功解析执行。

⚠️:Apache新版版已经修复了从后往前的这样一个文件解析漏洞。常出现在CTF中。

EX:apache文件解析漏洞 upload-labs-pass-4

1、创建目标文件

后缀名:.php.xxx.xx.x

内容:<?php phpinfo();?>

2、上传进行漏洞验证

3.2 IIS6.0 解析漏洞

3.2.1 .asp;1.jpg

eg: time.asp;1.jpg

EX:IIS6.0文件解析漏洞之一 -.asp;1.jpg

windows 2003

1、创建合法目标文件

后缀名:time.asp

<%=time()%>

正常访问执行。

2、更改后缀名进行漏洞验证。

后缀名:time.asp;1.jpg

图像文件被解析执行。

3、结论

针对IIS6.0的解析漏洞,可以将恶意asp代码伪装成jpg图像等合法文件,绕过检测,服务器仍可以解析执行恶意代码。

3.2.2 1.asp/time.jpg

以.asp结尾的目录下的文件被解析为asp脚本执行。

EX:IIS6.0文件解析漏洞之二 -1.asp/time.jpg

1、创建 1.asp目录,下面的time.asp脚本改名为time.jpg

time.jpg的内容

<%=time()%>

2、访问测试

3、结论

以.asp结尾的目录下面的合法文件会被解析成脚本执行。

利用?设法创建1.asp这样的文件夹,下面放文件名合法但是内容是恶意代码的文件,恶意代码可以解析执行。

3.3 PHP CGI解析漏洞

3.3.1 原理

cgi.fix_pathinfo参数在默认开启的情况下会造成文件解析漏洞。

[info.png/.php ] png图片中的php代码解析执行。

平台:IIS7.5/7.0 + PHP 5.4.45/5.2.17 、 ngix + PHP

⚠️:这个漏洞跟IIS和nginx没关系,和PHP 参数 cgi.fix_pathinfo的设置有关系。

3.3.2 防御

F1、找到处理映射程序-请求限制-映射-勾上

F2、将PHP cgi.fix_pathinfo 设置为0

3.3.3 IIS7.0/7.5 + PHP环境测试和防御

一般来说php和apache配合。

EX:IIS7.0/7.5 + PHP CGI解析漏洞

step1:让IIS7.5/7.0支持PHP环境

1、安装IIS

IIS搭建成功。

删掉默认网站重新建一个网站。

2、新建站点。

test 80端口 指定物理路径 wwwroot

其实和默认站点配置一样。

3、IIS7调用PHP环境

使用phpstudy环境:C:\phpstudy\php\php-5.4.45

创建处理映射程序。

双击-添加模块映射-

名称随便起。点击确定,是。

配置FastCGI监视PHP配置文件

编辑-选择php.ini.

4、测试IIS是否支持PHP脚本解析

C:\inetpub\wwwroot\info.php

<?php phpinfo()?>

访问:

尝试解决:

请求限制设置成执行。

不行。改回脚本。

换5.2.17 ✅。可以了

step2:解析漏洞验证

将php脚本后缀改为 .png

访问的时候后面+ /.php

php脚本执行。

原因:cgi.fix_pathinfo默认开启。

step3:防御

防御:

找到处理映射程序-请求限制-映射-勾上

3.4 nginx解析漏洞

3.4.1 CGI解析漏洞

原理同IIS + PHP CGI解析漏洞

EX:nginx + PHP CGI解析漏洞

1、漏洞平台

ubuntu 20.04 192.168.33.6

vulhub-master/

2、漏洞测试

启动docker 环境

进入vulhub-master目录:

cd nginx/nginx_parsing_vulnerability/
sudo docker-compose build
sudo docker-compose up -d

继续:

sudo docker-compose up -d ✅

访问:

漏洞测试:

http://192.168.33.6/uploadfiles/nginx.png/.php

漏洞成因。

3.4.2 nginx空字节漏洞

将info.php 重命名为info.html

访问后者,不能执行。但是后面 +%00.php 之后却可以解析执行。

原理:

  • 读取整个URL之后,发现结尾是.php,移交给PHP解释进程来解析。

  • PHP解析进程从前往后看,到html为止,后面相当于null,解析执行。

3.4.3 nginx文件名逻辑漏洞(CVE**-2013-4547**)

EX:nginx 文件名逻辑漏洞

1、启动环境

先关闭之前启动的环境:

sudo docker-compose down

进入相应目录:

cd CVE-2013-4547
sudo docker-compose build

2、访问8080端口测试

上传info.php,抓包。

传info.php 上传失败:Unsupported filetype uploaded.

文件名后缀改成 png 上传成功:File uploaded successfully: /var/www/html/uploadfiles/phpinfo.png

关键步骤一:逻辑漏洞 文件名后面+一个空格

访问的时候抓包。

【新方法:将请求的URL复制到剪贴板 repeater模块,开一个标签,右键,粘贴URL作为请求】

关键步骤二:访问的请求中URL info.php ..php

关键步骤三:打开 请求的十六进制形式,

请求之后,目标PHP代码被解析执行。

总结

文件解析漏洞是Web安全中的一种漏洞,当应用程序在处理文件时,未能正确解析文件内容或格式,攻击者可利用此漏洞上传或提交恶意构造的文件,导致应用程序执行未授权操作,如远程代码执行、信息泄露或拒绝服务攻击。这种漏洞通常源于对文件扩展名、内容类型验证不足,或文件名路径过滤不严,以及文件内容解析逻辑存在缺陷。


文章作者: 司晓凯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 司晓凯 !
  目录