文件上传绕过

 

文件上传-LMLPHP 

  • 常见限制绕过

 

  1.  白名单:

 文件上传-LMLPHP

 

  1. 00截断绕过

%00截断:url中%00后面的内容会被注释,一般用于URL中修改文件名

0x00截断:0x00代表空字符,截断注释后面内容

  1. MIME限制改类型:

绕过Content-Type检测文件类型上传

当浏览器在上传文件到服务器端的时候,服务器对上传的文件Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失效。绕过Content-Type文件类型检测,就是用Burpsuite截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。

 

 

  1. 图片木马

1:构造图片木马,绕过文件内容检测上传Shell

一般文件内容验证使用getimeagesize()函数检测,会判断文件是否一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。

制作图片木马: copy 1.jpg/b+2.php/a 3.jpg

 图片工具制造:

 

2:图片文件头后加木马

决定文件是否是jpeg格式?

二进制形式打开文件,文件开始字节为FF D8,文件结束两字节为FF D9。则初步判定文件为jpeg。

jpeg的SOI(start of image) 为ff d8,EOD(end of image)为ff d9

文件上传-LMLPHP 

 

 

3 .Nginx在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码,影响版:0.5.,0.6.,0.7 <= 0.7.65, 0.8 <= 0.8.37

 

  1. 黑名单限制:
  1. 姿势1 .htaccess

上传覆盖.htaccess文件,重写解析规则,将上传的带有脚本php马的图片以脚本方式解析。

文件上传-LMLPHP 

 

192.168.65.131:9096/upload-labs/upload/123.jpg?cmd=dir

 

  1. 姿势2:虚假扩展名绕过

将一句话木马的文件名lubr.php改成lubr.php.abc。首先,服务器验证文件扩展名的时候,验证的是.abc,只要改扩展名不符合服务器端黑名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了.abc扩展名,会向前寻找可解析的扩展名,即”.php”。一句话木马可以被解析,即可通过中国菜刀连接。

 

  1. 姿势3 特殊可解析后缀

经验之谈:php|php3|phtml|php4|php5 多可被Apache解析

前提语句未注释:

文件上传-LMLPHP 

 

防御:

1  注释配置文件httpd.conf中的

addType application/x-httpd-php .php .ptml .php3

2   apache配置文件,禁止php.这样的文件执行,配置文件里面加入

<Files ~ “.(php.|php3.)”>

Order ALLow,Deny

Deny from all

</Files>

 

asp: 以下格式也会被解析:*.asa、*.asp,*.cer;*.cdx

 

  1. 姿势4 上传不符合windows文件命名规则的文件名

test.asp.

test.asp(空格)

test.php:1.jpg

test.php:: $DATA

会被windows系统自动去掉不符合规则符号后面的内容

 

  1. 针对:前端js过滤

可以bp改后缀,或关闭js解析;

前端限制白名单

文件上传-LMLPHP 

 

 

 

 

 常见过滤函数

 

过滤了.asp .aspx .php .jsp

 删除末尾的点 :目的在于使.php.不能绕过`(有些123.php.可绕过)

 转换为小写 :目的在于使.Php不能绕过`

 trim收尾去空 :目的在于使php+空格不能绕过`

strrchr(), 提取后缀名:,查找字符在指定字符串中从左面开始的最后一次出现.的位置

 

文件上传-LMLPHP 

 

  • 按解析漏洞绕过
  1. php类型

1:构造服务器端虚假扩展名检测上传

将一句话木马的文件名lubr.php改成lubr.php.abc。首先,服务器验证文件扩展名的时候,验证的是.abc,只要改扩展名不符合服务器端黑名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了.abc扩展名,会向前寻找可解析的扩展名,即”.php”。一句话木马可以被解析,即可通过中国菜刀连接。

Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个wooyun.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀

 

2:利用00截断,brupsuite上传

利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0X00上传截断漏洞。 

假设文件的上传路径为http://xx.xx.xx.xx/upfiles/lubr.php.jpg ,通过Burpsuite抓包截断将lubr.php后面的“.”换成“0X00”。在上传的时候,当文件系统读到”0X00″时,会认为文件已经结束,从而将lubr.php.jpg 的内容写到lubr.php中,从而达到攻击的目的。

php函数防御: trim收尾去空 :目的在于使php+空格不能绕过`

 

3:IS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞

在默认Fast-CGI开启状况下,黑阔上传一个名字为wooyun.jpg,内容为

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

的文件,然后访问wooyun.jpg/.php,在这个目录下就会生成一句话木马 shell.php

 

  1. asp类型

1:文件解析

IIS6.0下,分号后面的不被解析,也就是说

wooyun.asp;123.jpg会被服务器看成是wooyun.asp

以下格式也会被解析:*.asa、*.asp,*.cer;*.cdx

 

2:目录解析

当建立*.asa、*.asp,格式的文件夹时,其目录下的任意文件都将被IIS当作asp文件来解析。在文件上传时。程序通常允许用户将文件放到指定的目录中,然而有些Web开发人员为了让代码更“健壮”,通常会做一个操作,如果指定的目录存在,就将文件写入目录中,不存在则先建立目录,然后写入

查看页面源代码,找到隐藏标签:< Input type=" hidden" name= " Extension”

value=”up” />这是文件上传时默认的文件夹,而我们对此参数是可控的。比如:将value的值改为muma. asp并提交上传一句话木马文件

程序在接收到文件后,对目录进行判断,如果服务器不存在muma.asp目录将会检录此目录,然后再将图片一句话木马文件写入到muma.asp目录,如果web容器为iis6.0那么木马文件就会被当做asp进行解析.

 

 

 

 

 

 

10-04 13:20