这是我通过研究以后得出的结果。
首先查看网页的源代码,发现提交是通过一个表单来执行的
<form method="post" action="check.php" onsubmit="return chk_submit();">先吐槽一下写这个代码的人HTML水平有待提高--,上面是精简后的代码,意思是将这个表单提交到check.php网页,直接访问这个网页会得到提示please check the the key you submit
但是发现无论输入什么文本,点提交都提示JS又傲娇了呢(推测是个伪娘。。。)
也就是楼主发的图中的JS,这段代码无论怎么执行都返回一个false,所以表单提交永远不成功。作者估计是想考查怎么绕过JS验证直接到服务器端,也就是所谓的安全漏洞。
我用firefox浏览器+firebug插件,首先打开控制台,运行以下脚本让那段验证脚本失效:
var chk_submit = function() {意思就是再重新定义一个同名函数来覆盖上面的函数让其失效(JS中没有函数重载),这样这个函数就永远返回true了,这时点提交就能把表单的内容提交到check.php这个页面了。
但是这时check.php还是输出提示please check the the key you submit,应该是这个页面做了特殊字符的匹配验证,只有接收到指定的字符串才能通过,返回来再看表单中的代码,发现有一个隐藏域:
<input type="hidden" name="reakey" value="the cnss">value属性里面的值是the cnss,我猜这个就是特殊的字符,将这一段字符在上面让chk_sumit失效的情况下提交,就得到了开始截图上的密码。
控制台怎么能定义新函数使覆盖呢?是必须下firebug和火狐浏览器么?用别的浏览器能不能实现?
追答可以用chrome、safari、opera、IE8+,这些浏览器都自带有web开发工具,按下F12就出来了。也不一定要通过控制台来改,可以把这个网页保存到本地,把chk_sumit里面的内容直接改成返回true
或者去掉表单提交中的onsubmit属性。
火狐浏览器装了firebug插件后也是按F12,点击控制台选项,一般在右侧可以看到一个可以输入的区域,在这个地方输入脚本然后点下面的运行就可以了
还有个更直接的方法,把页面的脚本禁用,输入文字直接点提交就行了