文件上传漏洞利用思路
1.找到网站的上传点,可以利用扫描器发现上传点,会员中心上传点,后台上传点等
2.查看上传点是否存在黑白名单限制,是否能绕过。
3.不能绕过查看一下网站的中间件,CMS,编辑器等是否存在上传或者解析漏洞。
示例
靶场:upload-labs
搭建环境:phpstudy
前端验证绕过
有的网站只在前端对上传的文件后缀进行了验证,并未在后端对文件名进行验证,一般这种方式的验证方法可以通过构造中间人的方式进行绕过,具体如下图
上传一个后缀名为php的文件提示不允许上传,只允许上传一些图片格式后缀类型的文件,此时我们只需要将php文件后缀改为.png,在上传的过程中利用burp进行拦截抓包将文件后缀改为.php即可
2.MIME文件类型验证绕过
具体步骤通前端上传文件名限制一样,进行抓包,将Content-Type类型修改成允许的类型即可绕过限制
基于黑名单
php格式文件后缀名绕过
当我们上传一个文件时,.php,.asp等文件后缀名,按照之前的方法发现 无法绕过服务端的针对文件名的绕过,此时我们可以采用图片一句话木马,或者伪造后缀文件名的方法来绕过,这里演示伪造后缀名的方法:
抓包,将2.PHP文件后缀名改成2.php3或者phtml进行测试
.htaccess绕过
当我们测试时候发现上传任何脚本后缀的文件都无法上传,此时如果网站是用Apache中间件搭建的我们可以先上传一个.htaccess(重定向文件)内容如下
SetHandler application/x-httpd-php 全部文件以php文件执行
上传一个假图片来进行绕过
后缀名大小写绕过
程序设计权限,黑名单限制没有对将文件的后缀名大小写全部转换成小写再进行验证
空格绕过
由于代码缺陷,导致上传文件时未对文件首尾后缀进行去空,存在任意文件上传
Windows系统常见绕过方式
1.代码中没有设置去除末尾的.,利用windows特性,会自动去掉文件最后面的.所以导致存在文件上传漏洞
2.::data文件流缺陷绕过(仅适用于Windows)
基于白名单
%00截断绕过
双文件上传
竞争关系
在文件为上传到服务器时,还没被服务器删除,趁机占用该文件,让服务器无法删除
二进制00
使用burp进行抓包,将文件后缀空格在HEX改为00
解析漏洞+文件上传
如果服务器端是采用白名单验证,一般很难绕过,但是可以先上传允许上传的文件,在通过中间件解析漏洞进行解析
Nginx解析漏洞
Pyload
原理
由于下图Nginx配置,把以.php结尾的文件转交给fastcgi处理,当fastcgi处理.php文件不存在时候,php.ini配置文件中的cgi.fix_pathinfo=1修复路径,如果当前路径的文件不存在,则采用上层路径,这里提交给fastcgi的处理的文件就变成了1.png,php-fpm.conf中的security.limit_extensions(限制执行脚本的后缀)配置,当此项为空时,所需fastcgi将1.png当作成.php代码解析
修复方式:
- 将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404页面
- php-fpm.conf中的security.limit_extensions后面的值设置为.php
Apache解析漏洞
pyload
1.php.png
漏洞原理
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.qwe.asd “.qwe”和”.asd” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.qwe.asd解析成php
其余配置问题导致漏洞
1. 如果在 Apache 的 conf里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
2. 如果在 Apache 的 conf里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
修复方式
- apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
2. 用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModulerewritemodule modules/modrewrite.so 把#号去掉,重启apache,在网站根目录下建立.htaccess(重定向配置)文件
IIS6.x/IIS7.x解析漏洞
Pyload
IIS6.0:1.asp;jpg
IIS7.0:1.jpg/.php
IIS6.0漏洞原理
1.基于文件名该版本默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是服务器默认不解析; 号及其后面的内容,相当于截断
2.基于文件夹名该版本默认会将 *.asp/目录下的所有文件当成Asp解析
修复方式
1.限制上传目录执行权限,不允许执行脚本
2.不允许新建目录
3.上传的文件需经过重命名(时间戳+随机数+.jpg等)
IIS7.0漏洞原理
在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。
修复方式
将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404页面