逻辑漏洞-其二(登录验证码安全)

2.登录验证码安全

        验证码漏洞检测流程

2.1 图形验证码

       无效验证

                2.1.1 验证码可爆破

        验证码可爆破,即验证码过于简单,例如验证码中字符数量过少,比如只有四位组成,且只包含 0-9 的数字还没有干扰点 ,亦或者 验证码可以被猜测到(这种情况很少见) 可以使用 PKAV 来进行带验证码的爆破,先用 burpsuite 来抓包,再将抓取的数据包放 在 pkav 里,pkav攻击操作如下:使用PKav HTTP Fuzzer 爆破带验证码的网站_pkav下载-CSDN博客

2.1.2 验证码复用

                验证码复用,即登录失败后验证码不刷新,仍然可以使用上一次登录时的验证码且有效,存在爆破风险漏洞,如织梦后台的验证码, 测试方法如下,抓包后输入对的验证码后,反复发送查看回包

                可以看到,没有出现验证码错误,出现的是用户名不存在,那么这里还出现一个点,用户名爆破,只要输入账号错误和密码错误回显不一样,就可以算成用户名可爆破漏洞

2.1.3验证码绕过 

        验证码绕过,即验证码可以通过逻辑漏洞被绕过,通常分为以下情况

1) 验证码验证返回状态值

        可BP修改状态值来绕过前端的验证,修改密码页面中存在验证码绕过漏洞:

        

        

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

在发送的时候拦截回包,然后发送

2.2.2客户端验证

        通过查看源代码发现验证码是前端验证码,可以通过直接抓包的方式在 bp里边爆破,参考pikachu-bf_client.php

两种方法:其中一种,直接删除该验证码元素,直接可以验证账号或者密码 

把验证码的元素直接去掉即可 

未弹出验证码错误,可以看到账号密码错误,验证码无用

2.2.3 验证码前端验证漏洞

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

随便输入后,查看回包

修改回包,将验证码错误的标识修改成True

2.2 短信验证码

漏洞介绍
 

验证码是我们经常使用的登录,注册,找回密码,领取优惠,修改信息,等地方存在的,验证码一般是4位,6位等

关于短信验证码一般存在如下的漏洞:


1、验证码爆破
2、验证码回显
3、验证码与手机未绑定认证关系
4、修改返回包绕过验证码
5、验证码转发
6、任意验证码登录
7、验证码为空登录
8、固定验证码登录
9、验证码轰炸 

短信验证码爆破

漏洞原理:
短信验证码,服务端未对验证时间、次数作出限制,存在爆破的可能性。简单的系统存在可以直接爆破的可能性,但做过一些防护的系统还得进行一些绕过才能进行爆破,一般验证码分为4位或者6位
对于4位纯数字验证码:从0000~9999的10000, 5分钟之内。   
对于6位纯数字验证码:六位数的验证码1000000位,5分钟之内跑不完。
漏洞案例:

一般在破解验证码的时候注意不要造成破坏,爆破太多容易出现问题

挖洞操作:

1、找到有验证码的地方然后进行抓包,发送到爆破模块

2、将验证码的地方勾选住,进行破解

3、选择字典进行爆破,填写相应的内容

挖洞技巧:

挖洞的时候注意以下的几个问题
1、一般容易搜索到资产的地方没有该漏洞
2、去找一些隐藏的页面,比如app,小程序,或者其他的深入页面
3、针对于6位的验证码,可以采用分段破解的方式

验证码回显漏洞

漏洞原理:

验证码回显,是指验证码在发送的时候会存在数据包中,通过观察回显的数据包中的数据,找到验证码

漏洞案例:
 
1、验证码存在返回的数据包中
 

 
2、验证码存在返回数据包但是进行加密
 

 
3、还可能存在返回的数据包的头部

挖洞操作
 
1、打开存在验证码的地方,输入手机号,点击发送验证码,然后进行抓包
 

 
2、将数据包发送的重发器进行测试,观看返回数据包是否包含
 


挖洞技巧:

挖洞的时候注意以下的几个问题
1、一般容易搜索到资产的地方没有该漏洞
2、去找一些隐藏的页面,比如app,小程序,或者其他的深入页面
3、多观察一些返回的数据,认真仔细

验证码与手机未绑定认证关系

漏洞原理
手机验证码的短信一般来说只能用一次,如果手机验证码和手机号没有绑定认证关系,就会存在以下的情况
A手机收到的验证码B手机可以使用

漏洞案例:

1、在找回密码的地方,或者登录的地方
 


漏洞操作:

1、手机抓包输入自己A的手机号
 
2、收到验证码之后使用其他的手机号登录或者认证


挖洞技巧:

1、多尝试使用不同的手机号进行替换
2、多发散思维,寻找一些不同的功能点进行测试

修改返回包绕过验证码

漏洞原理:
有些网站在认证是否登录成功是通过返回值进行判断的,如果验证码填写正确返回1不正确返回2,我们可以通过抓取响应包修改状态码为1可以达到验证绕过。
 
漏洞案例:

 
1、输入账号密码,或者存在验证码的页面点击登录,使用BP抓取返回包
 

 
2、修改返回包的值进行绕过
 


挖洞操作:

 
1、填写相关信息,进行抓包
 

 
2、更改数据包该一下返回状态,然后点击发送
 


挖洞技巧:

 
在挖掘这种修改返回包的漏洞时候注意以下的技巧
1、0可以改成1,或者改成-1,或者无限大的一个数
2、false改成true
3、500,400等状态码可以改成200
4、fail改成success等
总体来说多尝试,多观察

验证码转发漏洞

漏洞原理:
有些开发人员在接收手机号的时候采用的是数组接收,我们就可以同时发送验证码到两个手机,从而达到绕过

漏洞案例:

1、输入手机号点击发送验证码,然后抓包
 

 
2、两个手机就同时收到了验证码
 

挖洞操作:

1、首先打开BP然后正常输入,点击发送验证码然后抓包,输入手机号
 

挖洞技巧:

在双写绕过的时候,可以使用
188888888,19999999
或者如下


type=1&phone=188888888,19999999
type=1&phone=188888888,19999999

phone=19386963121
phone=19999999

无效验证任意验证码登录

漏洞原理:
有验证码模块,但验证码模块与业务功能没有关联性,此为无效验证,一般在新上线的系统比较常见
最好在做测试的时候先试一下,有很小的概率可以成功。
获取验证码后,随意输入验证码,就可以修改,并没有对短信验证码进行验证
 

下面用一个案例进行举例说明: 获取短信验证码后,随意输入验证码,直接输入两次密码,可成功更改用户密码,没有对短信验证码进行验证。

漏洞案例:
 
填写手机号发送验证码,随意输入一个验证码进行登录
 

漏洞操作:

输入手机号接受验证码,随便选择一个数字进行登录


挖洞技巧:

app,小程序,或者一些新上线的业务,或者测试业务,一般可能存在这样的漏洞,门户网站,用户级大的APP一般都不存在

验证码为空登录

漏洞原理:
验证码为空登录是在后台接受验证码的时候没有进行过滤,可以进行空值绕过

漏洞案例:
 
1、输入账号密码点击登录

2、清空cookie,服务端就不会验证验证码了。导致暴力破解后台


漏洞操作:
 
1、抓包正常收取验证码,然后随意输入验证码,点击登录或者其他操作进行抓包

2、修改验证码为空或者其他的操作

挖洞技巧:
 
在修改的时候可以进行如下的修改
<div class="blockcode"><blockquote>null 
-1 
-1000 
1.1 
[] 
ture success 
空 
或者删除一些cookie中的字段 等等多多尝试

固定验证码登录

漏洞原理:
 
固定验证码一般是开发人员在开发的时候把验证码写死了,只要能破解出来固定验证码就可以进行绕过
 
漏洞案例:
 
1、输入手机号发送验证码使用固定验证码登录

挖洞操作:

1、正常发送验证码,然后点击登录进行抓包,修改验证码为固定的

挖洞技巧:
0000、6666,9999,1234,1111、8888、000000、123456等,一般多出现于设备、硬件设备、测试业务、上线不久的系统
测试:1111 --- 9999  1234 23456 3456 6789
000000 999999   123456789 987654321

手机短信轰炸

漏洞原理:
在一些身份校验处,有的时候需要输入手机号,接受验证码,比如登录、忘记密码、注册、绑定、活动领取、反馈处等,如果没有对发送短信进行约束,可以达到5秒发送10条短信,甚至更多的短信,对业务造成影响,这个就是短信轰炸漏洞,短信轰炸漏洞分为两种
1、 横向轰炸:对单个手机号码做了接收验证次数,但是可以对不同手机号发送短信无次数限制
2、 纵向轰炸:对一个手机号码轰炸多次

短信轰炸是手机验证码漏洞中最常见的一种漏洞类型。在测试的过程中,对短信验证码接口进行重放,导致大量发送恶意短信。 有两种情况,一种是完全没限制发短信的频率,另外一种是每 60 秒发一条短信。

情况一:没有限制时,任意下发短信时。直接放到 Intruder中即可。

情况二:有一定时间间隔,无限下发。

每隔 60 秒可下发一条短信,无限下发,短信轰炸。

在测试过程中,可通过编写 Python 脚本来计算短信下发时间间隔,实现短信轰炸。python脚本的编写可以参考上文

漏洞案例:
 
1、输入手机号,点击获取验证码进行抓包

2、将请求包发送到Repeater模块进行多次重放

3、手机收到大量的短信

挖洞操作:
 
1、打开BP,输入手机号,抓到发送验证码的包

2、将数据包发送到重放模块

3、不断点击发送,看看能不能收到很多验证码

挖洞技巧:
 
关于短信轰炸差不对有十几种绕过的方式,这个大家一定要学会

1、利用空格绕过短信条数限制

通过在参数值的前面加上空格,或者后面加上,或者多个空格,进行绕过一天内发送次数的限制,mobile= 19978657654,前面加个空格,就可以再次发送成功。
 


2、修改cookie值绕过短信次数

有些发送短信的次数是根据cookie值进行判断,利用当前cookie值来验证发送次数的话,很容易被绕过
 


3、利用接口标记绕过短信限制
发送短信验证,可能会设置参数值的不同,来判断是执行什么样的功能。比如type=1是注册,type=2是忘记密码,type=3是修改密码等。我们可以通过修改参数值,来绕过一分钟内只发送一次限制,达到短信轰炸的目的

标记接口名字不固定,还可能有smsType,r,n,number, apitype 等等。。

4、修改IP绕过短信
有的验证码是通过访问数据包的IP来做限制,比如X-Forwarded-For这个包参数,因此可以修改X-Forwarded-For后面的IP地址来进行绕过

关于IP的参数非常多,这里给大家一个字典
  1. X-Custom-IP-Authorization: localhost
    X-Custom-IP-Authorization: localhost:80
    X-Custom-IP-Authorization: localhost:443
    X-Custom-IP-Authorization: 127.0.0.1
    X-Custom-IP-Authorization: 127.0.0.1:80
    X-Custom-IP-Authorization: 127.0.0.1:443
    X-Custom-IP-Authorization: 2130706433
    X-Custom-IP-Authorization: 0x7F000001
    X-Custom-IP-Authorization: 0177.0000.0000.0001
    X-Custom-IP-Authorization: 0
    X-Custom-IP-Authorization: 127.1
    X-Custom-IP-Authorization: 10.0.0.0
    X-Custom-IP-Authorization: 10.0.0.1
    X-Custom-IP-Authorization: 172.16.0.0
    X-Custom-IP-Authorization: 172.16.0.1
    X-Custom-IP-Authorization: 192.168.1.0
    X-Custom-IP-Authorization: 192.168.1.1
    X-Forwarded-For: localhost
    X-Forwarded-For: localhost:80
    X-Forwarded-For: localhost:443
    X-Forwarded-For: 127.0.0.1
    X-Forwarded-For: 127.0.0.1:80
    X-Forwarded-For: 127.0.0.1:443
    X-Forwarded-For: 2130706433
    X-Forwarded-For: 0x7F000001
    X-Forwarded-For: 0177.0000.0000.0001
    X-Forwarded-For: 0
    X-Forwarded-For: 127.1
    X-Forwarded-For: 10.0.0.0
    X-Forwarded-For: 10.0.0.1
    X-Forwarded-For: 172.16.0.0
    X-Forwarded-For: 172.16.0.1
    X-Forwarded-For: 192.168.1.0
    X-Forwarded-For: 192.168.1.1
    X-Forward-For: localhost
    X-Forward-For: localhost:80
    X-Forward-For: localhost:443
    X-Forward-For: 127.0.0.1
    X-Forward-For: 127.0.0.1:80
    X-Forward-For: 127.0.0.1:443
    X-Forward-For: 2130706433
    X-Forward-For: 0x7F000001
    X-Forward-For: 0177.0000.0000.0001
    X-Forward-For: 0
    X-Forward-For: 127.1
    X-Forward-For: 10.0.0.0
    X-Forward-For: 10.0.0.1
    X-Forward-For: 172.16.0.0
    X-Forward-For: 172.16.0.1
    X-Forward-For: 192.168.1.0
    X-Forward-For: 192.168.1.1
    X-Remote-IP: localhost
    X-Remote-IP: localhost:80
    X-Remote-IP: localhost:443
    X-Remote-IP: 127.0.0.1
    X-Remote-IP: 127.0.0.1:80
    X-Remote-IP: 127.0.0.1:443
    X-Remote-IP: 2130706433
    X-Remote-IP: 0x7F000001
    X-Remote-IP: 0177.0000.0000.0001
    X-Remote-IP: 0
    X-Remote-IP: 127.1
    X-Remote-IP: 10.0.0.0
    X-Remote-IP: 10.0.0.1
    X-Remote-IP: 172.16.0.0
    X-Remote-IP: 172.16.0.1
    X-Remote-IP: 192.168.1.0
    X-Remote-IP: 192.168.1.1
    X-Originating-IP: ocalhost
    X-Originating-IP: ocalhost:80
    X-Originating-IP: ocalhost:443
    X-Originating-IP: 27.0.0.1
    X-Originating-IP: 27.0.0.1:80
    X-Originating-IP: 27.0.0.1:443
    X-Originating-IP: 130706433
    X-Originating-IP: x7F000001
    X-Originating-IP: 177.0000.0000.0001
    X-Originating-IP:
    X-Originating-IP: 27.1
    X-Originating-IP: 0.0.0.0
    X-Originating-IP: 0.0.0.1
    X-Originating-IP: 72.16.0.0
    X-Originating-IP: 72.16.0.1
    X-Originating-IP: 92.168.1.0
    X-Originating-IP: 92.168.1.1
    X-Remote-Addr: localhost
    X-Remote-Addr: localhost:80
    X-Remote-Addr: localhost:443
    X-Remote-Addr: 127.0.0.1
    X-Remote-Addr: 127.0.0.1:80
    X-Remote-Addr: 127.0.0.1:443
    X-Remote-Addr: 2130706433
    X-Remote-Addr: 0x7F000001
    X-Remote-Addr: 0177.0000.0000.0001
    X-Remote-Addr: 0
    X-Remote-Addr: 127.1
    X-Remote-Addr: 10.0.0.0
    X-Remote-Addr: 10.0.0.1
    X-Remote-Addr: 172.16.0.0
    X-Remote-Addr: 172.16.0.1
    X-Remote-Addr: 192.168.1.0
    X-Remote-Addr: 192.168.1.1
    X-Client-IP: localhost
    X-Client-IP: localhost:80
    X-Client-IP: localhost:443
    X-Client-IP: 127.0.0.1
    X-Client-IP: 127.0.0.1:80
    X-Client-IP: 127.0.0.1:443
    X-Client-IP: 2130706433
    X-Client-IP: 0x7F000001
    X-Client-IP: 0177.0000.0000.0001
    X-Client-IP: 0
    X-Client-IP: 127.1
    X-Client-IP: 10.0.0.0
    X-Client-IP: 10.0.0.1
    X-Client-IP: 172.16.0.0
    X-Client-IP: 172.16.0.1
    X-Client-IP: 192.168.1.0
    X-Client-IP: 192.168.1.1
    X-Real-IP: localhost
    X-Real-IP: localhost:80
    X-Real-IP: localhost:443
    X-Real-IP: 127.0.0.1
    X-Real-IP: 127.0.0.1:80
    X-Real-IP: 127.0.0.1:443
    X-Real-IP: 2130706433
    X-Real-IP: 0x7F000001
    X-Real-IP: 0177.0000.0000.0001
    X-Real-IP: 0
    X-Real-IP: 127.1
    X-Real-IP: 10.0.0.0
    X-Real-IP: 10.0.0.1
    X-Real-IP: 172.16.0.0
    X-Real-IP: 172.16.0.1
    X-Real-IP: 192.168.1.0
    X-Real-IP: 192.168.1.1

5、特殊字符绕过
加入一些特殊字符之后可以达到一个绕过的目的,比如
\r \n tab键 -- *** %%% ### @@@ !! 等等


6、+86 或者 086 绕过(区号绕过)
我们给数据包里面的手机号加上+86 或者 086 绕过


7、改地区代码绕过
当我们注册一些网站的时候,有时候会显示该地区,我们可以通过修改地区进行绕过


8、双写手机号
网站后端只对手机号做了一次参数限制,那么双写一个手机号参数,另一个手机号参数绕过限制,进入到后端,被识别,发送短信

 
也可能在同一个参数后面重写手机号

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值