逻辑漏洞渗透与攻防(二)之登录验证码安全

目录

前言

登录验证安全

验证码复用

 验证码绕过

客户端验证

验证码前端验证漏洞

短信验证码 

无效验证


前言

我们在上一篇文章中讲解了关于逻辑身份验证漏洞,今天我们接着来讲逻辑漏洞关于登录验证安全

登录验证安全

验证码复用

验证码复用,即登录失败后验证码不刷新,仍然可以使用上一次登录时的验证码且有效,存在爆破风险漏洞,如织梦后台的验证码, 测试方法如下,抓包后输入对的验证码后,反复发送查看回包
可以看到,没有出现验证码错误,出现的是用户名不存在,那么这里还出现一个点,用户名爆破,只要输入账号错误和密码错误回显 不一样,就可以算成用户名可爆破漏洞
逻辑漏洞渗透与攻防(二)之登录验证码安全_第1张图片

BP实验

逻辑漏洞渗透与攻防(二)之登录验证码安全_第2张图片

我们随便输入账号和密码,后台BP抓包:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第3张图片

这是我们刚刚抓到的数据包:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第4张图片

我们将其发送给Repetater模块:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第5张图片

重放发包,查看回显:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第6张图片

这里回显了你的密码错误,却没有回显你的验证码有没有错误,那是不是可能存在着验证码复用漏洞,我们再重放一次看看:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第7张图片

两次回显的结果一样,可以证明这里存在着验证码复用漏洞,这里的验证码并没有重复刷新,一直都是同一个:

那我们就可以去爆破了,将其发送到Intruder模块:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第8张图片

将爆破的密码添加payload:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第9张图片

然后添加字典:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第10张图片

爆破成功:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第11张图片

 验证码绕过

验证码绕过,即验证码可以通过逻辑漏洞被绕过,通常分为以下情况
(1) 验证码验证返回状态值
再将这里之前,我们先来学习一下什么是前端验证,客户端发送给服务端一次响应,这次响应包含了验证码,服务器后端对这个验证码只进行匹配不进行校验,假如对了,则发送给前端y表示ok,错了,则发送n,表示no,由前端根据这个发送的y或者n进行校验,而这时如果我们开启了拦截,修改了后端发送给前端的信息,将n修改为y,那这样就存在着一个验证码绕过漏洞。
可通过BP修改状态值来绕过前端的验证,修改密码页面中存在验证码绕过漏洞:
逻辑漏洞渗透与攻防(二)之登录验证码安全_第12张图片

我们后台开启BP抓包,点击提交:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第13张图片

来看看我们后台抓到的数据包:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第14张图片

我们来仔细看看响应的部分,他回复给我们的状态响应为n, 意思就是不通过,那万一我们把他的状态响应改成y,会发生什么呢?

逻辑漏洞渗透与攻防(二)之登录验证码安全_第15张图片

 我们开启拦截:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第16张图片

然后拦截此次请求的响应:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第17张图片

然后点击发送:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第18张图片

 然后我们可以看到,刚刚响应的包被我们拦截到了:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第19张图片

 我们将其改成y,然后发送试试:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第20张图片

查看结果,存在验证码绕过漏洞:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第21张图片

(2) 点击获取验证码时,直接在返回包中返回验证码,通过抓包的来观察 reponse 包 

逻辑漏洞渗透与攻防(二)之登录验证码安全_第22张图片

逻辑漏洞渗透与攻防(二)之登录验证码安全_第23张图片

可以看到直接在返回的数据包中泄露了验证码。

客户端验证

通过查看源代码发现验证码是前端验证码,可以通过直接抓包的方式在bp里边爆破,参考pikachu-bf_client.php
本次讲的前端验证和上一小节所讲的前端验证稍有不同,本次所讲的前端验证是指验证码直接在客户端进行了校验,而没有发送给服务器进行校验,少了发送给服务器这一个过程,直接在本地进行了校验。也就是所验证码的生成和校验全部由前端完成。
逻辑漏洞渗透与攻防(二)之登录验证码安全_第24张图片

我们来看一下前端的源代码,这里运用了前端生成验证码,只要你点击他的验证码,他就通过createCode()函数生成一个验证码:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第25张图片

 我们后台开启抓包,账号密码验证码这里随便输入,点击Login:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第26张图片

然后我们在BP里发现居然没有包:
逻辑漏洞渗透与攻防(二)之登录验证码安全_第27张图片

说明什么,说明这里很有可能是一个前端的验证。由于我们输入的验证码是错误的,所以连第一步前端校验都没有通过,客户端当然不会像服务器发包,那我们输入正确的验证码试试:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第28张图片

来看,由于前端验证码校验通过了,所以客户端向服务端发送了请求,我们自然而然也就抓到了数据包。

逻辑漏洞渗透与攻防(二)之登录验证码安全_第29张图片

我们将其发送给重发器:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第30张图片

重发,回显如下:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第31张图片

那遇到这种情况说明什么,说明这个数据包已经通过了前端验证,没有通过前端验证,服务器是不会给你响应的。这里为了严谨,我们再来验证一下服务端有没有对这个验证码进行再一次的验证。

我们直接在验证码里加个字符,构造错误的验证码,然后查看回显,发现我们的回显结果还是一样的,而不是提示验证码错误,说明服务端没有对这个验证码进行再一次的验证。也进一步说明了这里只进行了前端验证。

逻辑漏洞渗透与攻防(二)之登录验证码安全_第32张图片

那很明显,既然这里的数据包已经通过了前端的校验,并且后端也没有对这个验证码进行再一次的校验,把这里的验证码有没有已经无所谓了,我们可以在这个数据包的基础上直接进行爆破了,爆破的过程过于简单,我就不演示了。

我们再来看一下面对客户端验证漏洞情况的另外一种办法:

当我们输入验证码时,他不是会在这里弹出一个前端的js窗口吗?

逻辑漏洞渗透与攻防(二)之登录验证码安全_第33张图片

那我们把这个验证码所匹配或者说所对应的js代码全部删掉试试,因为他是前端验证,而前端代码又是由我们用户可以直接进行操控的,我们当然可以删除前端代码咯,我们找到对应的代码,删掉它:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第34张图片

逻辑漏洞渗透与攻防(二)之登录验证码安全_第35张图片

当我们再随便输入密码时他提示的就只是账号密码错误了,而不是验证码错误了:

逻辑漏洞渗透与攻防(二)之登录验证码安全_第36张图片

 接下来的操作也就是拿去爆破了。

验证码前端验证漏洞

如下,某网站存在一个链接 http://1XX.XX.XX.XX:9080/setup 访问这个重置链接,点击修改管理员密码 ,可以重置密码,但是我们不知道旧密码是多少,只能输入新密码

逻辑漏洞渗透与攻防(二)之登录验证码安全_第37张图片

逻辑漏洞渗透与攻防(二)之登录验证码安全_第38张图片

逻辑漏洞渗透与攻防(二)之登录验证码安全_第39张图片

短信验证码 

无效验证

有验证码模块,但验证模块与业务功能没有关联性,此为无效验证,一般在新上线的系统中比较常见。
最好在做测试的时候先试一下,有很小的概率可以成功。
下面用一个案例进行举例说明: 获取短信验证码后,随意输入验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证。

逻辑漏洞渗透与攻防(二)之登录验证码安全_第40张图片

 

你可能感兴趣的:(Web漏洞,安全,网络安全,web安全)