今天继续给大家介绍渗透测试相关知识,本文主要内容是pikachu靶场验证码绕过详解。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
一、Client端验证码绕过
client端验证码登录页面如下所示:
我们可以查看当前网页源代码,看到登录处提交时,会触发validate()函数,如下所示:
validate()函数也是在页面中的一个JavaScript脚本中的函数,其作用是验证用户输入的验证码是否正确,该函数内容如下所示:
此外,页面中还有一个createCode()函数,用于生成页面验证码,代码如下所示:
综上所述,这里的验证码验证采取的是客户端验证的方式,因此我们可以使用BurpSuite抓包后,不管验证码具体信息,或者是采用本地禁用JavaScript的方式,来达到绕过client端验证的效果。
BurpSuite抓包如下所示:
从上图可以看出,我们发送的数据包尽管是含有验证码变量的,但是当我们打开页面后台源代码后,其处理流程却如下所示:
从上图可以看出,尽管我们提交了验证码参数,但是后台却并没有对验证码进行处理,更没有进行验证。
二、Server端验证码绕过
Server端验证码提交页面如下所示:
与之前Client端验证不同的是,这里的验证码是采用PHP后台源代码验证的逻辑。我们可以打开该页面源代码,结果如下所示:
从上图中可以看出,我们的验证码在完成验证失败后,根本没有对session内验证码进行修改。因此,我们的验证码是可以复用的。那么session中的验证码变量是哪里来的呢?
我们查看以下PHP代码中关于验证码的生成处,其代码如下所示:
从上图可以看出,当我们访问该页面或者点击验证码图片时,就会使得浏览器自动访问showvcode.php的文件,该文件源代码如下所示:
从上图可以看出,该文件又调用了function.php文件中的vcodex()函数,function.php文件中vcodex()函数如下所示:
从上图可以看出,vcodex()函数生成了验证码,而showvcode.php中又把生成的结果放到了session中进行存储。此外,showvcode.php中还存在一个问题,即把验证码以明文cookie的方式,发送给了客户端。
综上所述,pikachu靶场server端验证码存在两个逻辑漏洞。
第一个是验证码复用问题,我们可以使用BurpSuite抓包,然后使用上次的验证码,就可以无限制的发送数据包,验证用户名和密码的正确性了,如下所示:
由于这样做,既不会点击图片,也不会触发该图片,因此不会引起验证码变动。
第二个问题是服务端将验证码以明文的方式发送到了客户端,我们可以使用BurpSuite抓包,结果如下所示:
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200