Loading

DVWA 之 JavaScript - JavaScript攻击

十二、JavaScript - JavaScript攻击

原理

在页面上输入的内容中带有可执行的 javascript,而使用这段输入内容的时候,让这段用户提供的代码执行了,也就是你写的代码执行了非你写的代码,就会导致网页的不可行乃至更严重的安全威胁。

1. Low

在 Phase 中输入 success,提交一下会出现 Invalid token

打开浏览器控制台,查看情况,发现这个 token 是在前台生成的,是用 md5("ChangeMe"),而后台期待的 md5 是 md5("success")。

因此在在输入框中输入 success 之后,还得再控制台调用 generate_token() 函数

2. Medium

思路是一样的,只是生成 token 的函数放到另外的 js 文件中了

打开链接地址 http://127.0.0.1/DVWA-master/vulnerabilities/javascript/source/medium.js,可以看到内容如下

function do_something(e){
    for(var t="",n=e.length-1;n>=0;n--)t+=e[n];
    return t}
setTimeout(function(){
    do_elsesomething("XX")
},300);
function do_elsesomething(e){ 
    document.getElementById("token").value = do_something(e+document.getElementById("phrase").value+"XX")
}

所以,在输入框输入 success 之后,再控制台中输入 do_elsesomething("XX") 就可以了

3. High

高级和中级类似,生成 token 的逻辑在额外的 js 文件中,不同的是这里的 JS 经过了混淆,显得很混乱,属于看不懂的代码。

可以通过 http://deobfuscatejavascript.com/,将混淆的代码转成能看懂的 JS 代码

其中关键的部分如下

这里生成 token 的步骤是:

  1. 执行 token_part_1("ABCD", 44)
  2. 执行 token_part_2("XX")(原本是延迟 300ms 执行)
  3. 点击按钮的时候执行 token_part_3

所以我们在输入框输入 success 后,再到控制台中输入 token_part_1("ABCD", 44) 和 token_part_2("XX") 这两个函数就可以了

防护方法

永远不能相信来自用户输入的任何信息,必须假设发送给用户的任何代码都可以被操纵或绕过,因此没有不可能的级别。

意思就是说,只要token是在客户端生成的,不论你的代码有多复杂,用户永远有办法操纵或者绕过它,因此,token的生成一定要在服务器端。

另外,其他的关键代码也不要写在客户端,因为这样很容易被攻击者利用,非常不安全。

posted @ 2023-03-05 16:24  紫曜花  阅读(168)  评论(0编辑  收藏  举报