身份证爆破
2022-11-15 12:13:47 Author: 漏洞挖掘之路(查看原文) 阅读量:104 收藏

此文章仅供用于学习研究,严禁用于非法用途,否则后果自负。

身份证结构

位数1234567-1415、161718
代表省份城市区县年月日所在地的派出所代码奇数男偶数女随机出现的校验码

1-6:地址码,常住户口所在地的行政区划代码

7-14:出生年月日

15-17:顺序码,且第17为由性别决定,男性为奇数,女性为偶数

18:校验码,将前面17位代入公式计算,结果为0-10,若为10则用x代表

举例:440106 19990101 0010

  • 44广东省,01广州市,06天河区

  • 19990101,出生年月日

  • 001,第17位为1即男性

  • 0,最后一位为校验码

注意:由于历史原因可能有些被撤销的行政区划代码,可登陆https://xingzhengquhua.bmcx.com/ 开通vip进行查询。例如:你查询的目标出生日期在90年,则可使用91年前被撤销的行政区划代码进行尝试。如果目标因为某种原因导致的更改过身份证,则可使用近年的行政区划代码进行尝试。

因该网站查询历史行政区划代码需要付费,所以帮各位整理了一份历史行政区划代码资料。

行政区划代码大全下载链接见文章底部

社工构造身份证

对目标进行信息收集,根据收集的信息进行整理,

假设收集到的信息如下:

姓名:xxx
性别:女
生日:19900909
地址:浙江省湖州市德清县

1、查询历史行政区代码

https://xingzhengquhua.bmcx.com/  在此处搜索德清县

可以看出来只有两个行政区代码,该目标的出生年份为1990,则使用最新的行政区代码330521,如果遇到目标为1982年之前出生的则使用1982年之前的行政区代码。

2、简单构造

33052119900909

到目前为止15、16、17、18不知道。

17位为女,则可能是0/2/4/6/8

18位为随机的校验码,则可能为0/1/2/3/4/5/6/7/8/9/x,共11中结果

15/16位可能是0-9,共10中结果

10*10*5*11共计5500 种结果

python脚本

生成后4位
import itertools

if __name__ == '__main__':
  sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
  check = '0123456789X' # 校验位
  other = '0123456789'   # 其它位
  nums = itertools.product(other, other, sex, check)
  cards = []
  for num in nums:
      card = "".join(num)
      cards.append(card)
  print(len(cards))
  print(cards)

生成完整的18位
import itertools

if __name__ == '__main__':
  date = input("身份证前14位: ")
  sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
  check = '0123456789X' # 校验位
  other = '0123456789'   # 其它位
  nums = itertools.product(other, other, sex, check)
  cards = []
  for num in nums:
      card = date + "".join(num)
      cards.append(card)
  print(len(cards))
  print(cards)

3、身份验证

在获取到5500个身份证号码后,可使用相关的身份验证进行验证,其中正确的概率为1/5500。

好了点到为止,具体自行研究。再次提醒该文章仅供技术参考,严禁违法违规,否则后果自负。

后六位爆破

如果需要爆破后6位,即身份证的第13~18位,那么就有10*10*10*10*10*11(最后一位有0~X共11位)种可能

  • 后6位中的第1位,即出生日期的十位,只能为0~3,即4*10*10*10*10*11

  • 而如果是针对某人而写的字典,知道目标的性别,那么第5位就可以减掉一半。男性为1/3/5/7/9,女性为0/2/4/6/8,即4*10*10*10*5*11

  • 同时,如果知道目标的出生日期(学校发的很多信息表中都会包含出生年月日等信息),即第1~2位也可以确定了。那么需要爆破的只有15~18位,即10*10*5*11=5500,这个数量级已经对于电脑来说很轻松就可以完成。

import itertools

if __name__ == '__main__':
  date = input("出生日期: ")
  date=date[6:8:1]
  sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
  check = '0123456789X' # 校验位
  other = '0123456789'   # 其它位
  nums = itertools.product(other, other, sex, check)
  cards = []
  for num in nums:
      card = date + "".join(num)
      cards.append(card)
  print(len(cards))
  print(cards)

行政区划代码大全下载

关注公众号漏洞挖掘之路

回复"*行政区划代码*"获取下载连接


文章来源: http://mp.weixin.qq.com/s?__biz=MzA5ODgwMjk3Mw==&mid=2247485091&idx=1&sn=822237e73aca34bf4b5b0c1d0c5999cb&chksm=908d4ad1a7fac3c74f9680e23dddb98f77b18f43911a340ebae6fba83225d27daeb1cd369dbb#rd
如有侵权请联系:admin#unsafe.sh