前言
由于网站注册入口容易被黑客攻击,存在如下安全问题:
- 暴力破解密码,造成用户信息泄露
- 短信盗刷的安全问题,影响业务及导致用户投诉
- 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评,图形验证及交互验证方式的安全性到底如何?请看具体分析。
一、 短信宝-PC 注册入口
简介:上海彤伴信息科技有限公司成立于2015年(“短信宝”网站名),并取得增值电信业务经营许可证。作为一家有着技术积累的移动商务平台技术和应用方案提供商。
公司自创立至今,一直致力于为企业提供具备国际技术水准的电商行业营销及运营服务。通过与三大运营商的紧密合作,目前服务可覆盖全球208个地区及中国大陆31个省市自治区。
1. 注册页

2. 会员注页面

二、 安全性分析报告:
采用极验的V1版本,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。
三、 测试方法:
前端界面分析, 采用的是极验1.0 ,最早的一个版本, 最大特点就是将图片做分割后,在前端再做合并,这就好办了, 网上有大量现成的逆向文章及视频参考,不过我们这次不用逆向, 只是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分。

- 模拟器交互部分
public RetEntity send(WebDriver driver, String areaCode, String phone) {
RetEntity retEntity = new RetEntity();
try {
driver.get(INDEX_URL);
WebElement phoneEle = driver.findElement(By.xpath("//input[@placeholder='手机号码']"));
phoneEle.click();
for (int i = 0; i < phone.length(); i++) {
phoneEle.sendKeys(String.valueOf(phone.charAt(i)));
phoneEle.click();
}
Thread.sleep(500);
// 点击按钮弹出
By clickBy = By.className("geetest_radar_tip_content");
ActionMove.waitForLoad(driver, clickBy);
driver.findElement(clickBy).click();
// 下面的js代码根据canvas文档说明而来
// 完整背景图geetest_canvas_fullbg geetest_fade geetest_absolute
Thread.sleep(1000);
WebElement gtInfoElement = ChromeDriverManager.waitElement(driver, By.className("gbn gbt-blue send-code J_Captcha gbt-off"), 1);
String gtInfo = (gtInfoElement != null && gtInfoElement.isDisplayed()) ? gtInfoElement.getText() : null;
if (gtInfo != null) {
System.out.println("gtInfo=" + gtInfo);
} else {
boolean ret = geetApi.getAndMove(driver, 0);
}
} catch (Exception e) {
System.out.println(e.toString());
retEntity.setRet(-1);
retEntity.setMsg(e.toString());
}
return retEntity;
}
- 获取滑动图片及调用移动交互
public boolean gtSliderKnob(WebDriver driver, Integer offSet) {
try {
// 获取滑动按钮
By moveBy = By.cssSelector("[class='gt_slider_knob gt_show']");
GeetSplitApi.waitForLoad(driver, moveBy);
WebElement moveElement = driver.findElement(moveBy);
int i = 0;
String gtInfo;
while (i++ < 3) {
try {
// 获取滑动距离
int distance = GeetSplitApi.getMoveDistance(driver);
if (distance == 0) {
gtInfo = "get distance err";
continue;
}
// 滑动
if (offSet != null)
ActionMove.move(driver, moveElement, distance - offSet);
else
ActionMove.move(driver, moveElement, distance);
// 滑动结果
Thread.sleep(2 * 1000);
By gtInfoBy = By.className("gt_info_content");
gtInfo = driver.findElement(gtInfoBy).getAttribute("innerHTML");
System.out.println();
if (gtInfo.isEmpty() || gtInfo.contains("速

最低0.47元/天 解锁文章
935

被折叠的 条评论
为什么被折叠?



