一、背景

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

  • BUG:

  • 解决结果:

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

二、BUG分析

1、先说结论:重点是可以短时间(1、2分钟)之内把短信平台的预充值费用全部用完

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

2、第一个问题:单号码没有限制条数

a、06.12号当天实测,可以30来条,每15条换了一个通知号码而已

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

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

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

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

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

  • 接口文档

  • 模拟请求

b、设计缺陷简单分析

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

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

缺陷1:无请求来源识别

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

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

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

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

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

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

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

现在有了,就不能任性发,此问题作废,但稍稍解释一下。

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

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

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

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

  • 登录接口的Bug:

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

  • 验证码是4位数:

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

手机在用户手里,你也收不到,几位还是不一样?NO!!!

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

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

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

答案:so eazy!

三、如何浪费公司的钱

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

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

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

第一步:随机生成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

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

说明:

1、可以写成bat,mac可以写成sh

2、吃饱了,试了一下,一个虚拟机大约5秒左右一条短信,可以启多个虚拟机一起跑,达到1秒1条

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

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

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

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

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

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

第三步:抓包模拟

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

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

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

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

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

说明:

1、此方法成功率靠运气,不少APP都是有加密等各种措施防止中间人攻击

2、此方法需要一定实力,有代码或其它功底,第一种方式,完全不有压力

3、如里是不小心得到了接口协议文档的,直接跑接口,完美!!!

四、感触

想了很多,有很多想说,

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

好久不曾热血与冲动。

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

还是来点鸡汤!

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

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

努力提升知识广度,开拓眼界,增加思维的深度!

祝各位端午节快乐!

【安全测试】如何利用短信验证码BUG浪费公司的钱的更多相关文章

  1. Unity利用SMSSDK实现短信验证码(附代码)

    最近一直在研究如何给app更多实用性的功能,在app进行登录或者注册时,为了方便用户更加快捷的完成登录功能,所以就决定采用短信验证码的方式进行验证登录.在学习的过程中,先使用了Mob的短信服务进行短信 ...

  2. 利用WeX5给手机APP增加短信验证码功能

    帖子来源:http://bbs.wex5.com/thread-70908-1-1.html 遇到一个手机APP项目客户要求注册到APP上的用户手机号必须是真实的通过X5平台整合短信发送平台接口完成了 ...

  3. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  4. Django商城项目笔记No.5用户部分-注册接口-短信验证码

    Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...

  5. App开发(Android与php接口)之:短信验证码

    最近和同学们一起开发一个自主项目,要用到短信验证码,在网上搜索了很久,看到一个推荐贴,提到了很多不错的短信服务商.经过测试,帖子中提到的服务商他们的短信到达率和到达速度也都不错.最后,由于经费问题,我 ...

  6. atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc

    atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1 ...

  7. flask开发restful api系列(5)-短信验证码

    我们现在开发app,注册用户的时候,不再像web一样,发送到个人邮箱了,毕竟个人邮箱在移动端填写验证都很麻烦,一般都采用短信验证码的方式.今天我们就讲讲这方面的内容. 首先,先找一个平台吧.我们公司找 ...

  8. thinkphp整合系列之短信验证码、订单通知

    现在这个短信通知泛滥的年代:应用如果没有个短信注册:你都不敢说你是搞开发的: 这个验证码搞起来是不难的:但是如果刚接触也是有点不知从哪下手的迷茫: 先讲下概念: 要想发送验证码:需要至少三项:appi ...

  9. java接入创蓝253短信验证码

    说明 项目是springboot框架 1.短信配置文件 包含验证码发送路径.用户名.密码 chuanglan.requesturl= chuanglan.account= chuanglan.pswd ...

随机推荐

  1. linux下wrk的安装

    wrk是linux下开源的性能测试工具,并且只能在linux下运行,下面介绍下安装教程(以ubantu18.04环境为例): 1.预先安装git,如:apt install git 2.从git上拉取 ...

  2. c# 调用RDP和SSH实现远程登陆

    1.ssh的登陆实现: windows平台可以安装OpenSSHforWindows 后,可以通过cmd 执行ssh的指令. 也可以在c#编程中实现ssh的登陆: var p = new System ...

  3. Literal绑定数据

    前台: <asp:Literal ID = "ChiCunShow" runat = "server"></asp:Literal> 后 ...

  4. redis的数据持久化策略

    redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照,它可以将存在于某一时刻的所有数据都写入硬盘里面.另一种方法叫只追加文件(AOF),它会在执行写命令时,将被执行的写命令复制到 ...

  5. 解决ping不通win7主机

    之前在路由器上ping笔记本发现ping不通,但是笔记本ping路由器通,也没多想.今天想起来可能是win7的防火墙作怪,以前上课虚拟机好像也是ping不通宿主机,但是宿主机能ping通虚拟机. 简单 ...

  6. 通过反射将request中的参数封装到对象中

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...

  7. linux基础之CentOS7新特性

    CentOS7开机启动顺序: POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> ...

  8. IDEA调用其它模块module的类方法

    IDEA支持调用本project中其他模块的包里面的方法(需要配置该模块和src同级的.iml文件,配置完需要等一会才生效,尝试切换到桌面以...) 这样会使IDEA的project的模块间有依赖,该 ...

  9. BMIP002协议介绍

    比原BMIP002协议 概述 比原链技术社区最近提出了一套资产规范提议,该提议允许在issue类型的交易中实现标准资产token.该标准定义资产在链上的基本功能,以及发行人通过智能合约管理资产的规范. ...

  10. 将vmware虚拟机转换成qcow2格式的方法

    将vmware虚拟机转换成qcow2格式的方法 http://blog.51cto.com/13570993/2074071 关于qemu安装出现的问题 1.配置qemu是出现can't find p ...