1.前端JS绕过上传
这类上传检测都会在前端进行校验,如果禁用js或修改js代或使用burp抓包修改即可绕过
2.MIME类型检测绕过
服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。这种检测也可以通过burp修改上传
修改为
3.上传其他后缀名的文件
php语言除了可以解析以php为后缀的文件,还可以解析php2、php3、php4、php5这些后缀的文件。
4.重写文件解析规则绕过。
上传先上传一个名为.htaccess文件,内容如下:
<FilesMatch "jian.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
再上传一个一句话的jian.jpg,直接链接这个jian.jpg即可。因为这个文件已经被按照php进行解析
5.后缀名的大小写绕过
这类绕过是在于开发者队后缀名过滤不严,上传后缀名例如.Php或.pHp等来绕过
6.Apache文件解析漏洞
apache对文件的的解析是从后向前的,如果遇见不认识的后缀名就会跳过向前一个查看是否能够解析。
例如可以上传shell.php.xxx,可以绕过后缀名检测。
如果在 Apache 的 conf 里有这样一行配置
AddHandler php5-script .php
这时只要文件名里包含.php 即使文件名是 shell.php.jpg 也会以 php 来执行。
- 解决方法:
可以使用伪静态将.php.*
都重定向到.php
7.iis6.0目录解析漏洞
以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。
如果可以在上传的时候修改上传的路径,可以将文件上传到/1.asp/shell.jpg,所有1.asp文件夹下的文件都将会被解析为asp
8.iis6.0文件解析漏洞
服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。
所以可以构造为 shell.asp;.jpg
9.Nginx解析漏洞
首先上传一个图片马,例如上传一个 shell.jpg
,然后访问 127.0.0.1/uploads/shell.jpg/shell.php
就会被成功解析。
因为Nginx拿到URL shell.jpg/shell.php
后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看L shell.jpg/shell.php
不存在,便删去最后的/shell.php,又看/shell.jpg存在,便把/shell.jpg当成要执行的文件了。
新版本的php引入了“
security.limit_extensions
”,限制了可执行文件的后缀,默认只允许执行.php文件
10.Nginx 文件名逻辑漏洞(CVE-2013-4547)
我们上传一个 shell.jpg
的图片马,然后用burp抓包修改文件名为 shell.jpg .php
,然后将20 20改为20 00
我们请求 shell.jpg[0x20][0x00].php ,这个URI可以匹配上正则 \.php$,
可以进入这个Location块;但进入后,由于fastcgi在查找文件时被\0截断,Nginx却错误地认为
请求的文件是shell.jpg[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。
fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。
所以,我们只需要上传一个空格结尾的文件,即可使PHP解析之。
11.使用 ::$DATA 加在后缀之后进行绕过(Windows特性)
例如上传抓包并修改文件名为 shell.php::$DATA
。
- 上传到服务器的文件在Windows中会自动去掉::$DATA
因为php在window的时候如果文件名+
::$DATA
会把::\$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名
12.%00截断上传路径
然后直接访问 /upload/1.php
即可
因为在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束,后面的东西都没截断
13.上传图片马,解释文件包含使用
将一句话插入到图片中上传 然后识别其他页面的文件包含执行这个马
14.利用长标记写法
有时候waf或在做ctf的时候会过滤上传文件的php头,所以可以使用长标记写法绕过
例如:
<script language="php">phpinfo();</script>
15.Apache HTTPD 换行解析漏洞(CVE-2017-15715)
其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A
将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
访问刚才上传的/1.php%0a
,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
16.Apache SSI 远程命令执行漏洞
如果目标服务器开启了SSI与CGI支持,我们可以上传一个shtml文件,并利用上传
<!--#exec cmd="ls" -->
这样一个shell.shtml
执行任意命令。
1 条评论
不错