【映客直播-注册/登录安全分析报告】

前言

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

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

一、 映客直播 PC 注册入口

简介: 映客直播是一款具有广泛影响力的实时视频社交媒体平台,映客直播于2015年5月正式上线,当时,移动互联网发展迅速,智能手机普及,用户对实时视频互动的需求增加,映客抓住了这一机遇,迅速在市场中占据一席之地。
定位:作为中国第一家实时视频社交媒体,映客直播旨在通过视频直播的方式满足用户的社交需求,提供一种全新的交友和互动方式。

在这里插入图片描述

二丶 安全分析:

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

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

1. 模拟器交互


private OcrClientDddd ddddOcr = new OcrClientDddd();private static String INDEX_URL = "https://pay.busi.inke.cn/?cc=TG6001";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {RetEntity retEntity = new RetEntity();try {driver.get(INDEX_URL);// 注册driver.findElement(By.xpath("//span[@class='regist']")).click();// 1 输入手机号WebElement phoneElement = ChromeDriverManager.waitElement(driver, By.name("phone"), 1);phoneElement.sendKeys(phone);// 2 获取图形验证码Thread.sleep(1 * 1000);String imgCode = null, imgUrl;byte[] imgByte = null;WebElement imgElement = driver.findElement(By.className("img_code"));for (int i = 0; i < 3; i++) {imgUrl = imgElement.getAttribute("src");imgByte = (imgUrl != null) ? GetImage.callJsByUrl(driver, imgUrl) : null;int len = (imgByte != null) ? imgByte.length : 0;imgCode = (len > 500) ? ddddOcr.getImgCode(imgByte) : null;boolean rcode = (imgCode != null && imgCode.length() >= 4) ? DigitFormat.isRcode(imgCode) : false;if (!rcode) {imgElement.click();Thread.sleep(1 * 1000);}}if (imgCode == null || imgCode.length() < 4) {System.out.println("imgCode=" + imgCode);return retEntity;}// 3 输入识别出来的图形验证码WebElement codeInputElement = driver.findElement(By.name("imgcode"));codeInputElement.sendKeys(imgCode);Thread.sleep(500);// 4 获取验证码WebElement sendElement = driver.findElement(By.xpath("//span[@class='code_btn']"));sendElement.click();Thread.sleep(1500);WebElement errElement = ChromeDriverManager.waitElement(driver, By.className("code_btn_dis"), 20);String gtInfo = (errElement != null) ? errElement.getText() : "";retEntity.setMsg("imgCode:" + imgCode + "->" + gtInfo);if (gtInfo != null && gtInfo.contains("s")) {retEntity.setRet(0);ddddOcr.saveFile("InKe", imgCode, imgByte);return retEntity;}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 {if (driver != null)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("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;}}

4. 图形OCR识别结果:

在这里插入图片描述

5. 测试返回结果:

在这里插入图片描述

三 丶测试报告 :

在这里插入图片描述

四丶结语

映客直播是一款具有广泛影响力的实时视频社交媒体平台,映客直播于2015年5月正式上线,当时,移动互联网发展迅速,智能手机普及,用户对实时视频互动的需求增加,映客抓住了这一机遇,迅速在市场中占据一席之地。

定位:作为中国第一家实时视频社交媒体,映客直播旨在通过视频直播的方式满足用户的社交需求,提供一种全新的交友和互动方式。
作为知名的视频直播平台,拥有雄厚的技术研发实力, 技术实力也应该不错,但采用的还是老一代的图形验证码已经落伍了, 用户体验一般,容易被破解, 一旦被国际黑客发起攻击,将会对老百姓形成骚扰,影响声誉。

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

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

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

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

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

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

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

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

相关文章

Android audio_policy_configuration.xml加载流程

目录 一、audio_policy_configuration.xml文件被加载流程 1、AudioPolicyService 创建阶段 2、createAudioPolicyManager 实现 3、AudioPolicyManager 构造 4、配置文件解析 loadConfig 5、核心解析逻辑 PolicySerializer::deserialize 二、AudioPolicyConfig类解析 1、…

使用 Docker 安装 Elastic Stack 并重置本地密码

Elastic Stack&#xff08;也被称为 ELK Stack&#xff09;是一个非常强大的工具套件&#xff0c;用于实时搜索、分析和可视化大量数据。Elastic Stack 包括 Elasticsearch、Logstash、Kibana 等组件。本文将展示如何使用 Docker 安装 Elasticsearch 并重置本地用户密码。 ###…

Unitest和pytest使用方法

unittest 是 Python 自带的单元测试框架&#xff0c;用于编写和运行可重复的测试用例。它的核心思想是通过断言&#xff08;assertions&#xff09;验证代码的行为是否符合预期。以下是 unittest 的基本使用方法&#xff1a; 1. 基本结构 1.1 创建测试类 继承 unittest.TestC…

git 版本提交规范

Git 提交规范&#xff08;Git Commit Message Convention&#xff09;是为了让项目的提交历史更加清晰、可读、便于追踪和自动化工具解析。常见的规范之一是 Conventional Commits&#xff0c;下面是一个推荐的格式规范&#xff1a; &#x1f31f; 提交信息格式&#xff08;Con…

stat判断路径

int stat(const char *pathname, struct stat *buf); pathname&#xff1a;用于指定一个需要查看属性的文件路径。 buf&#xff1a;struct stat 类型指针&#xff0c;用于指向一个 struct stat 结构体变量。调用 stat 函数的时候需要传入一个 struct stat 变量的指针&#xff0…

学习Docker遇到的问题

目录 1、拉取hello-world镜像报错 1. 检查网络连接 排查: 2. 配置 Docker 镜像加速器(推荐) 具体解决步骤: 1.在服务器上创建并修改配置文件,添加Docker镜像加速器地址: 2. 重启Docker 3. 拉取hello-world镜像 2、删除镜像出现异常 3、 容器内部不能运行ping命令 …

安宝特案例 | AR如何大幅提升IC封装厂检测效率?

前言&#xff1a;如何提升IC封装厂检测效率&#xff1f; 在现代电子产品的制造过程中&#xff0c;IC封装作为核心环节&#xff0c;涉及到复杂处理流程和严格质量检测。这是一家专注于IC封装的厂商&#xff0c;负责将来自IC制造商的晶圆进行保护、散热和导通处理。整个制程繁琐…

【Linux网络与网络编程】07.应用层协议HTTPS

HTTP 协议内容都是按照文本的方式明文传输的&#xff0c;这就导致在传输过程中出现一些被篡改的情况。HTTPS 就是在 HTTP 协议的基础上引入了一个加密层的应用层协议。 1. 基础概念 1.1 加密与解密 加密就是把明文&#xff08;要传输的信息&#xff09;进行一系列变换&#x…

【k8s】PV,PVC的回收策略——return、recycle、delete

PV 和 PVC 的回收策略主要用于管理存储资源的生命周期&#xff0c;特别是当 PVC 被删除时&#xff0c;PV 的处理方式。回收策略决定了 PV 在 PVC 被删除后的行为。 回收策略的类型 Kubernetes 提供了三种主要的回收策略&#xff0c;用于管理 PV 的生命周期&#xff1a; Reta…

2023蓝帽杯初赛内存取证-2

直接使用mimikatz插件来获取用户密码&#xff1a; vol.py --plugin/opt/volatility/plugins -f memdump.mem --profile Win7SP1x64 mimikatz 答案&#xff1a;3w.qax.com

使用dompurify修复XSS跨站脚本缺陷

1. 问题描述 漏洞扫描说有一个低危漏洞&#xff0c;容易被跨站脚本攻击XSS。 2. 使用dompurify修复 DOMPurify is a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. 简单来说&#xff0c;我们可以使用 dompurify 处理xss跨站脚本攻击。 2.…

【c语言】指针和数组笔试题解析

一维数组: //数组名a如果既不单独放在sizeof()中&#xff0c;也不与&结合&#xff0c;那么就表示数组首元素的大小 //a一般表示数组首元素地址&#xff0c;只有两种情况表示整个数组&#xff0c;sizeof(arr)表示整个数组的大小&#xff0c;&arr表示数组的地址 int a[]…

机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用

傅里叶变换在图像处理中怎么用 傅里叶变换的基本原理应用场景Python代码示例逐行解释总结傅里叶变换在图像处理中是一种重要的工具,它将图像从空间域转换到频域,从而可以对图像的频率特性进行分析和处理。傅里叶变换在图像滤波、图像增强、图像压缩和图像分析等方面都有广泛应…

深度学习与总结JVM专辑(七):垃圾回收器—CMS(图文+代码)

CMS垃圾收集器深度解析教程 1. 前言&#xff1a;为什么需要CMS&#xff1f;2. CMS 工作原理&#xff1a;一场与时间的赛跑2.1. 初始标记&#xff08;Initial Mark&#xff09;2.2. 并发标记&#xff08;Concurrent Mark&#xff09;2.3. 重新标记&#xff08;Remark&#xff09…

数据采集:AI 发展的基石与驱动力

人工智能&#xff08;AI&#xff09;无疑是最具变革性的技术力量之一&#xff0c;正以惊人的速度重塑着各行各业的格局。从智能语音助手到自动驾驶汽车&#xff0c;从精准的医疗诊断到个性化的推荐系统&#xff0c;AI 的广泛应用已深刻融入人们的日常生活与工作的各个层面。而在…

从信息泄露到内网控制

0x01 背景 之前常见用rce、文件上传等漏洞获取webshell&#xff0c;偶然遇到一次敏感信息泄露获取权限的渗透&#xff0c;简单记录一下过程。 0x02 信息泄露 发现系统某端口部署了minio服务&#xff0c;经过探测发现存在minio存储桶遍历 使用利用工具把泄露的文件全部整理一…

《门》凡是过往,皆为序曲。我们的爱,和最初一样

《门》凡是过往&#xff0c;皆为序曲。我们的爱&#xff0c;和最初一样 夏目漱石&#xff0c;本名夏目金之助&#xff0c;笔名漱石&#xff0c;日本近代作家&#xff0c;代表作有《三四郎》《门》《从此以后》《我是猫》《心》《明暗》等。 竺家荣 译 文章目录 《门》凡是过往&…

衡石ChatBI:依托开放架构构建技术驱动的差异化数据服务

在当今数字化浪潮中&#xff0c;企业对数据价值的挖掘和利用需求日益增长。BI&#xff08;商业智能&#xff09;工具作为企业获取数据洞察的关键手段&#xff0c;其技术架构的创新与发展至关重要。衡石科技的Chat BI凭借其独特的开放架构&#xff0c;在BI领域脱颖而出&#xff…

oracle中错误总结

oracle中给表起别名不能用as&#xff0c;用as报错 在 Oracle 数据库中&#xff0c;​​WITH 子句&#xff08;即 CTE&#xff0c;公共表表达式&#xff09;允许后续定义的子查询引用前面已经定义的 CTE​​&#xff0c;但 ​​前面的 CTE 无法引用后面的 CTE​​。这种设计类似…

NLP高频面试题(五十)——大模型(LLMs)分词(Tokenizer)详解

在自然语言处理(NLP)任务中,将文本转换为模型可处理的数字序列是必不可少的一步。这一步通常称为分词(tokenization),即把原始文本拆分成一个个词元(token)。对于**大型语言模型(LLM,Large Language Model,大型语言模型)**而言,选择合适的分词方案至关重要:分词的…