0x00 前言
在 OSINT 信息收集时,我使用到了Sherlock这款工具,可以根据用户名到各个社交平台检索信息,找到存在的社交账号。Sherlock 是一个很不错的工具,但在使用过程中也发现了其存在一些短板:
- 仅在各个平台上搜索相同的用户名。
- 如果用户在不同平台使用不同的用户名,可能会遗漏账号。
- 如果多个无关用户共享相同的用户名,可能会错误地包含这些账号。
考虑到现在很多社交平台允许用户绑定其他社交账号,有很多也是公开在用户主页的,于是我打算自己开发一个枚举账号的工具,重点聚焦搜寻这些相互关联的社交账号,通过深度搜索绑定的账号,挖掘更多潜在的信息。这样一来,可以有以下的优势:
- 搜索到的关联账号与对应用户的关系有着高度确定性,可减少错误判断
- 通过关联账号递归搜索更多账号,可以发现通常更为隐蔽的账号信息
说干就干,于是我开发了————Linkook:https://github.com/JackJuly/linkook
0x01 工具介绍
Linkook 是一款 OSINT 工具,可通过单一用户名在多个社交平台中发现相互关联的社交账户及其关联邮箱。它还支持将收集到的关联信息导出为适用于 neo4j 的格式,以便进行可视化分析。
主要功能
- 通过给定的用户名在多个社交平台中搜索枚举社交账号
- 进一步检索相互关联的其他社交账号、用户名、Email 等
- 可使用 HudsonRock’s Cybercrime Intelligence Database,查询关联的 Email 是否受到网络犯罪和信息窃取的影响
- 支持将扫描结果导出为适配 neo4j 的 JSON 数据格式,可使用 neo4j 可视化展示结果,方便分析用户名、账号和邮箱之间的关联,能够更好地筛选真正相关的账号并过滤无关信息。
0x02 安装使用
可通过pip
或pipx
直接安装
pipx install linkook
通过以下命令运行
linkook {username}
用法
--show-summary
- 选择是否展示扫描结果的总结
--concise
- 选择是否简洁显示输出内容
--check-breach
- 使用 HudsonRock’s Database,查询获取到的 Email 是否受到网络犯罪和信息窃取的影响。如果发现存在信息泄漏,则在输出显示时,Email 会标识为红色,并提示 (breach detected),在 Scan Summary 也会列出所有检测到的 Emails。
...
Found Emails: notbreached@mail.com, breached@mail.com(breach detected)
...
...
========================= Scan Summary =========================
...
Breached Emails: breached@mail.com
--neo4j
-
将查询结果导出为支持 neo4j 数据库导入的 JSON 格式。输出结果为
neo4j_export.json
-
在 neo4j 中,使用APOC插件将 JSON 数据导入。以下为导入数据的Cypher代码,运行成功后会返回导入节点数和导入关系数。
-
使用
MATCH (n) RETURN n
查看所有结果及关联情况。
CALL apoc.load.json("file:///neo4j_export.json") YIELD value
CALL {
WITH value
UNWIND value.nodes AS node
CALL apoc.create.node(
node.labels,
apoc.map.merge({ id: node.id }, node.properties)
) YIELD node AS createdNode
RETURN count(createdNode) AS nodesCreated
}
CALL {
WITH value
UNWIND value.relationships AS rel
MATCH (startNode {id: rel.startNode})
MATCH (endNode {id: rel.endNode})
CALL apoc.create.relationship(startNode, rel.type, {}, endNode) YIELD rel AS createdRel
RETURN count(createdRel) AS relsCreated
}
RETURN nodesCreated, relsCreated;
其他使用选项具体可参考GitHub。
参与贡献
工作原理
Linkook 根据预设的站点扫描的配置文件 provider.json
逐个对社交平台进行扫描,其会做以下检查:
- 根据用户名判断该社交平台是否存在该账号
- 如果存在账号,并且社交平台是可以关联其他账号的,则会在返回结果中使用
regex
搜索其他社交账号 - 如果存在账号,默认搜索用户主页是否存在 Email 信息。如果存在 Email,则可进一步请求 HudsonRock’s Database
- 在搜索到的关联账号中,如果对应的社交平台也支持关联,则会将新发现的账号加入扫描队列
Linkook 依赖于 provider.json
文件,该文件包含需要搜索的网站列表。可以通过添加新网站来扩展工具的搜索能力,这是当前最需要贡献的部分。站点的基本格式如下:
"Website Name": {
"mainUrl": "https://www.website.com",
"profileUrl": "https://www.website.com/profile/^USER^",
"queryUrl": "https://www.website.com/api/user",
"regexUrl": "https://(?:www.|m.)?website.com/(?:user/|profile/|@)^USER^",
"keyword": {
"Match": ["followers", "following"],
"notMatch": ["User does not exist"]
},
"isUserId": true,
"isConnected": true,
"hasEmail": false
}
具体贡献文档可以参考 GitHub CONTRIBUTING 页面。
使用调研
可以参与我们的使用反馈调研,或在 Discussion 中留下意见建议。
我将持续优化和更新 Linkook 工具,希望这个工具能够更加好用也更加流行,同时欢迎更多的贡献者可以参与进来。☀️