本文主要内容

  • 主要客户端检测绕过类型
  • 前端js检测绕过示例

0x01 客户端检测绕过

(1)JavaScript检测:通过浏览器提交上传请求前,触发检测用JS脚本进行检测。

例如:普通的表单上传

(2)Flash AS脚本检测:上传用Flash,提交上传请求前,触发检测用AS脚本进行检测。

例如:DZ的头像上传

(3)APP上传检测:检测写在APP客户端代码中,或者所调用的HTML页面中

  • 客户端检测一般只检测文件扩展名

    客户端进行的检测,可通过对客户端代码的一些修改或直接拦截修改报文即可绕过,所以这种上传限制约等于没有

0x02 前端JavaScript检测绕过

  • 查看onchange、onsubmit等事件
    • onchange事件会在域的内容改变时发生
    • onsubmit事件会在表单中的确认按钮被点击时发生
  • 删除掉相关事件中的检测函数

0x03 测试案例

(1)环境

windows+phpstudy+uploadlab

(2)尝试上传含phpinfo()函数的php文件(phpinfo.php)

(3)F12审查元素代码,找到事件触发函数

(4)删除onsubmit,重新提交,并访问上传的文件

(5)查看网页源代码可找到上传文件路径相关信息

(6)js校验代码如下

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