一、工具准备
1、准备工具burpsuite
2、shell脚本(一句话脚本,加密脚本,图片木马)
二、代码分析 (JS绕过)
1、upload-labs的pass-01的前端代码展示
<form enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
<p>请选择要上传的图片:</p><p>
<input class="input_file" type="file" name="upload_file">
<input class="button" type="submit" name="submit" value="上传">
</p>
</form>
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;
}
}
2、JS检测思路
- 定义上传白名单后缀 jpg png gif
- 获取文件上传的后缀
- 检测是否在白名单内
3、绕过思路
- 把PHP文件后缀加上 ‘.jpg’,前端检测后 ,会直接提交POST请求 包括文件名
所以只有修改POST请求里面的filename 把后缀改成PHP结尾即可上传shell成功
三、操作流程
将shell.php 加上.jpg后缀(绕过js检测)
burpsuite 抓取POST请求
修改filename内容为shell.php