【安全测试】如何利用短信验证码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、如里是不小心得到了接口协议文档的,直接跑接口,完美!!!

四、感触

想了很多,有很多想说,

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

好久不曾热血与冲动。

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

还是来点鸡汤!

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

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

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

祝各位端午节快乐!

原文地址:https://www.cnblogs.com/findyou/p/9186693.html

时间: 2024-10-02 11:38:51

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

JAVA利用第三方平台发送短信验证码。

前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

利用网络短信验证码接口实现手机短信轰炸 (历史代码,贴出学习)

//resource.h //{{NO_DEPENDENCIES}} // Microsoft Visual C++ generated include file. // #define IDD_DLG_PROC 101 #define IDR_BIT1 102 #define IDB_BITMAP1 103 #define IDI_ICON1 104 #define IDC_BTN_SEND 1001 #define IDC_LIST_VIEW 1002 #define IDC_EDIT_PH

python利用第三方模块,发送短信验证码

对于初学者,如何利用第三方python开发包发送短信验证码,下面是具体的实现和记录过程! 环境:虚拟机上centos7平台,python3.7版本: 第三方短信平台:榛子云短信(smsow.zhenzikj.com) SDK下载地址: smsow.zhenzikj.com/sdkdownload- 注意要下载python3的 API文档: smsow.zhenzikj.com/doc/python_- 首先,申请账号的部分就省略了 1. 获得appid和appSecret 使用申请的账号,登录用

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

Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如要求拖动等21.3. 第三代验证码 手机验证码 短信验证码22. 短信验证码的原理23. 常用破解法23.1. 漏洞绕过法23.2. 手机 软件转发法23.3. 手机api法33.4. 默认万能密码法 测试维护万能验证码33.5. 网站服务器短信发出截获33.6. 配置文件法33.7. 前端源码截获

Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)

一般用户喜欢用手机号作为用户名注册APP账号,这时一般都是通过手机验证码的方式进行验证,下面我们就研究一个非常实用的方法,通过监听短信-实现短信验证码的自动填入,提高用户体验. 首先我们看一下如何监听手机短信. 一.获取短信全部内容 1.新建一个SMSBroadcastReceiver: package com.example.messagecut; import java.text.SimpleDateFormat; import java.util.Date; import android.

短信验证码、图形验证码、邮件验证的自动化测试

短信验证码.图形验证码.邮件验证问题在自动化测试中是一个很常见的问题,也是一个很棘手的问题.设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站,而很不幸的是,我们所使用的一些自动化测试工具也包含在内.聊一聊最好用的接口方法. 接口法思路: 不管短信验证码.图形验证码还是邮件验证,都需要都auth中去认证.(auth与会员进行分离,auth只负责认证).那么在auth中提供一些后面借口就可以进行自动化测试了. 如根据手机号插入一个新的短信校验,但安全问题就比较突出了,我想到的解决方

网站漏洞怎么修复对短信验证码被盗刷 该怎么办

公司的商城网站刚上线运营不到一个星期,网站就被***了,导致公司网站的短信通道被人恶意刷了几万条短信,损失较大,同时服务器也遭受到了前所未有的***.CPU监控看到网站在被盗刷短信验证码的时候,CPU一直保持在%95,网站甚至有些时候都无法打开. 网站被***后我登录了阿里云进去看了下,受到了很多阿里云提示的安全提醒,阿里云竟然没有给我拦截,我打电话咨询阿里云,阿里云竟然说我没有购买他们的云防火墙,阿里云客服还一再的推销让我们公司购买他们的云防火墙来防止短信验证码***,本身我也是做技术出身的,

JMETER获取短信验证码接口压测

主要学习的内容包括发送HTTP请求.HTTP信息头管理器.HTTP cookies管理器.用户定义的变量.响应断言.CSV数据文件设置的使用. 一.测试相关网站及接口说明: 提供的测试网址为:http://www.qk365.com/security/register 使用Chrome浏览器,先将浏览器的cookies缓存清空. 清空后,打开待测试的网址,按F12键,输入要注册的手机号码,如“18300987622”,点击“发送验证码”,可以看到请求的接口为:http://www.qk365.c

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

atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1.1. 破解基本原则有两种,一种是绕过验证码.一种是拦截1 2. 手机 短信 验证码的 破解 拦截 方式分类2 2.1. 按照源头破解拦截分为源头拦截,中间拦截,,终端拦截...2 2.2. 按照是否软硬件可分类为 纯软件方案与软硬件结合方案2 3. 具体的方法如下2 3.1. 后台服务器漏洞绕过法