12306个人敏感信息泄露

/**************************************

/* 作者:半斤八兩

/* 博客:http://cnblogs.com/bjblcracked

/* 日期:2015-02-20 00:01

/**************************************

 

 

只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

 

当下社会发展迅速,从最初的排队购票,到电话购票,到现在的互联网购票.互联网让我们足不出户,就能购到火车票,让我们越来越便捷.但是人们往往会忽略了一个不变的定理越便捷=越危险.

在互联网上购买火车票,首先你得需要一个合法的身份证,以及12306账号,和少许的Money :)  当从网站上购票成功,可以带着身份证到临近售票厅的TVM去取票.

 

 

图中的票就是TVM机制造的.(车票来自互联网

  一眼瞟去这张票上的信息量真是巨丰富车次,始发站,终点站,开车时间,车座,票价,这些信息做为车票信息出现也能表示理解但是姓名,身份证这些信息也打印在票面上,是不是太不安全了你说打了马塞克了,没事,那二维码又是几个意思?不会是为了让我拿扫一扫关注你们铁道部吧?

 

0x1. 二维码

  二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

  在票面右下角出现的就是二维码这种二维码一般能存储1000-2000Byte数据. (字符或二进制数据.) 车票上的这个二维码不是为了让你关注他们的,而是你所持车票上所有的信息,都以Ascii格式存储在这个二维码里面你可能会问,作用是什么功能就是类似防伪标志一样那你可能又会问为什么票面上还要出现 姓名 和 身份证号这个我也没想通难道是为了让检票员肉眼检查真伪?

  火车票上的二维码,我们通过扫描软件,可以扫出一串很长的Ascii.这串Ascii是加密过的.老版本的火车票的二维码算法已经被网友公布出来了.而新版本的算法,好像还未公布.(我也真佩服那些破解二维码算法的人没有软件可以debuging,居然都能破解的出来 -_-!!! ) 既然这个二维码是用来辨真伪的,所以他们用的算法,就算再强,也肯定是可还原的.

 

0x2. 身份证

  二维码虽然是可还原的,但是没有软件,我可真没有那能力去肉眼还原.我们知道二维码上的信息十分丰富,但是那里面的信息也只是做真伪辨别用的,所以里面的加密信息,在票面上都是明文显示的.只有一个身份证号是打了马塞克的.这里面最重要的信息其实就两个,一个是姓名.一个是身份证号.我们再回头看看票面上的信息.

 

姓名:刘晴

身份证号:5201031962****0447

 

  设计者以为这样打了马赛克就安全了吗我只能说图样图森破.

  现在身份证都是18位长的(老的咱不说了.)

 

举例:

520103      1962        ****           044         7

地区码         出生年       出生月日        顺序号      crc

 

1)地区码:

1~6位为地区代码,其中12位数为各省级政府的代码,34位数为地、市级政府的代码,56位数为县、区级政府代码。例: 520103 ,其中52是贵州省 01是贵阳市 03云岩区

2)出生年:

7~10位为出生年 : 1962年出生

3)出生月日:

11~14位为出生月日  这里未知

2)顺序号:

15~17位为顺序号,是县、区级政府所辖派出所的分配码,每个派出所分配码为10个连续号码,例如“000-009”或“040-049”,其中单数为男性分配码,双数为女性分配码,如遇同年同月同日有两人以上时顺延第二、第三、第四、第五个分配码。如:007的就是个男生 而且和他同年月日生的男生至少有两个 他们的后四位是001* 和 003*  例: 044 就说明是个女生.

2)Crc效验值:

第 18 位号码是校验码,目的在于检测身份证号码的正确性,是由计算机随机产生的,所以不再是男性为单数,女性为双数。

(1)十七位数字本体码加权求和公式 

  S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和 

  Ai:表示第i位置上的身份证号码数字值(0~9) 

  Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (表示第i位置上的加权因子)

(2)计算模 

  Y = mod(S, 11)

 

(3)根据模,查找得到对应的校验码 

  Y: 0 1 2 3 4 5 6 7 8 9 10 

校验码: 1 0 X 9 8 7 6 5 4 3 2

 

  看到这里,你肯定会想,身份证里的月日不知道,不法份子拿到了也没有用.照样是安全的这样想你就大错特错了身份证里面只有月日不知道, 1年有12,每月按31天算,用计算机枚举一下就枚举出来了.不按平润月算,也不按 男生女生基偶数算,你最多也就枚举12*31=372次就能得到正确的身份证号码那么这样一来二维码就形同虚设了现在的问题就是,每枚举一次,如何效验真伪???

 

 

0x3. 12306

  这个网站可以说是一个很神奇的网站.最初的时候在这网站上可以用网名购票后来就严谨了些,但是还是被人冒名购票了如今所有的已知Bug”修复”了.直接是实名购票就是因为有了这个严谨的实名效验,我们可以理解成,我们拥有了全国人民的”身份证数据库”了我们只要把11号到1231号的身份证号码都丢进”身份证数据库”里面进行效验一下就能得到火车票本人的正确身份证号码了这样也不用麻烦的去破解晦涩难懂的二维码加密信息了.

 

0x4. 添加联系人

  首先得注册一个12306账号.(必须实名制,否则查询不了)

 

有了账号就添加联系人:刘晴

性别选择,选择(无论是从顺序号,还是名字上,都能看出是一个女生^_^)(我测试发现性别填男填女都无所谓)

然后添加身份证号码:520103196201010447

其它的不用填写了,然后直接点保存.

 

520103196201020447

520103196201030447

520103196201040447

520103196201050447

520103196201060447

 

 

 

 

这样顺序以此类推, 姓名和性别都不用改, 只更改身份证号码的月日即可.

直到添加的联系人是成功的为止.

这里添加联系人没有限制,也没有验证码,所以我们可以写个小程序,自动post. 这样就能”秒查”了.

 

 

 

显示 “待核验” 这样的表示失败了, 意思是说数据库中没有此人.

显示 “已通过” 表示数据库中找到了此人, 那么就说明有此人. 身份证就是我们填写的那个.

 

0x5. 优化身份证

  1)Crc 相信大家还没有添加几个联系人,就嫌麻烦了.更何况是添加几百个联系人. 前面我们在介绍身份证号码各位意义的时候,有说明,最后一会是crc效验,那么我们就可以通过这个crc效验,自动生成一些”正确可靠”的身份证号码,这样就能排除一部分”无效错误”的身份证号码.

  2)生日 我们再把4 6 9 11 月算上30天,这样还能优化几个  另外 润 平 2月在算一下,还能优化一个 ^_^

 

  这样通过优化之后,就能大大增加工作效率.(在实际测试中,发现,优化之后,往往只剩30个左右的有效身份证号码. 这样手动添加也不会那么麻烦了.)

 

0x6. 实践(Post 12306)

  虽然我们优化掉之后只剩30个了,但我们就是懒,我们还是嫌麻烦.那么我们就来手动Post. 因为12306 用的是Https协议的, 我们就不用socket写了,要不太麻烦了. 我们可以用webbrowser控件,或者wininte, winhttp 都行. 因为一开始我没有玩过post之类的,所以再写的时候,走了不少弯路.在这里我就大概说下流程,代码我会一块打包的,具体的,大家可以看源码.

 

  1)验证码:

https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand

 

首先从官网下载一个图片效验码到本地.得到效验码后,输入到程序里面.(验证码主要是防止机器人和黄牛 PS:在中国,这些对黄牛来说都是浮云.)

 

  2)初始化:

https://kyfw.12306.cn/otn/login/init

 

这里主要是为了下载一个JS(JavaScript)文件, 那个JS文件里面有一个随机值. 我们需要获取那个随机值. (随机值和下面一个链接一起使用)

 

  3)获取ValueKey:

https://kyfw.12306.cn/otn/dynamicJs/xxxxx

 

链接中的xxxx就是初始化JS里面的随机值. 访问此链接后会返回两个数据,其中一个是KEY,Key是直接明文返回的. 类似 Key=”xxxxxx” 另一个是Value, Value 是通过Key算出来的.

 

  4)最后一步登录

https://kyfw.12306.cn/otn/login/loginAysnSuggest

登录时Post的数据, 包括了用户名, 密码, 验证码, 以及 Key 和 Value 有了这些数据,就能正常登录了. 我一开始就在Js加解密那里卡了会. 登录成功后, 就可以添加联系人了. 添加联系人那些就很简单了, 这里就不说了, 基本上是抓下包, Post就行了. 删除也是的. 这里值得注意的是, 添加联系人,如果效验成功了,你当时是删不掉的, 只有过了半年后,才能删除. 不知道他们是搞什么GUI.

 

'total_times':'99','passenger_id_type_name':'

'total_times':'98','passenger_id_type_name':'

'total_times':'98','passenger_id_type_name':'

'total_times':'98','passenger_id_type_name':'

'total_times':'98','passenger_id_type_name':'

'total_times':'98','passenger_id_type_name':'

 

Post添加成功之后, 我们可以通过返回的 total_times 字段来判断是否审核通过.当Total_times字段等于99的时候,表示审核通过. 98表示 待审核. 我嫌麻烦, 程序里面就没有写了, 所以再添加成功之后, 需要自己到12306网站上,看哪一个身份证号是审核通过的. 如果想加到工具里面,就判断 total_times 字段就行了.

 

 

 

本文至此就差不多结束了, 也许很多人会觉得就算知道了身份证也不能怎样. 其实这也得看是什么场合,以及什么人拿到了你的身份证号.  唯一的解决办法, 要么是让火车票再改版, 直接去掉身份证号码, 或者让12306的添加联系人时, 有点限制, 比如一个号,1天只能添加2-3个, 比如一个IP1天只能添加2-3个, 比如每添加一个要等1个小时间隔,才能添加第2个, 比如每添加一个要等1周才能效验结束. 等等.

 

 

总之大家要保护好自己的隐私.不要轻信什么诈骗短信,输入了自己的身份证号.(特别是现在伪基满天飞的年代.)

 

辞马年迎羊年,祝大家2015年羊年,新年快乐.恭喜发财 :)

 

 

上传的附件
文件类型: 7z   身份证号码效验_Src.7z (2.8 KB, 55 次下载)                   [谁下载?]
文件类型: 7z   12306自动Post_Bin.7z (587.0 KB, 71 次下载)               [谁下载?]
文件类型: 7z   12306网站登录_Src.7z (13.2 KB, 53 次下载)                 [谁下载?]
文件类型: 7z   12306个人敏感信息泄露_pdf.7z (285.6 KB, 101 次下载)  [谁下载?]

posted @ 2015-02-21 10:30  半斤八兩  阅读(3432)  评论(3编辑  收藏  举报