【北交互联-注册/登录安全分析报告】

前言

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

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞

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

一、 北交互联PC 注册入口

简介:北京产权交易所(以下简称北交所)是经北京市人民政府批准设立的综合性产权交易机构。自 2004 年成立以来,北交所始终坚持"要素市场的核心力量""政府管理经济的市场化工具""制度防腐的阳光平台"的企业使命,积极服务中央企业、地方国有企业和涉公资产进场交易,扎实开展非国有产股权交易、上市公司并购重组、文旅体育资源交易、债权资产交易等服务,助推经济实现高质量发展。

与此同时,北交所着眼首都要素市场体系建设,通过设立中国技术交易所、北京金融资产交易所、北京绿色交易所、北京软件和信息服务交易所、北京电力交易中心等专业交易平台和北京登记结算有限公司等支撑服务机构,搭建了集团化运营架构,持续提升流转和融资两大核心功能,积极服务国家战略和首都经济高质量发展。

安全分析:

采用传统的图形验证码方式,具体为4个英文,ocr 识别率在 95% 以上。

测试方法:

采用模拟器+OCR识别

1 模拟器交互部分

java 复制代码
private OcrClientDddd ddddOcr = new OcrClientDddd();
	private String INDEX_URL = "https://otc.cbex.com/page/tyrz/register/index";

	@Override
	public RetEntity send(WebDriver driver, String areaCode, String phone) {
		RetEntity retEntity = new RetEntity();
		try {
			driver.get(INDEX_URL);
			Thread.sleep(1 * 1000);

			String regToken = MD5Util.getMD5Str(System.currentTimeMillis() + "");
			((JavascriptExecutor) driver).executeScript("window.getRegToken= function() {window.regToken = '" + regToken + "';console.log('regToken='+regToken);};");
			Thread.sleep(1000);

			// 1 请输入用户名
			WebElement userElement = ChromeDriverManager.waitElement(driver, By.name("username"), 10);
			userElement.sendKeys("user" + System.currentTimeMillis());

			// 2 输入密码
			String password = "qwe123." + new Random().nextInt(9999);
			WebElement passwordElemet = ChromeDriverManager.waitElement(driver, By.name("password"), 1);
			passwordElemet.sendKeys(password);
			// 输入确认密码
			passwordElemet = ChromeDriverManager.waitElement(driver, By.name("confirmPassword"), 1);
			passwordElemet.sendKeys(password);

			// 3 输入手机号
			WebElement phoneElement = ChromeDriverManager.waitElement(driver, By.name("mobilePhone"), 1);
			phoneElement.sendKeys(phone);
			Thread.sleep(1 * 1000);

			// 4 点击注册
			WebElement formElement = driver.findElement(By.className("form_btn"));
			formElement.click();
			String imgCode = null;
			WebElement imgElement;
			byte[] imgByte;
			for (int i = 0; i < 6; i++) {
				// 5 获取图形验证码
				imgByte = GetImage.callJsById(driver, "captcha");
				int len = (imgByte != null) ? imgByte.length : 0;
				imgCode = (len > 0) ? ddddOcr.getImgCode(imgByte) : null;
				if (imgCode == null || imgCode.length() != 4) {
					imgElement = driver.findElement(By.id("captcha"));
					((JavascriptExecutor) driver).executeScript("arguments[0].click();", imgElement);
					Thread.sleep(1000);
					continue;
				}
				break;
			}
			if (imgCode == null || imgCode.length() != 4) {
				System.out.println("imgCode=" + imgCode);
				return retEntity;
			}

			// 6 输入识别出来的图形验证码
			List<WebElement> findElements = driver.findElements(By.className("popup_form_module_input"));
			WebElement web;
			String code;
			for (int index = 0; index < 4; index++) {
				web = findElements.get(index);
				code = imgCode.substring(index, index + 1);
				web.sendKeys(code);
			}
			Thread.sleep(500);

			// 7 点击获取验证码
			Thread.sleep(500);
			WebElement getCodeElement = driver.findElement(By.id("sendVcode"));
			getCodeElement.click();
			Thread.sleep(1000);
			String msg = getCodeElement.getText();
			if (msg == null) {
				return retEntity;
			}
			retEntity.setMsg(msg);
			if (msg.contains("秒后重发短信")) {
				retEntity.setRet(0);
			}
			return retEntity;
		} catch (Exception e) {
			System.out.println("phone=" + phone + ",e=" + e.toString());
			for (StackTraceElement ele : e.getStackTrace()) {
				System.out.println(ele.toString());
			}
			return null;
		} finally {
			driver.manage().deleteAllCookies();
		}
	}

2 获取图形验证码

java 复制代码
public String getImgCode(byte[] bigImage) {
		try {
			if (ddddUrl == null) {
				System.out.println("getImgCode() ddddUrl=" + ddddUrl);
				return null;
			}
			int len = (bigImage != null) ? bigImage.length : -1;
			if (len < 0) {
				System.out.println("getImgCode() len=" + len);
				return null;
			}

			long time = (new Date()).getTime();
			HttpURLConnection con = null;
			String boundary = "----------" + String.valueOf(time);
			String boundarybytesString = "\r\n--" + boundary + "\r\n";
			OutputStream out = null;

			URL u = new URL(ddddUrl);
			con = (HttpURLConnection) u.openConnection();
			con.setRequestMethod("POST");
			con.setConnectTimeout(10 * 1000);
			con.setReadTimeout(10 * 1000);
			con.setDoOutput(true);
			con.setDoInput(true);
			con.setUseCaches(true);
			con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
			out = con.getOutputStream();
			out.write(boundarybytesString.getBytes("UTF-8"));
			String paramString = "Content-Disposition: form-data; name=\"image\"; filename=\"" + "bigNxt.gif" + "\"\r\n";
			paramString += "Content-Type: application/octet-stream\r\n\r\n";
			out.write(paramString.getBytes("UTF-8"));
			out.write(bigImage);

			String tailer = "\r\n--" + boundary + "--\r\n";
			out.write(tailer.getBytes("UTF-8"));
			out.flush();
			out.close();

			StringBuffer buffer = new StringBuffer();
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			String temp;
			while ((temp = br.readLine()) != null) {
				buffer.append(temp);
			}
			String ret = buffer.toString();
			if (ret.length() < 1) {
				System.out.println("getImgCode() ddddUrl=" + ddddUrl + ",len=" + len + "->ret=" + buffer.toString());
			}
			return buffer.toString();
		} catch (Throwable e) {
			logger.error("getImgCode() ddddUrl=" + ddddUrl + ",e=" + e.toString());
			return null;
		}
	}

3 测试返回结果:

4 测试报告 :

二丶结语

北交所着眼首都要素市场体系建设,通过设立中国技术交易所、北京金融资产交易所、北京绿色交易所、北京软件和信息服务交易所、北京电力交易中心等专业交易平台和北京登记结算有限公司等支撑服务机构,搭建了集团化运营架构,持续提升流转和融资两大核心功能,积极服务国家战略和首都经济高质量发展。

作为北京政府事业单位,面向产权交易基础业务,技术实力雄厚, 采用的却还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。

比如:" 需求这么赶,当然是先实现功能啊 "," 业务量很小啦,系统就这么点人用,不怕的 " , " 我们怎么会被盯上呢,不可能的 "等等。

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

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

戳这里→康康你手机号在过多少网站注册过!!!

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

>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》

相关推荐
效率客栈老秦7 分钟前
Python Trae提示词开发实战(8):数据采集与清洗一体化方案让效率提升10倍
人工智能·python·ai·提示词·trae
小和尚同志12 分钟前
虽然 V0 很强大,但是ScreenshotToCode 依旧有市场
人工智能·aigc
HyperAI超神经16 分钟前
【vLLM 学习】Rlhf
人工智能·深度学习·学习·机器学习·vllm
芯盾时代20 分钟前
石油化工行业网络风险解决方案
网络·人工智能·信息安全
线束线缆组件品替网20 分钟前
Weidmüller 工业以太网线缆技术与兼容策略解析
网络·人工智能·电脑·硬件工程·材料工程
未来之窗软件服务21 分钟前
服务器运维(二十三) 服务器安全探针封装—东方仙盟练气期
安全·仙盟创梦ide·东方仙盟·安全探针
lambo mercy26 分钟前
深度学习3:新冠病毒感染人数预测
人工智能·深度学习
Echo_NGC223730 分钟前
【神经视频编解码NVC】传统神经视频编解码完全指南:从零读懂 AI 视频压缩的基石
人工智能·深度学习·算法·机器学习·视频编解码
摆烂咸鱼~43 分钟前
机器学习(10)
人工智能·机器学习·支持向量机
数据皮皮侠AI1 小时前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节