验证码渗透最全总结

目录

验证码总结

图形验证码

图形验证码长宽可控

图形验证码可绕过

图形验证码不失效

图形验证码可识别

图形验证码随机值可控

图形验证码返回到前端

短信验证码

短信炸弹纵向

短信炸弹横向

短信验证码可爆破

短信验证码可编辑

短信炸弹的绕过技巧

短信炸弹的绕过技巧 1--特殊字符

短信炸弹的绕过技巧 2--添加 XFF

短信炸弹的绕过技巧 3--添加多个值

短信炸弹的绕过技巧 4--添加多个参数

短信炸弹的绕过技巧 5--修改返回包

短信炸弹的绕过技巧 6--并发

在响应包里面可以看到短信验证码

提交别人的验证码

每次短信验证码都是同一个

验证码不失效 1

验证码不失效 2

验证码绕过技巧

验证码技巧


验证码总结

验证码分为两块内容,一块是图形验证码,一块是短信验证码。下面是对这些技巧总结的思维导图。

image.png

图形验证码

图形验证码长宽可控

简单测试方法,就是看到一个登录框,然后新建打开图片链接,在图片链接中就有机会看到两个参数值,一个是 width,一个是 length。这两个参数是计算图片验证码的长宽,如果长宽过高就会过度消耗的是服务器的 CPU 资源。

image.png


当length为比较大的时候,响应时间为2767millis
 

image.png


注意:该漏洞能造成服务器拒绝服务攻击。有的 SRC 里面注明了,禁止使用 DDOS 攻击,这种漏洞是不收的,如果提交了漏洞,很有可能面临法律责任

image.png

图形验证码可绕过

有时候开发,会写两套图形验证码流程,一套是在生产运行阶段必须使用正确验证码才能通过服务器校验。另外一套是在测试 SIT 环境下,把验证码设置为只要是 null 或者是空都可以登录验证码置为空,提高开发工作效率。还有的时候,将验证码修改为 true 就好了。这个是因为开发在进行图形验证码判断的时候,只要是验证码收到的是 true 就会通过。具体测试过程已经找不到了,大概写一下吧。

图形验证码不失效

简单易懂,图形验证码没有对应的失效机制。导致图形验证码能被多次利用。图形验证码在使用后未失效,发送短信时抓包,发送到Repeter中进行重放,可以发送成功!

图形验证码可识别

这个就是开发在制作图形验证码功能的时候,没有将图形验证码加入足够多的噪点,使验证码能够被现有的工具进行识别。一般是项目硬凑数用的,SRC 全部都不收。具体不做解释

图形验证码随机值可控

都知道图形验证码是后端随机生成的。那么随机生成的时候,有没有可能是能控制这个随机值?有可能! 生成验证码的随机值被写在了 url 里面

image.png

将characters固定为aaaa,可以看到图形验证码为aaaa

image.png

图形验证码返回到前端

测试过程已经找不到了,口头描述下大致就是登录后会在响应包中返回了下次图形验证码的内容。

短信验证码

我们已经写完了图形验证码部分,现实情况下短信验证码也是比较多。短信验证码的漏洞技巧要比图形验证码多很多

短信炸弹纵向

在一个限制时间的情况下对一个手机号,发送的短信验证码条数超过发送预期,这种漏洞我们都称为短信炸弹or短信轰炸or短信炸弹纵向
 

image.png


 

image.png


不停点击repeter或者放到intruder里面,就可以实现一个手机号接收到多条短信

image.png

短信炸弹横向

上面我们提到了在限定时间内,对一个手机号发送超过预期的短信条数是短信轰炸。造成的结果就是浪费短信资源。如果开发把这个漏洞给改了,那么还有没有漏洞?还有?不能给一个人发送短信验证了,那么给其他人发送验证码一样的。
 

image.png


 

image.png


将phone设置成变量,进行遍历

image.png

短信验证码可爆破

我们讲了 2 个发送短信验证码,都知道验证码通常 4 位数或者 6 位数的数字验证码。如果服务器没有限制提交的验证码的次数,那么我们可以爆破这个验证码。并且如果有 4 位验证码被爆破成功的话,在 SRC 里面通常是按照高危处理。

短信验证码可编辑

我们讲了发送短信验证码以及爆破短信验证码。我们知道短信验证码功能发送的是短信,那么我们就有可能把短信内容给更改。
 

image.png


 

image.png


通过修改transAmt 参数内容,可随意修改短信内容

image.png

短信炸弹的绕过技巧

我们在了解基础短信验证码的漏洞后,相应的开发也会进行了解。那么我们就需要增加技巧来绕过这些东西。

短信炸弹的绕过技巧 1--特殊字符

通常,开发在发送短信验证码的时候,没有对特殊字符进行过滤。比如在手机号是 15312341234。我们加上+86,变成+8615312341234,这样的话服务器就有可能判定为两个手机号了。

在 mobile=15312341234 的前面,加 空格860860086+86000/r,/n,?,#,!,,...只要想法多就有可能绕过。

image.png

image.png


控制phone参数进行攻击

image.png

短信炸弹的绕过技巧 2--添加 XFF

在请求包中添加XFF头,有的时候服务器是按照IP地址进行判定的。

短信炸弹的绕过技巧 3--添加多个值

在发送手机短信验证码的时候可以把一个参数赋上多个值。比如 Mobile=18312341234,13612341234&code=1234

短信炸弹的绕过技巧 4--添加多个参数

比如 Mobile=18312341234&Mobile=13612341234

短信炸弹的绕过技巧 5--修改返回包

在发送短信验证码的数据包,修改返回包的 Flase 为 Success

短信炸弹的绕过技巧 6--并发

对短信验证码的数据包进行并发,有机会绕过限制

image.png

image.png

在响应包里面可以看到短信验证码

在抓取短信验证码的数据包后,在 response 可以看到短信验证码

提交别人的验证码

假设有一个需要短信验证码功能点。给自己手机号 13512341234 发送验证码为 111111,给别人手机号 18312341234 收到验证码为 222222。那么自己手机号使用 222222 验证码,也能正常登录

每次短信验证码都是同一个

一个手机号,点击 2 次发送短信验证码,验证码都是同一个。这样的情况下,可以试试爆破验证码,如果爆破次数无限制,还是存在验证码固定这样漏洞的

验证码不失效 1

比如验证码是在修改密码处使用。在使用短信验证码进入修改密码后,验证码没有失效。当前用户还可以再次用这个短信验证码修改密码

验证码不失效 2

场景:收到两条短信验证码,时间顺序为,1 在前,2 在后。收到的 2 后,1 还是没有失效-

验证码绕过技巧

项目在上线前,只是写好验证码接口,不会调用短信资源。因而为了功能登录会把验证码设计成固定的比如尝试 6 个 1,6 个 0 短信验证码

验证码技巧

在找回密码方面,填写完账号名,要给A发短信验证码,通过burp拦截包,给B发送短信验证码。这样的话,就能用B的验证码提交给A用,造成任意账号密码重置

原文链接:https://forum.butian.net/share/2602

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的 Python 函数,用于生成具有随机字符和数字的验证码: ```python import random import string def generate_code(length=6): """ 生成指定长度的随机验证码 :param length: 验证码长度,默认为6 :return: 随机验证码 """ all_chars = string.ascii_letters + string.digits code = '' for i in range(length): code += random.choice(all_chars) return code ``` 该函数使用 Python 的 `random` 和 `string` 模块生成随机字符和数字,并将它们组合成指定长度的验证码。你可以通过调整 `length` 参数来生成不同长度的验证码。 ### 回答2: Python生成最简单的验证码函数可以使用random模块生成随机数和string模块生成随机字符串来实现。具体步骤如下: 1. 导入random和string模块: ```python import random import string ``` 2. 定义一个函数来生成验证码: ```python def generate_code(length): # 验证码由数字和大小写字母组成 chars = string.ascii_letters + string.digits code = '' for _ in range(length): code += random.choice(chars) return code ``` 其中,length参数表示验证码的长度。 3. 调用函数生成验证码: ```python code = generate_code(4) # 生成长度为4的验证码 print(code) # 打印验证码 ``` 通过以上步骤,就可以使用Python生成简单的验证码了。该验证码由数字和大小写字母组成,可以根据需要自定义验证码的长度和字符组合。 ### 回答3: 在Python中,我们可以使用随机数生成的方式来产生最简单的验证码。下面是一个生成四位数字验证码的例子: ```python import random def generate_code(): code = "" for _ in range(4): code += str(random.randint(0, 9)) return code print(generate_code()) ``` 代码中,我们利用`random`库中的`randint()`函数来生成一个0到9之间的随机整数,然后将生成的数字转换成字符串,依次加入到`code`变量中。最后返回`code`作为验证码。 当然,这只是一个简单的例子。实际中,我们可能需要更复杂的验证码,例如包含字母和数字的验证码。可以使用`random.choice()`函数来从指定的字符集合中选择随机字符,并将生成的字符加入到验证码中。 下面是一个生成包含字母和数字的四位验证码的例子: ```python import random import string def generate_code(): code = "" charset = string.ascii_letters + string.digits for _ in range(4): code += random.choice(charset) return code print(generate_code()) ``` 在这个例子中,我们使用了`string`库中的`ascii_letters`和`digits`常量来表示字母和数字的字符集合。然后利用`random.choice()`函数从字符集合中选择随机字符,加入到验证码中。 以上是几个简单的例子,实际中可以根据自己的需求和规则,定制更复杂的验证码生成函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值