文件上传 文件解析漏洞详解

Nginx+php配置错误导致的解析漏洞

cgi.fix_pathinfo =1
该配置在php.ini文件中设置,现在是默认注释掉了

利用:http://x.x.x.x/test.jpg/test.php nginx发现后缀是php便交给php去处理,而/test.jpg/test.php不存在,于是对路径进行修复,去掉/test.php,然后对test.jpg进行php解析

另外新版php还增加了“ security.limit_extensions ” 限制了解析文件的后缀 只能为.php,否则返回
Access denied 。

Nginx空字节代码执行漏洞

在fast-cgi关闭的情况下,nginx版本:0.5., 0.6., 0.7-0.7.65, 0.8-0.8.37,nginx在图片后附加php代码然后通过访问
test.jpg%00.php 即可执行php代码
原理: URL里面在遇到%00空字节时与FastCGI处理不一致

Nginx配置不当目录穿越

如果绝对路径"/home/"的URL映射是网站目录"/files/",配置写成了"/files"

location /files {
    alias /home/;
}

就可以访问"/files../",穿越路径,访问到绝对路径根目录"/"下的文件列表

Nginx文件名逻辑漏洞(CVE-2013-4547)

受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x

正常上传一个附加代码的图片"test.jpg",访问时后面+"空格"+""+".php",即让图片作为php文件解析

"/test.jpg .php"

Apache未知扩展名解析漏洞

Apache对文件的解析主要是从右到左开始判断并进行解析,如果判断为不能解析的类型,则继续向左进行解析,如test.php.xyz将被解析为PHP类型。

另外使用module模式与php结合的所有版本 apache存在未知扩展名解析漏洞,使用fastcgi模式与php结合的所有版本apache不存在此漏洞
我在本地实验moudle模式结合,依然可以执行成功

参考: https://www.cnblogs.com/milantgh/p/5116955.html

Apache换行解析漏洞 (CVE-2017-15715)

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.phpx0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略

php不常见后缀名

php可识别的后缀名如下:

php、php3、php4、php5、phpt、phtml

利用该条件即可绕过黑名单检查

htaccess文件解析

htaccess文件生效条件:

  1. Apache的配置文件中,要写上: AllowOverride All

  2. Apache要加载mod_Rewrite模块。加载该模块,需要在Apache的配置文件中写上:LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

需要注意Apache可能有多个配置文件,后加载的配置文件会覆盖先加载的配置文件中的配置

.htaccess文件可以修改MIME类型,这使得该.htaccess文件所在目录及其子目录中的后缀为.xxx的文件被Apache当做php文件。

 AddType application/x-httpd-php xxx

或者:

  <FilesMatch "shell.jpg">
    SetHandler application/x-httpd-php
  </FilesMatch>

该语句会让Apache把shell.jpg文件解析为php文件

iis 6.0解析漏洞

影响范围iis<=6.0

  1. .asp或者.asa结尾的目录下所有文件都被iis当做asp文件来解析
  2. 文件解析 xx.asp;.jpg 在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。 默认的可执行文件后缀还有三个".asa"、".cer"、".cdx"

IIS 7.0&7.5畸形解析漏洞

默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件

上传个xx.jpg小马,然后访问xx.jpg/.php 或者 或xx.jpg/abc.php ,该jpg文件就会被当做php文件解析

widows文件命名特性

  1. 大小写不敏感
  2. 自动去除文件名末尾的. 和空白符
  3. 0x7F—0xFE 范围间的字符如果要是出现在文件名的(不包括文件夹名)最后一位,会被去除。即创建名为test.asp + chr(0x7F)的文件时,实际上会创建一个"test.asp"文件,最后一个ascii码为0x7F的字符会被去除

参考:

  1. https://www.jianshu.com/p/1ccbab572974
  2. https://www.jianshu.com/p/7275cd4d23a5
  3. https://www.cnblogs.com/milantgh/p/5116955.html
原文地址:https://www.cnblogs.com/GH-D/p/11975714.html