【安全测试】如何利用短信验证码BUG浪费公司的钱

1、背景

  公司新产品体验,发现很多交互、UI、功能设计上的小问题。因而花了点时间随意挑了几个功能深刻的玩了一下,顺手提了BUG。接口层,看了一下接口文档,简单测了一下接口,BUG其实还挺严重的,后面详细分析,为了顾及服务器后台大佬(架构师)的面子,费时费力在APP测试短信验证码服务器与APP总体处理逻辑,提交BUG以下:python

  • BUG:

 

  • 解决结果:

哎!TX背景的架构师的解决结果,让我稍许失望。android

 

2、BUG分析

一、先说结论:重点是能够短期(一、2分钟)以内把短信平台的预充值费用所有用完shell

1). 单手机号码可发送短信:40条+
2).可多手机号,短期操做无限制发送短信验证码
3).对用户影响:可作短信炸弹恶意骚扰用户
4).对公司影响:短期耗尽充值平台费用,致使注册、登陆功能不可用;大量垃圾短信影响公司形象安全

 

二、第一个问题:单号码没有限制条数服务器

a、06.12号当天实测,能够30来条,每15条换了一个通知号码而已架构

b、06.14号当天实测,确实超过15条是提示超出频率限制。(心里OS:我有当时短信截图,并有12号的其中部分日志在手,日志在手...)app

 

测试想要不背锅哥就大发慈悲教一条:无论大小BUG均记录在案,严重问题尽量全的保留界面截图、日志文件等直接证据。socket

 

补充:通常第三方短信平台已有限制每一个号码天天发送频率与条数:通常10条左右/天,1分钟内不超过2条工具

 

三、第二个问题:同设备、同IP、多号码请求无限制测试

a、文档设计,咱们直接看业务层接口设计就能发现致命的缺陷!

  • 接口文档

 

  • 模拟请求

 

b、设计缺陷简单分析

1)、此接口为直接请求,基本没有其它前置接口处理(除了接入层路由)。

协议说明:APP请求走socket协议到接入层,再由其将请求内容改为http转发给业务层    --本次不讨论这个

缺陷1:无请求来源识别

缺陷2:同设备、同IP恶意请求,没法作限制     --此处原觉得接入层有作,但我今天实测了一下未发现

缺陷3:无数据篡的改校验

缺陷4:单号码有加发送频率限制(刚加),同设备更换号码发送频率无限制

缺陷5:单号码有加15条/天的限制(刚加),同设备多号码(不停更换号码)短信发送可无限制

 

以上接口没有对外暴路,相对安全一点。但安全隐患是存在的,后面会讲实操如何实际测试,对是测试!

 

四、第三个问题:短信炸弹 

以前没有单号码的条数限制、发送频率的限制,

如今有了,就不能任性发,此问题做废,但稍稍解释一下。

  • 无条数限制:一天发个几十条给你,一个网站几十条,多几个网站你就跪了,有没有经历过某宝卖家的骚扰?
  • 无发送频率的限制:一分钟2条,若是没有限制,段时间就能够给你来个几十上百条,手机响个不停,15条一个号码,黑名单你都拉不过来

 

五、第四个问题:浪费钱,影响形象

短信验证码是为了用户快速登陆,没有达到预期,都是浪费钱!故从这个角度说,没有安全措施,就是浪费钱!还不停给用户不须要的垃圾短信! 

 

六、第五个衍生的问题:验证码与登陆逻辑的安全缺陷

  • 登陆接口的Bug:

在测登陆接口时试了,输错试过250次短信验证码(数字是巧合,嗯!),最后一次正确,依旧能够登陆成功!what?怎么有这么牛X的操做???

  • 验证码是4位数:

单看4位数验证码,没有一点问题对吧?

手机在用户手里,你也收不到,几位仍是不同?NO!!!

 

首先,4位验证码有10^4=10000种可能,验证码3分钟内有效。

其次,登陆无错误次数限制

 

就问一句:你能不能在180秒破解登陆,就1W种可能

答案:so eazy!

  

3、如何浪费公司的钱

其余扯淡的吹嘘的玩意都不说,实操怎么浪费公司钱(短信费用)!!!(啊!~~老板听我解释,不是你想的那样!

假设我非公司员工,不了解协议与逻辑,有什么办法呢,多的是,先提两种:

  • 第一种方式(笨方法):

第一步:随机生成10W+手机号码

第二步:装Android虚拟机,安装产品APP

第三步:adb模拟(android自动化工具appnium什么的也行)

1)、app启动 : adb shell am start -n com.xxx.xxx/.xxx

2)、输入手机号: adb shell input text 15900000000       --手机号能够从文件中读取

3)、点击发送验证码:adb shell input tap 100 300        --发送验证码按钮位置是固定的

4)、Kill APP(可绕过60秒倒计时) :adb shell am force-stop  com.xxx.xxx

第四步:循环以上三个步骤

 

说明:

一、能够写成bat,mac能够写成sh

二、吃饱了,试了一下,一个虚拟机大约5秒左右一条短信,能够启多个虚拟机一块儿跑,达到1秒1条

三、多个虚拟机使用如下命令:  "adb -s 虚拟机  shell  命令"

四、以上adb仍是有些慢,最好的方法是用monkeyrunner写(python语言)

五、这两次测试浪费了公司很多钱,少说也有10RMB++大大额巨款

 

  • 第二种方式(抓包模拟):

第一步:随机生成10W+手机号码

第二步:Android手机(或虚拟机)安装产品APP

第三步:抓包模拟

1)、Android手机链接电脑共享wifi 

2)、开启抓包工具,好比wireshark

3)、输入手机号,点击发送验证码 

4)、重得以上步骤屡次,找到规律破解

5)、python脚本或其余工具模拟请求

 

说明:

一、此方法成功率靠运气,很多APP都是有加密等各类措施防止中间人攻击

二、此方法须要必定实力,有代码或其它功底,第一种方式,彻底不有压力

三、如里是不当心获得了接口协议文档的,直接跑接口,完美!!!

 

4、感触

想了不少,有不少想说,

写到这时忽然发现,准备写的感触稍稍过于偏激,

很久未曾热血与冲动。

深呼吸...1钟....................................................................................

 

仍是来点鸡汤!

安全无小事,认真对待你发现的每个BUG,也许错过它,就是公司破产的第一步!

BUG不分大小均记录,有利于经验的整理、线上回题回溯、背锅时的有理有据反驳!

努力提高知识广度,开拓眼界,增长思惟的深度! 

 

祝各位端午节快乐!

相关文章
相关标签/搜索