案例演示

这个验证根据靶场的提示,是基于client的,很好奇,是用JavaScript来生成的验证码吗?我们看看界面:
image.png
根据js的特性,我们不得不对源码代码进行一番查看,怕里面有什么不为人知的东西。
F12可以做详细的页面查看。
image.png
用F12定位到验证码的地方,我们发现这里面没有值。很显然,这里面的值是用js生成后计算进去的。有用的信息是:checkCode 这个id变量。 我们在当前的源码页面里定位这个变量,搜索,我们便找到1处代码如下:
image.png
果不其然,我们在这里找到了类似的生成验证码的代码。
把代码捞出来分析一下看看。如果不复杂的话:

  1. var code; //在全局 定义验证码
  2. function createCode() {
  3. code = "";
  4. var codeLength = 5;//验证码的长度
  5. var checkCode = document.getElementById("checkCode");
  6. 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');//所有候选组成验证码的字符,当然也可以用中文的
  7. for (var i = 0; i < codeLength; i++) {
  8. var charIndex = Math.floor(Math.random() * 36);
  9. code += selectChar[charIndex];
  10. }
  11. //alert(code);
  12. if (checkCode) {
  13. checkCode.className = "code";
  14. checkCode.value = code;
  15. }
  16. }
  17. function validate() {
  18. var inputCode = document.querySelector('#bf_client .vcode').value;
  19. if (inputCode.length <= 0) {
  20. alert("请输入验证码!");
  21. return false;
  22. } else if (inputCode != code) {
  23. alert("验证码输入错误!");
  24. createCode();//刷新验证码
  25. return false;
  26. }
  27. else {
  28. return true;
  29. }
  30. }
  31. createCode();

很明显,这里输入了验证码,然后有一个验证码的校验函数。叫validata。

处理思路

  1. 找一个验证码出来,校验函数的校验结果永远都是正常的。所以验证码可以一直使用。
  2. 客户端的js代码可以完全忽略,把validata函数重新修正为return true;
  3. 因为我们要暴力破解,所以,我们可以完全忽略本地的客户端校验的验证码即可。

直接用BS做提交即可,完全忽略javascript的内容。
image.png
image.png

image.png

找到异常所在。

总结

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