发布于 

信息收集之社会人信息

1. 目标

通过目标ID获取手机号和身份证,我们需要通过公开合法的手段来获取与此ID相关的信息

特别声明:以下所有数据均为虚构,此篇文章只用于安全分享,目的是为了提高阅读者安全意识,请勿用于不合法用途。

2. 已知条件

本次信息收集通过对好兄弟的信息一个实战练习,已经获取了好兄弟的授权,但为了信息隐私所有账号都会以虚拟信息提供。

已知目标常用ID为jxxxxxxxx,通过各种搜索引擎进行对其相关信息进行一个收集。

3. 利用搜索引擎获取尽可能多的信息

  • Google

  • 百度

  • 微博

  • 抖音

  • 快手

  • 哔哩哔哩

  • 脉脉/企查查

  • 国外的社交软件

    • Twitter

    • Linkedin

    • Instagram

    • FaceBook

4. 通过邮箱获取更多信息

人们总是喜欢使用自己记得住的ID在众多媒体中留下痕迹,我们假装在搜索引擎上什么都没获取到,我们再通过枚举测试邮箱看看是否有注册APP,来确定是否有邮箱使用痕迹。

4.1 常见的邮箱

4.2 检索网站进行测试

通过邮箱或手机号查找注册过的网站:https://www.reg007.com

根据目标 ID 构造常见邮箱列表

1
2
3
4
aaa@qq.com
aaa@gmail.com
aaa@126.com
...

挨个尝试,推测出常用邮箱为 ***@163.com

image-20220917163710461

REG007 的原理很简单,输入邮箱或者手机号后,REG007 服务器会使用此邮箱尝试登录各个网站,如果返回信息里密码错误则证明此帐号存在,如为返回不存在则证明此帐号未注册。准确性不算很高,但也有一定的参考价值。

4.3 找回密码

使用各个网站的找回密码功能,查找此邮箱绑定的手机号片段

绝大多数人会使用相同的邮箱相同的手机号注册各大网站,使用目标可以在找回密码页面找到不同的手机号片段,如京东找回密码如下:

image-20220917163819668

image-20220917163833023

得知手机号片段为 133*****333,中间 5 位京东不会显示,使用同样地办法在淘宝apple携程、拉钩等网站找回密码,各个网站显示的手机号区间范围不同,测试所有网站后,获得最终得到的片段为 133-xxxx-3333

4.4 构造手机号

构造手机号,并使用运营商手机号规则筛选

手机号通讯号段可分为三个部分, 1XX-YYYY-ZZZZ

  • 第1~3位数表示电信运营商(1XX)
  • 第4~7位数表示地区号码,即归属地(YYYY)
  • 第8~11位数表示客户号码(ZZZZ)

使用每月公开的手机号码归属地信息库,根据目标常驻地,生成133段在AABB对应的地区号码手机号,共 435 个。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import (
"fmt"
"github.com/xluohome/phonedata"
)

func main() {
prefix := "133"
suffix := "3333"
var phoneList []string
for i := 0; i < 9999; i++ {
phone := fmt.Sprintf("%s%d%s", prefix, i, suffix)
pr, err := phonedata.Find(phone)
if err != nil {
fmt.Println(err)
}
if pr.City == "AA" || pr.City == "BB" {
phoneList = append(phoneList, pr.PhoneNum)
}
}
fmt.Println("AA和BB地区 133 段手机号总数为: ",len(phoneList))
}

>>> AA和BB地区 133 段手机号总和为: 435

将这435个手机号放到网上的空号检测平台,筛选是手机号是否可用。再次缩小范围。待筛选号码剩下65个

4.5 反查手机号

反查手机号,通过筛选后的手机号获取更多信息,判断和已知信息是否一致,从而找到真正的手机号

反查方法一:使用手机号反查密码。上面我们用了邮箱找回密码获得了手机号片段,换个思路,同样我们用手机号去找回密码也能获得所绑定的邮箱片段,通过对比邮箱片段和已知邮箱是否相似,来判断手机号是否正确。

反查方法二:使用支付宝转账、微信手机号加好友等来反查手机号对应帐号是否正确。可以将所有号码导入通讯录,通过支付宝、微信、脉脉…等可以读取通讯录的软件来快速筛选。

反查方法三:使用 REG007 查看此手机号注册的网站,一般而言,正确的手机号应该和邮箱注册的网站一样或类似。

这里我们通过支付宝转账获了目标的手机号13333333333,但是不幸的是姓名为三个字,最后一字为(如为两字,通过验证姓氏,可直接得知全名)。

image-20220917164125804

转账时点此验证,可以验证姓氏,这里我们用 最新中国姓氏排名 挨个验证,得到目标姓名为 王*头

image-20220917164210056

至此,我们已经知道了目标的手机号为 13333333333,姓名为 王*头,大学为CC大学2008级XX专业

根据这些信息搜索 人人知乎FacebooklinkedinQQ空间等社交网站,配合搜索过程中的获得的一些其他信息,获得目标 QQ 号为123456789,出生日期为19900101,真实姓名为王老头,出生地为BB市xx区

4.6 通过已知信息筛选身份证

18位身份证编码规则

image-20220917164259114

  • 地址码指的是公民常住户口所在县(市、镇、区)的行政区划代码,如110102是北京市西城区
  • 最后一位校验码算法为前17位数字各项加权除余所得值,前面数字固定的前提下,此数恒定不变
  • 顺序码最后一位男性为奇数、女性为偶数

前面通过支付宝找回密码,得知身份证片段为3***************4,根据目标出生地、出生日期,使用 Python 列出所有可能身份证列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# pip install id-validator
from id_validator import validator

location = "123456"
birth = "19900101"
suffix = "4"
id_cards = []

def get_seq():
for i in range(100):
for k in range(10):
if k % 2 == 0:
seq = "{}{}{}{}{}".format(location, birth, i, k, suffix)
if validator.is_valid(seq):
id_cards.append(seq)
print("验证成功的身份证数为: ", len(id_cards))

if __name__ == "__main__":
get_seq()

>>> 验证成功的身份证数为: 41

4.7 反查身份证

由于目标注册了学信网,使用和前面相同的套路,通过的找回用户名功能验证身份证是否正确。

将这 41 个号码依次使用学信网反查,最后成功锁定正确号码。

image-20220917164410957

至此,我们通过一个ID得到了目标的全部关键信息,以上所有步骤均免费公开

想要更进一部可以通过获得的目标个人信息构造密码字典进行爆破,此处就不讨论太多了。

5. 修复方案

  1. 使用不同的邮箱和ID注册不同的网站
  2. 多使用如阿里小号腾讯小号等虚拟手机号
  3. 不要在社交网站暴露太多的个人信息