【万兴科技-注册_登录安全分析报告】

news2024/12/22 20:22:59

前言

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

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
    在这里插入图片描述
    所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 万兴科技 PC 注册入口

简介: AIGC软件A股上市公司万兴科技(300624.SZ),全球领先的新生代数字创意赋能者,致力于成为全世界范围内有特色、有影响力的百年软件老店。
公司以“让世界更有创意”为使命,面向全球海量新生代用户提供简单高效的数字创意软件、潮流时尚的创意资源和丰富多元的生态化服务,赋能人们在数字时代与众不同地进行创意表达,帮助每一个新生代创作者将头脑中的灵感变为可见的现实。万兴科技也是中国政府认定的“国家规划布局内重点软件企业”,跻身“德勤高科技高成长亚太区500强”、“福布斯中国最具发展潜力企业”等荣誉榜。
当前,万兴科技深耕数字创意软件领域,并面向AIGC时代深度布局,旗下已推出万兴喵影、万兴播爆、万兴录演、万兴优转等视频创意软件,SelfyzAI、Pixpic、FaceHub、AniEraser等图片创意软件,亿图图示、亿图脑图、墨刀等绘图创意软件,以及万兴PDF等文档创意软件,并推出万兴天幕音视频多媒体大模型等夯实AIGC底座。公司正以前瞻的视野推进全球化布局,在深圳设立研发总部,并在长沙、北京、杭州、郑州、温哥华、东京等地设立运营中心,业务范围遍及全球200多个国家和地区,全球累计用户逾15亿。

在这里插入图片描述

在这里插入图片描述

二丶 安全分析:

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

测试方法:
采用模拟器+OCR识别

1. 模拟器交互



		private final String INDEX_URL = "https://accounts.wondershare.cn/web/login_cn";

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

			// tab
			Thread.sleep(1000);
			WebElement tabElement = driver.findElement(By.id("tab-verify-code"));
			tabElement.click();

			// 输入手机号
			Thread.sleep(500);
			WebElement phoneElemet = driver.findElement(By.name("mobile"));
			phoneElemet.sendKeys(phone);

			// agree
			WebElement agreeElement = ChromeDriverManager.waitElement(driver, By.id("shakeDiv"), 1);
			if (agreeElement != null) {
				WebElement useElement = driver.findElements(By.tagName("use")).get(1);
				useElement.click();
			}

			// 点击发送验证码按钮
			Thread.sleep(500);
			WebElement sendElemet = driver.findElement(By.xpath("//div/span[contains(text(),'发送验证码')]"));
			if (sendElemet != null) {
				sendElemet.click();
			}
			StringBuffer sbMsg = new StringBuffer();
			int ret = isSend(driver, sbMsg);
			if (ret != 1) {
				retEntity.setMsg(sbMsg.toString());
				return retEntity;
			}

			String imgCode = null, imgSrc;
			byte[] imgByte = null;
			WebElement captchaElement = ChromeDriverManager.waitElement(driver, By.xpath("//div[@class='recapcha-dialog']"), 10);
			WebElement imgElement;
			// 2 获取图形验证码
			for (int i = 0; i < 3; i++) {
				imgElement = driver.findElement(By.xpath("//div[@class='divIdentifyingCode']/img"));
				if (imgElement == null) {
					break;
				}
				imgSrc = imgElement.getAttribute("src");
				imgByte = (imgSrc != null) ? GetImage.imgStrToByte(imgSrc) : null;
				int len = (imgByte != null) ? imgByte.length : 0;
				imgCode = (len > 0) ? ddddOcr.getImgCode(imgByte) : null;
				imgCode = DigitFormat.getDigit(imgCode);
				if (imgCode != null && imgCode.length() >= 4) {
					break;
				}

				driver.findElement(By.className("change-one")).click();
				Thread.sleep(1 * 1000);
			}

			if (imgCode == null || imgCode.length() < 1) {
				System.out.println("imgCode=" + imgCode);
				return retEntity;
			}

			// 3 输入识别出来的图形验证码
			WebElement codeInElement = captchaElement.findElement(By.tagName("input"));
			codeInElement.sendKeys(imgCode);

			WebElement confirmElement = captchaElement.findElement(By.xpath("//span[contains(text(),'确定 ')]"));
			confirmElement.click();
			Thread.sleep(1000);

			ret = isSend(driver, sbMsg);
			retEntity.setMsg(sbMsg.toString());
			if (ret == 0) {
				retEntity.setRet(0);
				ddddOcr.saveFile(this.getClass().getSimpleName(), imgCode, imgByte);
			}
			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. 获取图形验证码


public static byte[] callJsById(WebDriver driver, String id) {
		return callJsById(driver, id, null);
	}

	public static byte[] callJsById(WebDriver driver, String id, StringBuffer base64) {
		String js = "let c = document.createElement('canvas');let ctx = c.getContext('2d');";
		js += "let img = document.getElementById('" + id + "'); /*找到图片*/ ";
		js += "c.height=img.naturalHeight;c.width=img.naturalWidth;";
		js += "ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);";
		js += "let base64String = c.toDataURL();return base64String;";
		String src = ((JavascriptExecutor) driver).executeScript(js).toString();
		String base64Str = src.substring(src.indexOf(",") + 1);
		if (base64 != null) {
			base64.append(base64Str);
		}
		byte[] vBytes = (base64Str != null) ? imgStrToByte(base64Str) : null;
		return vBytes;
	}


3.图形验证码识别(Ddddocr)


public String getImgCode(byte[] bigImage) {
		try {
			if (ddddUrl == null) {
				System.out.println("ddddUrl=" + ddddUrl);
				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(10000);
			con.setReadTimeout(10000);
			con.setDoOutput(true);
			con.setDoInput(true);
			con.setUseCaches(true);
			con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

			out = con.getOutputStream();

			if (bigImage != null && bigImage.length > 0) {
				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("ddddUrl=" + ddddUrl + " ret=" + buffer.toString());
			}
			return buffer.toString();
		} catch (Throwable e) {
			logger.error("ddddUrl=" + ddddUrl + ",e=" + e.toString());
			return null;
		}
	}
	

	public void saveFile(String factory, String imgCode, byte[] imgByte) {
		try {
			String basePath = ConstTable.codePath + factory + "/";
			File ocrFile = new File(basePath + imgCode + ".png");
			FileUtils.writeByteArrayToFile(ocrFile, imgByte);
		} catch (Exception e) {
			logger.error("saveFile() " + e.toString());
		}
	}


4. 图形OCR识别结果:

在这里插入图片描述

5. 测试返回结果:

在这里插入图片描述

三 丶测试报告 :

在这里插入图片描述

四丶结语

AIGC软件A股上市公司万兴科技(300624.SZ),全球领先的新生代数字创意赋能者,致力于成为全世界范围内有特色、有影响力的百年软件老店。万兴科技深耕数字创意软件领域,并面向AIGC时代深度布局,旗下已推出万兴喵影、万兴播爆、万兴录演、万兴优转等视频创意软件,SelfyzAI、Pixpic、FaceHub、AniEraser等图片创意软件,亿图图示、亿图脑图、墨刀等绘图创意软件,以及万兴PDF等文档创意软件。作为新生代数字创意上市公司, 技术实力也应该不错,但采用的还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2229459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

duilib 进阶 之 TileListBox 列表

目录 一、TileListBox 1、样式 1)、整体列表分列设置 2)、列表项样式设置 3)、选中后出现√号,horver时 出现边框色 的实例 2、代码 1)、普通动态添加列表项 2)、列表项样式中有自定义控件时 3)、获得选中项 一、TileListBox Tile [taɪl] ,瓦片 棋子 Ti…

专线物流公共服务平台:数据驱动,标准引领,共创金融双赢新时代

专线物流公共服务平台&#xff1a;数据驱动&#xff0c;标准引领&#xff0c;共创金融双赢新时代 在当今这个数据驱动、标准引领、金融赋能的经济发展新时代&#xff0c;专线物流作为商贸流通领域的重要一环&#xff0c;正面临着前所未有的机遇与挑战。为应对复杂多变的市场环…

日本Harmonic行星减速机HPG系列 薄壁弹性齿轮技术实现低背隙控制

科技飞速发展&#xff0c;工业领域对于设备的精度和刚性要求越来越高。日本Harmonic Drive Systems 公司凭借其在精密传动领域的深厚积累与不断创新&#xff0c;成功开发出一款具有高精度、高刚性的伺服电机用行星减速机 ——HPG系列&#xff0c;为众多行业带来了全新的精密传动…

win10系统cad2007安装提示缺少net framework 3.5安装错误怎么修复

浏览器地址栏输入www.dnz9.com远程解决netframework问题 由于AutoCAD 2007是一款比较老的软件&#xff0c;它可能与最新的Windows操作系统存在兼容性问题。所以我们在安装的cad2007的时候会提示“未安装net缺少该组件时不能安装”。在Windows 10上安装AutoCAD 2007时遇到缺少.N…

Flash的语音ic型号有哪些?

深圳唯创知音电子有限公司在语音技术领域具有深厚的积累&#xff0c;其Flash语音IC产品凭借高性能和广泛的应用领域&#xff0c;在市场上占据了一席之地。以下是对该公司Flash语音IC产品的详细介绍&#xff1a; 一、产品概述 Flash语音IC是一种采用Flash存储技术的语音芯片&…

我在命令行下学日语

同一个动作重复 300 遍&#xff0c;肌肉就会有记忆&#xff0c;重复 600 遍&#xff0c;脊柱就会有记忆&#xff0c;学完五十音图不熟练&#xff0c;经常遗忘或者要好几秒才想得起来一个怎么办&#xff1f;没关系&#xff0c;我做了个命令行下的小游戏 KanaQuiz 来帮助你记忆&a…

【GESP】C++三级练习BCQM3091,选择题判定

GESP三级字符串string和一级知识点if-else分支语句练习&#xff0c;非常基础&#xff0c;对于我孩子来说练习重点在一级部分&#xff0c;字符串只是碰巧遇到了。 题目题解详见&#xff1a;https://www.coderli.com/gesp-3-bcqm3091/ 【GESP】C三级练习BCQM3091&#xff0c;选…

Vue前端开发:事件绑定方式

事件定义 在Vue中&#xff0c;当一个元素通过使用v-on或语法糖指令绑定某个事件后&#xff0c;则完成了事件被定义的过程&#xff0c;在这定义的过程中&#xff0c;指令的后面是定义事件的名称&#xff0c;等号的后面是事件被触发后执行的函数&#xff0c;当然&#xff0c;也可…

PHP + Windows小皮面板 + VScode 安装教程

目录 1. 小皮面板安装包 下载 2、配置MySQL 可以在cmd命令框中使用 3. VScode安装 如有错误&#xff0c;烦请批评指正 1. 小皮面板安装包 下载 官方地址https://old.xp.cn/download.html 下载完后&#xff0c;一路next&#xff0c;文件路径自定义 2、配置MySQL 可以在cm…

【小白学机器学习29】 概率统计与图形 ( hist, bar, pie , box ,scatter ,line)

目录 1 频度/次数 1.1 频度统计表&#xff1a;频度分布表 1.2 频数分布图直方图 histogram / hist 1.3 对比&#xff0c;柱状图 bar graph /column chart 2 饼图 pie chart 2.1饼图特点 3 南丁格尔玫瑰图 4 茎叶图 stem-and-leaf display 5 箱型图 box plot 6 …

ssm基于web的素材网的设计与实现+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 摘要 I Abstract II 1绪论 1 1.1研究背景与意义 1 1.1.1研究背景 1 1.1.2研究意义 1 1.2国内外研究…

QT 跨平台优势独特,效果实例设计精彩呈现

QT 的跨平台优势确实独特而显著。它能够在不同的操作系统上实现一致的用户体验&#xff0c;无论是 Windows、Linux 还是 macOS。在效果实例设计中&#xff0c;QT 可以展现出精美的界面和流畅的交互。比如&#xff0c;一个基于 QT 开发的图形设计软件&#xff0c;在各个平台上都…

GXYCTF2019:gakki

把题目给的附件解压后给了张图片&#xff0c;顺带着瞟一眼属性&#xff0c;没有值得注意的 binwalk检测一手&#xff0c;看见有个rar压缩包 提取出来的压缩包是有密码的&#xff0c;但是题目并没有给出获取密码的途径&#xff0c;所以先爆破试试&#xff0c;用最常用的四位数爆…

从0开始搭建一个生产级SpringBoot2.0.X项目(六)RestTemplate调用第三方接口

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot使用RestTemplate由服务端向外发起网络请求 一、将RestTemplate配置初始化为一个Bean 修改RestTemplate默认的客户端&#xff0c;例如将其改成HttpClient客户端 package com.murg.bootdemo.…

Cyber​​Panel filemanager/upload 远程命令执行漏洞复现

0x01 产品简介 CyberPanel是一个开源的Web控制面板,它提供了一个用户友好的界面,用于管理网站、电子邮件、数据库、FTP账户等。CyberPanel旨在简化网站管理任务,使非技术用户也能轻松管理自己的在线资源。 0x02 漏洞概述 该漏洞源于filemanager/upload接口未做身份验证和…

Qt开发————网络编程

目录 Socket套接字 IP地址 端口号 IP地址与端口号的组合 MAC地址的特征 MAC地址的作用 重要性 例子 TCP/UDP协议 TCP UDP 网络编程1.0-----网络与通信介绍_计算机网络与通信网络csdn-CSDN博客 Socket套接字 IP地址 IP地址&#xff08;Internet Protocol Address&…

Spring Cloud Sleuth(Micrometer Tracing +Zipkin)

分布式链路追踪 分布式链路追踪技术要解决的问题&#xff0c;分布式链路追踪&#xff08;Distributed Tracing&#xff09;&#xff0c;就是将一次分布式请求还原成调用链路&#xff0c;进行日志记录&#xff0c;性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节…

ARM base instruction -- bic

Bitwise Bit Clear (shifted register) performs a bitwise AND of a register value and the complement of an optionally-shifted register value, and writes the result to the destination register. 位清除&#xff08;移位寄存器&#xff09;执行寄存器值与可选移位寄存…

【动手学运动规划】 3.3 确定性采样:基于控制空间采样

要往前走&#xff0c;就得先忘掉过去。 —《阿甘正传》 &#x1f3f0;代码及环境配置&#xff1a;请参考 环境配置和代码运行! 确定性采样运动规划是一种采用确定性采样策略进行运动规划的方法。它通过按照预定规则生成采样点来构建解空间&#xff0c;并用于后续的路径搜索或…

深入理解Java虚拟机(五)

介绍对象的标记算法及引用详解 1、引用计数器 引用计数器在对象中添加一个引用计数器&#xff0c;当一个地方引用的时候&#xff0c;计数器1&#xff0c;当引用失效时&#xff0c;计数器值就-1。 但是在Java里面存在对象循环引用&#xff1a;objA 和 objB都有字段instance&a…