upload-labs靶场Pass-01
分析
查看提示,提示如下
查看源码
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;}
源码得知只能上传.jpg|.png|.gif,
关于前端检测:
主要是通过javascript代码进行检测,非常容易进行绕过。
1. 原理:
Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。
2. 如何判断当前页面使用前端is的验证方式:
前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。
3. 绕过方法:
删除或者禁用js:火狐浏览器–>about:config–>JavaScriptenable-false (ajax)
使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。
方法一
按F12打开检查,
<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>
结合前面的js代码,从此处可以得知,只要我们不要让文件去调用js检查后缀就可以绕过,删掉下图红色的部分,就可以绕过
我上传一个php文件,文件为php的一句话木马
上传成功
可以看到服务器里确实上传成功
然后就可以使用webshell工具进行连接
方法二
我们将之前上传的文件删除
再次来到pass-01界面
鼠标右键,查看页面源代码
将代码复制,新建txt文件,把代码复制进去,
然后找到
<form enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>请选择要上传的图片:<p><input class="input_file" type="file" name="upload_file"/><input class="button" type="submit" name="submit" value="上传"/></form>
在这form里添加action=“http://192.168.140.130/upload/Pass-01/index.php”,
<form action="http://192.168.140.130/upload/Pass-01/index.php" enctype="multipart/form-data" method="post" onsubmit="return checkFile()"><p>请选择要上传的图片:<p><input class="input_file" type="file" name="upload_file"/><input class="button" type="submit" name="submit" value="上传"/></form>
然后删除文件里的js代码
<script type="text/javascript">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;}}
</script>
将文件保存为html,然后打开,进行上传,上传一个php一句话木马,上传 成功
方法三
我们可以将php一句话木马后缀修改为jpg,
进行提交,因为问价后缀是jpg,前端检验合格
打开buro suite进行提交的抓包,
将其红框的jpg修改为php,发包,上传成功。
原理:我们在前端上传的jpg格式文件,在前端检验,然后抓包,修改后缀,到达后端因为后端没有验证,所以为php格式,上传成功
OVER!