2.文件上传绕过

一、客户端检测绕过

1,判断

按F12打开网络检测,提交一个非法格式的文件,若没有请求数据发送出去,直接判断出是非法格式则是客户端检测。

如图,只在客户端前端对文件格式是否为满足条件的png、bmp、gif、jpg进行了校验。
image.png

function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    //定义允许上传的文件类型
    var allow_ext = ".jpg|.png|.gif";
    //提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    //判断上传文件类型是否允许上传
    if (allow_ext.indexOf(ext_name + "|") == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}

将.php后缀改为符合前段检测的.jsp,抓包修改后缀名为php即可绕过前端校验,如果是JS校验也可以选择禁用浏览器JS绕过。
image.png

二、服务端MIME绕过

MIME检测的是数据包content-type字段。常见的图片格式的MIME类型有以下几种类型:
PNG图像:image/png
GIF图形: image/gif
JPG图形:image/jpeg
如下,将Content-TYpe修改为符合MIME检测的image/jpeg
image.png
蚁剑成功连接。可选择上传成功的裂图,右键复制图片地址到蚁剑连接,或抓包在返回包内查看地址,抓取返回包能对抗一些简单的上传重命名。
image.png

三、服务端目录检测绕过

在文件上传时,有的程序允许用户将文件放到指定的目录中,如果指定目录存在就将文件写入目录,不存在则先建立目录,然后写入。关键代码如下:
image.png
在HTML页面有一个隐藏的表单,它默认提交的文件夹名称为value的值,即”uploads”。代码如下:
image.png
利用:如果在上传文件的数据包中存在能操作上传路径的参数,可修改该参数配合解析漏洞getshell。
如利用条件:php<5.3.4 配置条件:php.ini:magic_quotos_gcp = Off
image.png
存在可控制上传路径的参数可结合其他姿势上传绕过, 如下,POST头内存在可控制上传路径的save_path参数,结合%00主动设置上传文件命名格式
image.png

四.黑名单

一.特殊文件名绕过

1.大小写绕过

2.空格绕过

使用burp抓包后在文件名后面加个空格

3.在文件后面加上’.’

对于windows系统,文件最后一个符号是’.'时会被丢弃。

4.在文件名后加上’. .’(点空格点)

5.在文件名后加上’::$DATA’

php+windows的情况下:如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持::$DATA之前的文件名。利用windows特性,可在后缀名中加::$DATA绕过。

6.双写绕过(不实用)

一些是把黑名单中的名字换成空格,则双写后缀名绕过。

7.使用%00

若上传路径可以控制,假如上传路径是:./upload/
修改为:./upload/1.php%00
在后端会把上传路径与文件名进行拼接,然后%00会把后面的内容进行截断,从而修改文件名称。

8.使用0x00截断

上传的文件名:在burp中修改空格的16进制把20改为00

1.php .jpg

二.上传配置文件绕过

1,.htaccess配置文件

例题:upload-lads第3,4题
文件名:.htaccess
内容:

<FilesMatch "自定义文件名">
SetHandler application/x-httpd-php
</FilesMatch>

只要上传的文件名包含自定义文件名,都会按照php来解析。

2,.user.ini配置文件(实用不大)

文件内容:

auto_prepend_file=1.jpg

代表的意思是,只要执行该目录下的php文件就包含1.jpg文件中的代码。
1.先上传个.user.ini文件,再上传个1.jpg内容是<?php phpinfo();?>
2.若上传目录中没有php文件则自己手动创建一个,空的php文件。
3.然后访问php文件就会执行1.jpg中的内容。
4.上传的文件只要含有.htaccess中自定义文件名就可以当作php来解析。

注意:

1.实用性不大:毕竟上传目录中一般不会有php可执行文件。
2.php要求版本较高,php5版本无法复现,使用php7可以。

三,文件包含

四,漏洞解析

IIS解析漏洞

IIS6.0有两个解析漏洞,一个是如果目录名包含.asp、.asa、 .cer字符串,那么这个目录下所有的文
件都会按照asp去解析。
eg: “test.asp/1.jpg”
另一个是只要文件名中含有.asp、 .asa、 .cer会优先按asp来解析
eg: “1.asp; . jpg”.
IIS7.0/ 7.5是对php解析时有一个类似于Nginx的解析漏洞 ,对任意文件名只要在URL后面追加
上字符串"/任意文件名.php”就会按照php的方式去解析。
eg:“http:/ /www. target. com/upload/1. jpg/1. php”

nginx解析漏洞

目前Nginx主要有这两种漏洞:
1.对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg
可以添加为test.jpg/x.php进行解析攻击。(实用)
例如:http://www.target.com/upload/1.jpg/1.php
2.对低版本的Nginx可以在任意文件名后面添加%00.php(条件苛刻)
例如:http://www.target.com/up1oad/1.jpg%00.php
对于nginx版本要求:
nginx 0.5. ;nginx 0.6.*;nginx 0.7 <= 0.7 .65;nginx 0.8 <= 0.8.37

五.白名单

一,0x00或%00截断

同黑名单中的内容

二,利用文件包含漏洞

条件:

当一些文件上传漏洞waf比较难以绕过,只能使用图片名后缀但图片内容没有进行重新渲染时。

原理:

只要图片中存在可以执行的php语句,即使文件名是图片的格式,只要使用include(‘xxx,jpg’);就可以把图片当做php文件来解析。
所以若可以配合文件包含漏洞将是一击重拳,很实用的。

三,漏洞解析

IIS解析漏洞

IIS6.0有两个解析漏洞,一个是如果目录名包.asp、.asa、 .cer字符串,那么这个目录下所有的文
件都会按照asp去解析。
eg: “test.asp/1.jpg”
另一个是只要文件名中含有.asp、 .asa、 .cer会优先按asp来解析
eg: “1.asp; . jpg”.
IIS7.0/ 7.5是对php解析时有一个类似于Nginx的解析漏洞 ,对任意文件名只要在URL后面追加
上字符串"/任意文件名.php”就会按照php的方式去解析。
eg:“http:/ /www. target. com/upload/1. jpg/1. php”

nginx解析漏洞

目前Nginx主要有这两种漏洞:
1.对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg
可以添加为test.jpg/x.php进行解析攻击。(实用)
例如:http://www.target.com/upload/1.jpg/1.php
2.对低版本的Nginx可以在任意文件名后面添加%00.php(条件苛刻)
例如:http://www.target.com/up1oad/1.jpg%00.php
对于nginx版本要求:
nginx 0.5. ;nginx 0.6.*;nginx 0.7 <= 0.7 .65;nginx 0.8 <= 0.8.37

四,文件内容检测

1.只检测文件头

php中一个检测函数getimagesize():可以检测一张图片的文件头,从文件头中判断照片的类型。所以,仅仅修改文件的后缀名是绕不过的。可以打开一张正常的图片,用记事本打开后在后面或者中间插入php语法。

制作图片马

windows下命令

copy 1.png/b+shell.php/a 2.png

1.png是正常的图片,shell.php是木马 2.png是新生成的图片马。
linu下命令:

cat 1.png shell.php >2.png

2.对文件内容进行检测

可能考虑用户体验,只会检测前多少行内容,然后就可以一直重复文件内容,在后面加入脚本语言进行绕过。
…/…/
http://192.168.18.129/dvwa/hackable/uploads/phpin.jpg
http://192.168.18.129/dvwa/vulnerabilities/fi/?page=…/…/hackable/uploads/phpin.jpg
http://192.168.18.129/dvwa/vulnerabilities/upload/

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值