软件测试技术之安全测试:如何利用短信验证码BUG浪费公司的钱
从安 2019-06-28 来源 : 阅读 2034 评论 0

摘要:本篇文章主要讲述软件测试技术之安全测试:如何利用短信验证码BUG浪费公司的钱,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章主要讲述软件测试技术之安全测试:如何利用短信验证码BUG浪费公司的钱,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

软件测试技术之安全测试:如何利用短信验证码BUG浪费公司的钱

  一、背景

    公司新产品体验,发现不少交互、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、如里是不小心得到了接口协议文档的,直接跑接口,完美!!! 
  四、感触
  想了很多,有很多想说,
  写到这时突然发现,准备写的感触稍稍过于偏激,
  好久不曾热血与冲动。
  还是来点鸡汤!
  安全无小事,认真对待你发现的每一个BUG,也许错过它,就是公司破产的第一步!
  BUG不分大小均记录,有利于经验的整理、线上回题回溯、背锅时的有理有据反驳!

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


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @从安 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved