文件上传漏洞

文件上传漏洞_第1张图片

 

原理

这主要看一些文件上传的代码有没有 严格限制用户上传的文件类型,比如,只可以上传.jpg|.png|.gif文件,但是由于代码不严谨,或者只在前端验证这个文件的格式等等,造成了攻击者可以上传任意PHP文件,自定义文件。

危害

可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。

文件木马

ASP

<%eval request( "x")%>
<%execute request( "x")%>

ASPX

<%@ Page Language="Jscript%><%eval(Request.Item["x"],"unsafe");%>

PHP

GIF89a 
GIF89a
GIF89a 

.htaccess

百科对于.htaccess的解读是:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能.

也就是说如果目标服务器允许用户修改.htaccess文件我们就可以通过它改变文件拓展名或者访问功能来getshell

.user.ini

- (1)服务器脚本语言为PHP

- (2)对应目录下面有可执行的php文件

- (3)服务器使用CGI/FastCGI模式

.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

这里我们不深究它们的具体配置(只用自己会用到的),.user.ini文件同样可以改变用户读取文件和包含文件的权限等,它的使用范围更广,但是条件多了一个(比较重要的)对应目录下有可执行文件。接下来我们看如何构造这两种配置文件。

图片码制作

Linux:
cat shell.php >> shell.png
cat pic.png shell.php >> shell.png
echo 'GIF89a' >> pic.png
windows:
copy pic.png/b+shell.php/a shell.png

黑名单的绕过

1.有些黑名单定义的不可上传文件的后缀名不完整,可以用.php5、.phtml、.phps、.pht文件进行上传,从而实现绕过。

2.上传配置文件.htaccess,在这个文件写上代码

SetHandler application/x-httpd-php
如果有一个文件的名字是x.png,那么这个png文件就会被当作php文件进行解析,这样也可以实现绕过

3.大小写绕过将.phP文件名后缀大写

4.收尾去空绕过,在后缀名加空格(需要在抓到的数据包中加空格,直接在文件后缀名加空格会命名不成功,它会自动删除空格)

5.不删除末尾的点,在后缀名加点(需要在抓到的数据包中加点,直接在文件后缀名加点会命名不成功,它会自动删除点)

6.没有去除字符串::$DATA。如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名。例如:x.php::$DATA,Windows会自动去掉末尾的::$DATA变成x.php,但是这刚好就可以绕过黑名单了。

7.有时没有循环验证,只验证一次,可以使用x.php. .类似的方法进行绕过。(方法不止一种,视情况而定)

白名单的绕过

1.可以使用%00进行截断。%00只能用于php版本低于5.3的

2.图片马进行绕过

3.条件竞争进行绕过。
白名单要配合其他漏洞进行利用。

中间件之服务器

如果我们尝试上述的方法进行测试,发现网站确实没有漏洞,这时我们就可以对他的中间件进行测试。

1.IIS6.0版本

(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。
(2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析。

2.apache低版本(2.x)

如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。

3.apache换行解析漏洞(2.4.0--2.4.29)

在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

4.Nginx低版本、II7

上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。

5.Nginx文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)

我们只需要上传一个空格结尾的文件,即可使PHP解析

WAF绕过

如果对方有安全狗一些防护软件,我们应该如何进行绕过
1.要明确上传参数名哪些东西可以更改,哪些不可以
Content-Disposition:一般不可以更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件mime,视情况更改

2.绕过方法
数据溢出,防匹配,比如:filename=“x.php”可以在名字上写入大量的立即数据,让安全狗匹配不到,filename=“aaaaaaaaaasssssssssssfggghgjghtuyrfuy6tfgufujfffx.php”,大量写入,我这里这个量是不够的,自行测试。
符号变异,防匹配,filename=“x.jpg;.php”
数据截断防匹配,(%00;换行)
重复数据防匹配(参数多次写入)

安全修复

1.后端验证:采用服务端验证模式
2.后缀验证:基于白名单,黑名单过滤
3.MIME验证:基于上传自带类型艰检测
4.内容检测:文件头,完整性检测
5.自带函数过滤
6.WAF防护软件:宝塔、云盾等

你可能感兴趣的:(漏洞整理,文件上传)