Article / 文章中心

文章分类

安全测试 : 小米(xiaomi.com)网站短信接口安全测试,如何防止短信被盗刷?

发布时间:2021-04-28 点击数:270

– “隐患险于明火,防范胜于救灾,责任重于泰山”

 

安全问题不容忽视,不要亡羊补牢!

前言

本文详细介绍了针对发送短信验证码接口的安全性测试过程,包含思路、部分测试代码已经测试结果。
本次测试网站 —小米(xiaomi.com)
小米是一家以手机、智能硬件和IoT平台为核心的互联网公司,以智能手机、智能电视、笔记本等丰富的产品与服务。

在这里插入图片描述

一丶找到对外短信接口

从该网站注册入口可以发现,也是通过发送手机短信验证码来完成注册。在这里插入图片描述

二丶分析外部防御措施

  1. 输入手机号并点击获取验证码
    在这里插入图片描述

这里需要先拖动滑块完成滑动拼图验证码,完成后才可发送
在这里插入图片描述

在这里插入图片描述

外部防御措施:滑动验证码

三丶分析测试

1. 分析测试要点

  • 通过模拟器模拟人为操作
  • 识别滑动验证码

2. 编写代码模拟操作进行测试

该网站的滑动验证码为极验滑动验证码:

在这里插入图片描述

识别方法:图像识别算法,找到阴影位置。

大致思路:

  • 将图片通过降噪,二值化等方式处理
  • 在通过模板匹配算法找到阴影位置。

这里不做赘诉,感兴趣可以看下相关验证码识别的文章:

接着进行测试。部分代码如下:

// 输入手机号
	By phoneBy = By.name("phone");
	GeetSplitApi.waitForLoad(driver, phoneBy);
	WebElement phoneElemet = driver.findElement(phoneBy);
	phoneElemet.clear();
	for (int i = 0; i < phone.length(); i++) {
		char c = phone.charAt(i);
		phoneElemet.sendKeys(c + "");
		phoneElemet.click();
	}
	Thread.sleep(1 * 1000);
// 点击发送
	By clickBy = By.className("ant-btn-link");
	GeetSplitApi.waitForLoad(driver, clickBy);
	WebElement clickElemet = driver.findElement(clickBy);
	clickElemet.click();
	Thread.sleep(3 * 1000);
	
	// 下面的js代码根据canvas文档说明而来
	// 完整背景图geetest_canvas_fullbg geetest_fade geetest_absolute
	String fullImgJs = "return document.getElementsByClassName(\"geetest_canvas_fullbg geetest_fade geetest_absolute\")[0].toDataURL(\"image/png\");";
	String fullImgPath = GeetCanvasApi.getImgByJs(driver, fullImgJs, input);
	// 含有缺口背景图geetest_canvas_bg geetest_absolute
	String bgImgJs = "return document.getElementsByClassName(\"geetest_canvas_bg geetest_absolute\")[0].toDataURL(\"image/png\");";
	String bgImgPath = GeetCanvasApi.getImgByJs(driver, bgImgJs, input);
	// 获取滑动按钮
	By moveBy = By.className("geetest_slider_button");
	GeetSplitApi.waitForLoad(driver, moveBy);
	WebElement moveElemet = driver.findElement(moveBy);

启动测试:

在这里插入图片描述

五丶结果分析

测试目标:

针对发送短信验证码接口进行安全性测试。

测试思路:

1.找到请求接口
2.分析防御机制
3.测试绕过方法

测试结果:

通过

测试结论:

前台通过滑动验证码进行限制,后台手机号和Ip均无频率限制或次数限制,当遇到大量手机号以及IP的攻击时,该网站的所有防御措施均无效。

风险等级: 中高

六丶结语

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。

有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。

所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#

谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?