1
wangxiaoaer 2023-01-06 10:37:26 +08:00
这部不是碰撞,这是暴力破解,稍微有点安全意识的都会想办法应对暴力破解吧,起码加个验证码啥的。
|
2
murmur 2023-01-06 10:38:17 +08:00 1
几次错就锁了
|
3
bjzhush 2023-01-06 10:39:17 +08:00 3
有些确实是存在风险的,如果你关注安全领域就会看到过这种拿验证码暴力遍历进入系统的案例。
但是稍微有点风险意识就会控制验证码的验证次数,几行代码就能解决,比如单个用户、单个 IP 在一定时间能,只能验证 10 次,这样你说的风险基本上就不存在了 |
4
murmur 2023-01-06 10:40:41 +08:00
另外有高级验证码,qq 或者微博都有,用你的手机发送 xxxx 到 xxxxx ,这样是不能破解的,必须得有注册手机在手
|
5
xingL OP 想暴力登录一个指定账户有难度,但如果有大量的已注册手机号,每天都可以成功暴力登录几个。
|
6
justfindu 2023-01-06 10:45:11 +08:00
爆破可能因为时间短, 所以也不是很担心你, 一般验证码 5 分钟算, 百万次就是每秒请求 3333 次.
|
7
justfindu 2023-01-06 10:45:59 +08:00
只能说我们服务器撑不住这么多并发. 尴尬
|
8
jacy 2023-01-06 10:48:42 +08:00
输错一次或者几次不就要重发了吗
|
9
westoy 2023-01-06 10:53:12 +08:00
验证码验证之后不论对错都要重置的
|
10
morty0 2023-01-06 10:55:50 +08:00
会有其他维度的保护, 比如发短信提示账号被登录, 检查客户端环境, 生物验证等等
|
11
8355 2023-01-06 10:57:51 +08:00
有策略的啊
验证码有效期 单 ip 连续错误次数 单账号连续错误次数 怎么撞啊....换代理 ip 就为了撞个验证码嘛 还不如直接社工库掏一掏来的实在 |
12
XiLingHost 2023-01-06 10:58:19 +08:00
允许重试的次数太少了,而且有效时间窗口也小,基本上不可能暴力破解
|
13
Felldeadbird 2023-01-06 11:04:41 +08:00
以某些短信验证码来说,10 分钟有效期内,你并发过去可以有效转化为正确请求。
|
14
letitbesqzr 2023-01-06 11:11:16 +08:00
输错几次就失效了 要重新发
|
15
LaGeNanRen 2023-01-06 11:11:26 +08:00
不是小孩子了,做任何事都有代价和利益的衡量,撞库完了然后呢然后呢?
|
16
GTim 2023-01-06 11:12:52 +08:00
你以为验证码碰撞是一次提交不删除,然后就能穷举法,但更多公司其实是,一次提交失败,就要重新获取...碰撞,概率而已
|
17
Jooooooooo 2023-01-06 11:15:12 +08:00
你多错几次试试就知道了. 点提交之后, 本次验证码就失效了.
多搞几次就无法再获取验证码了. |
18
chenmobuys 2023-01-06 11:23:13 +08:00
这不是很容易控制吗,不会让你一直重试的
|
20
ttgo 2023-01-06 11:35:58 +08:00
有很多这种案例。
|
21
wanguorui123 2023-01-06 12:00:23 +08:00
有过期时间吧
|
23
xingL OP @LaGeNanRen 的确,没有利益也就没人去利用,厂商也会觉得无所谓
|
24
284716337 2023-01-06 14:19:45 +08:00
验证码不是输错了就要重新获取验证码嘛,错了几次后都是等待几分钟或者几个小时才能获取了
|
25
SenLief 2023-01-06 16:38:30 +08:00
正常的应该有验证才对,比如输入 3 次都错误就要求重新获取。
|
26
LaurelHarmon 2023-01-06 16:50:15 +08:00 via Android
然后呢,你侥幸破了一次能干啥?验证码本来就不是为了绝对安全设计的,它又不是密码,只是为了防止机器暴力访问设计的,输三次全错就暂时 ban 掉(随机情况下这种概率很大),不就可以实现他的目的了吗?至于你成功了,无非是多爬了几条数据,这个对于系统影响太低了,又不是破了用户的的密码。。。
|
27
LaurelHarmon 2023-01-06 16:56:26 +08:00 via Android
奥 我看错了,原来是短信验证码,不是图形验证码;
@LaurelHarmon 这个可能考虑到攻击的成本问题,想要通过验证码撞库来登录,你得切换海量 IP 吧,这个成本有点高,但是登上后收益又有点低; 想要搞其他敏感操作(例如转钱)还得加其他验证。顶多偷窥个聊天记录、购物记录、发帖记录,可是你是随机的手机号又不是定向爆破,这信息对你没啥价值。所以不知道干这个有啥用 |
28
docx 2023-01-06 17:14:03 +08:00 via iPhone
多撞几次就升级验证了,而且还有时间限制,这概率太低了。银行密码还是静态 6 位呢。
|
29
catalysia 2023-01-06 17:23:05 +08:00
我还见过先验密码对不对 再验验证码的呢 这个世界就有很多神奇的人 神奇的人里出点神奇的程序员也不是很神奇
|
30
sola97 2023-01-06 17:26:25 +08:00 via Android
确实遇到过 4 位验证码还没有加频率限制的 app ,基本可以暴力登录任意一个手机号
|
31
littiefish 2023-01-06 18:05:02 +08:00 via iPhone
你没遇到过,今天发送太多,请明天重试?
对,我说的就是大眼夹 |
32
Exdui 2023-01-06 18:22:09 +08:00
@xingL #22 你是怎么得出「如果有几万手机号信息,每天差不多可以成功暴力登录几个」这个结论的?
每个手机号获取一次验证码,然后固定填写 123456 这个,总有一个可以碰巧登录进去? 还是每个手机号获取一次验证码,然后从 000000 - 999999 一直猜,直到登录后再继续下一个? |
33
TheCure 2023-01-06 20:23:20 +08:00
Interesting
假设你知道 10000 个手机号, 然后使用的是 4 位数验证码. 那么每次猜不中的概率是 9999/10000, 连续 10000 次不中的概率是 >>> math.pow(9999/10000, 10000) 0.36786104643297046 所以, 至少有一次中的概率是 >>> 1 - math.pow(9999/10000, 10000) 0.6321389535670295 如果我在你登录之后, 转账时再进行一次验证, 那你成功的概率确实可以忽略 |
34
honamx 2023-01-06 20:26:54 +08:00
“如果有几万手机号信息,每天差不多可以成功暴力登录几个” 你能成功登录一个比买彩票都难吧。第一有验证频率限制。第二有有效期,大概就 5 到 10 分钟。我想问你哪来的勇气可以暴力登录一个甚至几个?
|
35
honamx 2023-01-06 20:29:41 +08:00
而且几万手机号不是同一时间发送,你怎么知道你想验证的是哪个号码?
|
36
xingL OP @Exdui 假设有一万手机号信息,验证码为 4 位,每个手机号获取 3 次验证码,尝试 3 次,根据楼上 TheCure 的计算,总共尝试 3 万次,成功大约 1.89 次,也就是能登录 1.89 个账号。
|
39
iyaozhen 2023-01-06 23:13:46 +08:00
https://iyaozhen.com/a-typical-user-reg-page-sms-verification-logic-flaws.html
《典型的用户注册页面短信验证逻辑漏洞》很早之前写过的一篇博客 正常来说需要图形验证码和短信验证码结合 |
40
Chaconne 2023-01-06 23:20:37 +08:00 via iPhone
攻破短信中心,算不算一个办法?很多这类验证码通知类短信都是找一些中小公司合作的
|
41
rpish 2023-01-06 23:28:43 +08:00
异地登入二次验证,多次错误需要等待重发,频繁请求接口封 IP ,这很难爆破吧。
如果挂个代理池爆破,这么频繁的请求,总感觉像 DDos 呀。 |
42
amrnxcdt 2023-01-07 00:48:47 +08:00
@TheCure #33 你这个计算方法要成立需要有一个充分必要的条件:验证码都是唯一且不会重复使用。
正经的 totp 都是根据账号和当前时刻 /时间段等信息生成的,相当于每次尝试都是独立的事件,概率怎么可以直接加在一起。 举个不恰当的例子:摇色子 5 次,前面 5 次结果分别是 1 、2 、3 、4 、5 ,那么摇第 6 次色子的结果是 6 的概率是多少? |
43
amrnxcdt 2023-01-07 00:55:31 +08:00
@amrnxcdt #42 要对 otp 进行攻击应该是在同一个验证周期里面尽可能的多发送验证请求,但是上面的回复也说了,可以在工程上避免,比如每次验证生成新的验证码、限制单个用户验证的次数、限制单位时间内的验证次数等。
|
44
microka 2023-01-07 01:16:27 +08:00
自以为是。
|
45
SP00F 2023-01-07 02:33:52 +08:00
我不管你有多少个号,就算按 4 位验证码来算( 9999 次),你无法得知验证码生成规则,即便是按照随机的好了。你要爆破首先你要解决并发问题(小厂不论,仅讨论大厂相关),解决并发可以利用代理发起并发请求,大厂的安全不是开玩笑的,你这对同一个账号进行并发不异常安全不响应就等着卷铺盖吧。即便你忽略并发问题,一般验证码 5 分钟内有效,算一下你 5 分钟算你单线程,每秒 2 次(含请求到响应)你也不过是 600 余次,更别说你这是单线程没挂代理的直接就 ban 你 IP 了。而且还有短信验证码尝试次数。
说得好像短信验证码都这么容易爆破似的。 短信验证码要么是短信中心你有权限可以直接查,要么校验存在逻辑漏洞。 |
46
muzuiget 2023-01-07 02:38:17 +08:00
验证码相当于给你发个临时密码而已,最后还是要和用户名一起判断啊,跟自定义密码一样,输错几次就锁了。
|
47
xiadong1994 2023-01-07 03:26:18 +08:00
@Exdui 应该说的是第一种,还是有可能的,只是不知道登进去的是哪个账号,能得到的利益太低了。
|
48
yyf1234 2023-01-07 08:19:31 +08:00 via iPhone
这和手机号多少有啥关系?每个号都是独立事件,概率一样的啊
|
50
IvanLi127 2023-01-07 12:22:45 +08:00 via Android
验证码只是 mfa 的一个因素,其他的因素再参与一下,概率不就又小了很多?
|
51
amrnxcdt 2023-01-07 14:15:19 +08:00
@Juszoe #49 关键是”独立事件“,前面 9999 次猜不中不会提高第 10000 次的概率,参考那个摇色子的问题:不管前面结果如何,第 n 次摇出 6 的概率都是 1/6 。
然后原文:”假设你知道 10000 个手机号, 然后使用的是 4 位数验证码. 那么每次猜不中的概率是 9999/10000, 连续 10000 次不中的概率是” 那么假如验证码里面有 9999 个是“0000”这种情况呢?所以说他这样的算法是隐含了一个条件:验证码都是唯一且不会重复使用。 |
52
Juszoe 2023-01-07 20:41:04 +08:00
@amrnxcdt #51
“连续 10000 次不中的概率”≠“第 10000 次不中的概率” 这是两个概念 math.pow 是幂次方 没有隐含“不放回条件”,如果非要按这个条件来算,就得用超几何分布了,算出来是 100% |
53
angrylid 2023-01-07 21:25:55 +08:00 via Android
跳出技术,从成本收益的角度去考虑。我只要保证攻击者的收益远远低于成本就行了。或者说你觉得撞别人四位验证码有利可图,但那只是纸上谈兵,实践一下亏到你裤衩子都不剩。
|
54
Michael5 2023-01-14 21:07:38 +08:00
怎么弄那么多 IP 呢
|
55
lyc8503 2023-04-26 01:10:02 +08:00
遇到过十分不靠谱的网站,只有四位验证码且尝试错误验证码不失效,成功使用程序暴力破解进去了,但那也是极少数十分劣质的网站,大部分加个频率限制就解决问题。
|
56
catamaran 182 天前
先改一下标题吧,厂商为什么不担心手机验证码碰撞
|