实验环境:
DVWA靶机:172.16.12.10 靶场用户名:admin 密码:123
windos攻击机:172.16.12.7
kali攻击机:172.16.12.30
实验步骤:
一、Low级
1、源码分析
<?php $page[ 'body' ] .= <<<EOF <script> /* MD5 code from here https://github.com/blueimp/JavaScript-MD5 */ //省略一些函数 。。。 function generate_token() { //id为phrase就是input输入框中的值,将该值md5加密后,作为token进行验证 var phrase = document.getElementById("phrase").value; document.getElementById("token").value = md5(rot13(phrase)); } generate_token(); </script> EOF; ?>
2、漏洞复现
提示提交“success”获得获胜。
但输入succes显示无效的密码
分析源码,右键单击空白处,选择查看页面源代码
你会看到这个 token,不是后台生成的,而是前台生成的。。。而前台生成的 token,是用 md5("ChangeMe"),而后台期待的 md5 是 md5("success")。
所以你在输入框中输入 success 之后,还得在控制台在调用 generate_token() 函数。
按F12进入控制台
点HTML——编辑,右侧搜索框搜索phrase,然后在3处添加value的值为success
点控制台,最下方输入generate_token ,回车
最后输入框输入success,点提交,出现做的好,成功
二、Medium级
1、源码分析
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") }
思路是一样的,只是生成 token 的函数放到另外的 js 文件中了
先执行do_elsesomething(“XX”),e=“XX”,再执行do_something(e)
2、漏洞复现
还是先将phrase的值改为success
控制台输入do_elsesomething(“XX”),回车
最后输入框输入success,点提交,出现做的好,成功
三、High级
1、源码分析
查看源码
发现完全看不懂,这里 js存在代码混淆
复制vulnerabilities/javascript/source/high.js下面·的看不懂的代码
打开 混淆逆向网址 http://deobfuscatejavascript.com/
然后把乱码复制进去,点页面最下面的Deobfuscate
转换成看得懂的代码
->分析代码,执行顺序
1.token_part_1(“ABCD”, 44);
2.token_part_2(“XX”)
3.点击时执行token_part_3(t, y = “ZZ”)
2、漏洞复现
在框内输入success,不要提交
按F12进入控制台,
点控制台,输入token_part_1(“ABCD”, 44),回车
再输入token_part_2(“XX”) 回车
最后点击提交,做的好,成功
四、Impossible级
被戏弄了,哈哈,放弃