这是 DVWA 靶场练习系列的第四篇,这次的内容是 JavaScript 安全,相对来说比较简单
题目要求就是在表单中上传 success
字样就成功了,但是直接修改 input 框中内容的话是没用的,显示 invalid token
,看看源代码,在输入框前面有一个隐藏的 input 框,内容就是 token,这种一般是用来防止 CSRF 攻击的
下面有一段 js 代码就是用来生成 token 的,因此,只要计算出生成的 token 然后发送给后端就可以了,代码中会获取输入框中的值,然后进行一定加密后生成 token
所以我们在输入框中填入 success
后直接在控制台中调用 generate_token()
函数就能够拿到 token,然后传给后端即可
中级的 JavaScript 文件被放到了网页外面,同样直接打开,分析一波逻辑,也不难,直接就是在输入框内容的两边各加一个 XX
然后再逆序过来就是 token 的值,因此,token 就是 XXsseccusXX
高级的例题也是将 js 放到了网页外面,然而打开之后,特别长一串,一看就是混淆过的
然后就找去混淆的网站,发现没有啥能够完全去混淆的网站,都是去除了很多有用的信息,因此就找了网上的题解,找到了一个去 js 混淆的网站,将代码贴到网站上去混淆,这次终于可以了,下面是核心的代码
分析一下逻辑,有点奇怪,代码先是对 phrase 框进行清空,然后调用 token_part_1("ABCD", 44)
函数,这两个参数都没什么卵用,因为这个函数并没有用到这两个参数,所以只是将 phrase 框中的内容翻转过来而已,按照标准答案,phrase 里面是 success
,但是之前明明已经对 phrase 进行清空了,这里没想通。
之后再调用 token_part_2("XX")
这个函数,也就是和上一步得到的 token 进行 sha256 加密,然后再点击按钮的时候调用 token_part_3()
这个函数,继续进行 sha256 加密,得到最终的 token
后来想了一下,反正题目的意思就是要在 phrase 中填入 success
并且发送正确的 token ,而且生成 token 的顺序也告诉我们了,那就不要就纠结太多,知道该怎么做就行了
永远不要相信用户的输入,所以只要有输入的地方就有漏洞,没有绝对的安全23333