文件上传常见绕过分析

1、客户端校验(javascript校验)

(1)判断方法:
点击上传会会直接显示是否可以上传,并且burp无法抓到POST的包

(2)绕过方法:
① 禁用JS
② F12修改
③ 抓包改包(上传允许上传的后缀,然后修改包)

2、服务器端校验(Content-Type检验)

注:就是判断MIME类型
(1)判断方法:
上传文件时,提示该后缀无法上传,且burp可以抓到POST包

(2)绕过方法:
①上传不允许的后缀文件时,抓包修改MIME类型(如果文件名可解析则不需用改,不能解析,则需要改)
②上传允许的后缀文件时,抓包后修改为可解析的文件名
③常见的MIMEI类型
在这里插入图片描述
注:上传后的MIME类型是根据你上传时的文件名后缀决定的

3、服务端校验(黑名单)

绕过方法:
①大小写绕过
②上传黑名单中没有的,但是能够被php解析的后缀,例如可以尝试上传php2/php3/php4/php5/phpt/phtml/phps后缀进行绕过
③上传.htaccess文件

文件内容例1:SetHandler application/x-httpd-php,这行配置表示将所有后缀名都解析为php

文件内容例2:AddType application/x-httpd-php .jpg,指定后缀名解析为php

文件内容例3:指定以php解析的文件
<FilesMatch "xx.gif">
SetHandler application/x-httpd-php
</FilesMatch>

注:
(1)能解析的配置文件在httpd-php.conf
(2)利用.htaccess前提条件:

  • httpd.conf中要AllowOverride All,AllowOverride None不行
  • 需要加载mod_rewrite模块,LoadModule rewrite_module modules/mod_rewrite.so

4、服务端校验:%00截断(0x00),也就是空字符

(1)截断条件:

  • php版本必须小于5.3.4
  • php.ini中的magic_quotes_gpc设置为Off
    (2)%00(0x00)截断原理:在有些函数执行时,会把这个字符(%00或0x00)当做结束符
    注:GET请求使用%00,POST请求使用0x00
    源码可参考如下:
    ①上传允许上传的后缀
    ②在目录后面添加截断
    在这里插入图片描述
    (3)实际类似于如下所示
    在这里插入图片描述

可以参考:
https://www.fujieace.com/penetration-test/file-upload-00.html
http://www.seotest.cn/jishu/45571.html

5、服务端校验(白名单)

(1)apache解析漏洞
参考:文件解析漏洞总结-Apache

6、服务端校验(文件内容头校验)

例如:根据getimagesize()函数的返回值判断目标文件
在这里插入图片描述

绕过方法:在恶意脚本的头部加上允许上传文件的头标识
最常使用:GIF89a

7、竞争上传

原理:后端代码检测上传后的文件是否合法,不合法就删除
利用:尽管不合法的文件会被删除,但它还是存在过服务器中,只是存在的时间很短,所以我们通过竞争上传(多线程),达到上传的速度比它服务器删除的速度快即可
举例:参考该文中第十八题

8、可以参考我写的upload-labs通关wp

upload-labs–wp(21关)

猜你喜欢

转载自blog.csdn.net/qq_41617034/article/details/106526847