案例演示
这个验证根据靶场的提示,是基于client的,很好奇,是用JavaScript来生成的验证码吗?我们看看界面:
根据js的特性,我们不得不对源码代码进行一番查看,怕里面有什么不为人知的东西。
F12可以做详细的页面查看。
用F12定位到验证码的地方,我们发现这里面没有值。很显然,这里面的值是用js生成后计算进去的。有用的信息是:checkCode 这个id变量。 我们在当前的源码页面里定位这个变量,搜索,我们便找到1处代码如下:
果不其然,我们在这里找到了类似的生成验证码的代码。
把代码捞出来分析一下看看。如果不复杂的话:
var code; //在全局 定义验证码function createCode() {code = "";var codeLength = 5;//验证码的长度var checkCode = document.getElementById("checkCode");var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的for (var i = 0; i < codeLength; i++) {var charIndex = Math.floor(Math.random() * 36);code += selectChar[charIndex];}//alert(code);if (checkCode) {checkCode.className = "code";checkCode.value = code;}}function validate() {var inputCode = document.querySelector('#bf_client .vcode').value;if (inputCode.length <= 0) {alert("请输入验证码!");return false;} else if (inputCode != code) {alert("验证码输入错误!");createCode();//刷新验证码return false;}else {return true;}}createCode();
很明显,这里输入了验证码,然后有一个验证码的校验函数。叫validata。
处理思路
- 找一个验证码出来,校验函数的校验结果永远都是正常的。所以验证码可以一直使用。
- 客户端的js代码可以完全忽略,把validata函数重新修正为return true;
- 因为我们要暴力破解,所以,我们可以完全忽略本地的客户端校验的验证码即可。
直接用BS做提交即可,完全忽略javascript的内容。


总结
客户端的一切校验,如同虚设。
