本文详细介绍了针对发送短信验证码接口的安全性测试过程,包含思路、部分测试代码已经测试结果。
本次测试网站 —开课吧(kaikeba.com)
开课吧是一家在线教育平台。
从该网站注册入口可以发现,也是通过发送手机短信验证码来完成注册。
- 输入手机号
外部防御措施:无
按下F12
打开浏览器控制台,再次点击发送验证码
按钮通过控制台找出发送短信的请求。
2. 查看请求方式
3. 查看请求报文头
4. 查看请求参数
identify_code
为图片验证码的值
5. 查看返回值
接着利用Java模拟报文请求 ,进行测试。部分代码如下:
inheads.put("Content-Type", "application/json");
inheads.put("Origin", "https://www.kaikeba.com");
inheads.put("Accept", "*/*");
inheads.put("Accept-Encoding", "gzip, deflate, br");
inheads.put("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
inheads.put("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36");
inheads.put("Referer", "https://www.kaikeba.com/");
getCookie(cookieStore, httpclient, "https://www.kaikeba.com/", inheads, outheads);
String cookieStr = GetCookieHead.CookieHashToString(outheads);
if (cookieStr != null) {
inheads.put("Cookie", cookieStr);
}
JSONObject params = new JSONObject();
params.put("auth_ticket", "");
params.put("mobile", phone);
params.put("type", 1);
httpclient = createSSLClientDefault();
retEntity = this.userClick(httpclient, cookieStore, "post", smsUrl, inheads, outheads, input, phone);
closeHttpClient(httpclient);
当遇到打码更换手机号以及IP的攻击时,该网站的所有防御措施均无效。
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。
有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?