文章总结: 本文详细介绍了邮件钓鱼攻击中OSINT信息收集的四步法:域名发现与邮件系统指纹识别、邮箱枚举、GitHub代码泄露扫描和文档元数据提取。重点阐述了精准情报对钓鱼成功率的关键作用,并提供了theHarvester、LinkedIn2username等实用工具的操作方法和不同邮件系统的攻击策略差异。文档包含具体代码示例和实战案例,具有较高可操作性。 综合评分: 85 文章分类: 渗透测试,社会工程学,安全意识,红队,OSINT
邮件钓鱼免杀完全指南(2026 实战版)· 二、OSINT 信息收集四步法
原创
IceByte IceByte
IceByte-Sec
2026年5月16日 22:51 内蒙古
在小说阅读器读本章
去阅读
系列说明:本文是《邮件钓鱼免杀完全指南(2026 实战版)》系列的第二篇。上篇建立了全链路攻击视野,本篇深入攻击链最前端——如何利用开源情报(OSINT)在不动声色间获取目标企业的完整邮箱清单和人员画像。
前言:为什么 OSINT 是钓鱼攻击的”七寸”?
大多数钓鱼攻击失败,不是因为载荷不够先进,而是因为发错了人。
- 把财务诈骗邮件发给实习生 → 被直接忽略
- 把 IT 钓鱼邮件发给 HR → 话题不对,警觉性高
- 用采购话术发给没有采购权限的员工 → 打开率极低
精准的 OSINT 信息收集,能让攻击者将有限的钓鱼邮件配额(企业邮件网关通常限制每小时发送量)用于最高价值目标。OSINT 的质量直接决定了钓鱼攻击的成功率。
根据 2025 年 Cozy Bear(APT29)攻击 Hydro-Québec 的事件复盘,攻击者花费了超过 3 周时间进行前期情报收集,最终针对 14 名高价值目标发送高度个性化钓鱼邮件,成功率 100%。
第一步:域名发现与邮件系统指纹识别
1.1 提取企业邮箱域名
大多数企业的公开邮箱后缀可以通过以下途径获取:
方法 A:企业官网”联系我们”页面
几乎每家企业官网都有”联系我们”或”商务合作”页面,通常会列出类似 [email protected] 或 [email protected] 的联系方式。这就是企业的主邮箱域名。
方法 B:招聘信息挖掘
企业在智联招聘、BOSS 直聘、LinkedIn Jobs 发布的职位中,通常会留下 [email protected] 或 [email protected]。这类邮箱的域名通常是企业统一使用的。
方法 C:WHOIS 历史记录
有时企业更换过邮箱域名(如从 company.net 迁移到 company.com),旧的 WHOIS 记录或历史 DNS 解析记录中可能留有痕迹。可以使用 SecurityTrails 或 ViewDNS 查询历史 DNS 记录。
1.2 MX 记录分析(判断邮件系统类型)
获取域名后,第一步是通过 MX 记录判断目标使用的邮件系统——这决定了后续的投递策略。
# 查询 MX 记录
$ dig MX target-company.com +short
# 常见返回结果及其含义:
0 target-company-com.mail.protection.outlook.com. # → Microsoft Defender for Office 365
10 inbound.mailguard.com.au. # → MailGuard(澳洲常用 SEG)
1 aspmx.l.google.com. # → Google Workspace
10 mx1.coremail.cn. # → Coremail(中国企业常用)
0 target-company-com.mxrecord.io. # → Mimecast
不同邮件系统的攻击策略差异:
| 邮件系统 | 绕过难度 | 典型弱点 | 推荐手法 | | — | — | — | — | | Microsoft Defender | ⭐⭐⭐⭐ | 用户安全意识高;沙箱强 | EchoSpoofing / 被入侵域名代发 | | Google Workspace | ⭐⭐⭐ | DKIM 配置复杂易出错 | SPF 绕过 / 弱 DMARC 策略 | | Coremail(中国) | ⭐⭐ | 已知漏洞多(CVE-2023-46809 等) | 直接利用 Coremail 漏洞 | | Mimecast | ⭐⭐⭐⭐ | 附件沙箱极强 | HTML Smuggling(网关视角无害) |
1.3 自动化域名发现脚本
以下是一个简单的 Python 脚本,可以批量从企业官网抓取邮箱域名:
import requestsimport refrom urllib.parse import urljoin, urlparse
def extract_emails_from_url(url): """从指定 URL 页面提取邮箱地址和域名""" try: r = requests.get(url, timeout=10, headers={'User-Agent': 'Mozilla/5.0'}) r.raise_for_status() # 匹配邮箱正则 emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', r.text) return emails except Exception as e: print(f"[-] 无法访问 {url}: {e}") return []
def discover_email_domain(company_name, website): """自动化发现企业邮箱域名""" parsed = urlparse(website) base = f"{parsed.scheme}://{parsed.netloc}"
pages_to_check = [ base, urljoin(base, '/contact'), urljoin(base, '/contact-us'), urljoin(base, '/about'), urljoin(base, '/team'), ]
all_emails = [] for page in pages_to_check: emails = extract_emails_from_url(page) all_emails.extend(emails)
# 提取独特域名 domains = set(email.split('@')[1] for email in all_emails) return list(domains), all_emails
# 使用示例domains, emails = discover_email_domain("ExampleCorp", "https://example.com")print(f"[+] 发现域名: {domains}")print(f"[+] 发现邮箱: {emails[:5]}") # 只打印前 5 个
第二步:邮箱枚举(Email Enumeration)
确认域名后,下一步是批量收集该域名下的有效邮箱地址。
2.1 theHarvester:最强大的多源邮箱枚举工具
theHarvester 是 Kali Linux 内置的 OSINT 工具,支持从 50+ 个数据源 批量收集邮箱、子域名、虚拟主机等信息。
安装:
$ pip3 install theHarvester# 或者从 GitHub 克隆最新版$ git clone https://github.com/laramies/theHarvester.git$ cd theHarvester && pip3 install -r requirements.txt
基础用法:
# 从所有数据源搜索目标域名$ theHarvester -d target-company.com -b all
# 指定特定数据源(速度更快)$ theHarvester -d target-company.com -b google,bing,linkedin,hunter
# 限制结果数量(避免被目标发现)$ theHarvester -d target-company.com -b google,bing -l 100
# 输出到文件(XML/JSON/HTML)$ theHarvester -d target-company.com -b all -f results.html
输出示例(部分):
[*] 开始搜索 target-company.com
[*] 搜索引擎结果:[+] 找到 23 个邮箱地址:[email protected]@[email protected]@[email protected]...
[+] 找到 8 个子域名:------------------------mail.target-company.comvpn.target-company.comoa.target-company.com...
[+] 找到 3 个虚拟主机:------------------------184.23.45.67:8080...
theHarvester 的 50+ 数据源分类:
| 类型 | 代表数据源 | 特点 | | — | — | — | | 搜索引擎 | Google、Bing、Baidu、DuckDuckGo | 覆盖广,但结果重复率高 | | 商业平台 | Hunter.io、Clearbit、EmailValidator | 数据质量高,但需 API Key | | 代码仓库 | GitHub、GitLab、Bitbucket | 可发现开发者邮箱 + 代码泄露 | | 社交平台 | LinkedIn、Twitter、Reddit | 需要登录,部分数据需付费 | | DNS 服务 | DNSDumpster、SecurityTrails | 发现子域名和 MX 记录 | | 泄露数据库 | HaveIBeenPwned、LeakCheck | 历史泄露数据,可能已失效 |
2.2 LinkedIn 员工信息挖掘
LinkedIn 是获取企业员工姓名和职级的最精准来源。问题是 LinkedIn 有严格的反爬虫机制,直接爬取会被封号。
方法 A:linkedin2username.py
这是一款专为 OSINT 设计的工具,可以通过 LinkedIn 企业页面批量提取员工姓名,并自动生成常见邮箱格式(如 [email protected])。
$ git clone https://github.com/initstring/linkedin2username.git$ cd linkedin2username$ pip3 install -r requirements.txt
# 使用你的 LinkedIn 账号登录(需要有效的 LinkedIn 账号)$ python3 linkedin2username.py -c target-company -n 50
输出示例:
[+] 找到 47 个员工:------------------------Zhang San (Senior Manager, IT Department)Li Si (HR Director)Wang Wu (CFO)...
[+] 生成可能的邮箱格式:[email protected]@[email protected]...
方法 B:CrossLinked
更先进的 LinkedIn 爬虫,利用 Google 搜索引擎间接获取 LinkedIn 员工信息(绕过 LinkedIn 反爬虫):w
$ git clone https://github.com/m8sec/CrossLinked.git$ cd CrossLinked && pip3 install -r requirements.txt
$ python3 crosslinked.py -i target-company -o emails.txt
2.3 GitHub 代码泄露扫描
企业员工常将包含邮箱信息的代码推送到 GitHub(如 Git 配置、提交记录、package.json 中的 author 字段)。
工具 A:gitrob
自动扫描目标企业的 GitHub 组织,发现敏感文件和邮箱信息:
$ git clone https://github.com/michenriksen/gitrob.git$ cd gitrob && go build -o gitrob .
# 扫描目标 GitHub 组织$ ./gitrob organizations target-company
工具 B:truffleHog
专注于发现提交历史中的敏感信息(密码、API Key、邮箱):
$ pip3 install truffleHog
# 搜索 GitHub 仓库中的敏感信息$ trufflehog github --repo https://github.com/target-company/main-repo
真实案例:2024 年,某互联网大厂的运维工程师将内部自动化脚本推送到个人 GitHub 仓库,脚本中包含 [email protected]:Password123 的硬编码凭证。攻击者通过 truffleHog 扫描发现后,直接登录了企业 VPN。
2.4 文档元数据提取
企业公开发布的 PDF 报告、Word 文档、Excel 表格中,通常包含作者邮箱(存储在文件元数据的 Author 或 Last Modified By 字段)。
工具:exiftool + Metagoofil
# 使用 Metagoofil 自动化下载并分析文档元数据$ python3 metagoofil.py -d target-company.com -t doc,pdf,xls -l 50 -n 10 -o ./results/
# 输出示例:[+] 下载了 37 个文件[+] 提取到 28 个唯一邮箱:Author: [email protected] Modified By: [email protected]...
手动验证:也可以用 exiftool 直接分析单个文件:
$ exiftool downloaded_file.pdf | grep -i "author\|creator\|email"
2.5 商业平台:Hunter.io
Hunter.io 是目前最精准的邮箱枚举平台,它使用网页爬虫 + 邮件服务器验证 + 公开数据源聚合,提供极高的准确率。
免费版限制:每月 25 次查询。
API 调用示例(Python):
import requests
API_KEY = "YOUR_HUNTER_API_KEY"domain = "target-company.com"
url = f"https://api.hunter.io/v2/domain-search?domain={domain}&api_key={API_KEY}"r = requests.get(url)data = r.json()
print(f"[+] 域名: {data['data']['domain']}")print(f"[+] 发现邮箱数量: {data['data']['stats']['emails']}")
for email in data['data']['emails']: print(f" - {email['value']} ({email['type']}, 置信度: {email['confidence']}%)")
返回示例:
{ "data": { "domain": "target-company.com", "emails": [ { "value": "[email protected]", "type": "personal", "confidence": 98, "sources": [{"domain": "target-company.com", "uri": "..."}] } ], "stats": {"emails": 47} }}
提示:Hunter.io 的
confidence字段表示邮箱的置信度(0-100),建议只使用置信度 > 80 的邮箱,避免向无效邮箱发送钓鱼邮件而触发企业的异常监控。
第三步:SMTP 验证(SMTP Verification)
即使通过 OSINT 收集到了邮箱地址,也无法保证这些邮箱仍然有效(员工可能已离职、邮箱可能被停用)。直接发送钓鱼邮件到无效邮箱会触发企业的异常监控(大量退信)。
SMTP 验证的目标是在不发送真实邮件的情况下,验证邮箱的有效性。
3.1 SMTP 协议中的三个验证命令
SMTP 协议定义了三个可以用于邮箱验证的命令:
| 命令 | 全称 | 作用 | 现代服务器支持情况 |
| — | — | — | — |
| VRFY | Verify | 询问服务器”这个邮箱是否存在” | ❌ 大多数已禁用 |
| EXPN | Expand | 询问邮件组(mailing list)的成员列表 | ❌ 大多数已禁用 |
| RCPT TO | Recipient To | 在邮件发送流程中指定收件人,服务器会返回是否可接受 | ✅ 大多数仍支持 |
3.2 smtp-user-enum:三种验证模式详解
smtp-user-enum 是 Kali Linux 内置的 SMTP 用户枚举工具,支持上述三种模式的自动化验证。
安装:
$ sudo apt install smtp-user-enum# 或者从源码编译$ wget https://github.com/pentestmonkey/smtp-user-enum/archive/master.zip
模式 1:VRFY(Verify)
$ smtp-user-enum -M VRFY -u admin -t mail.target-company.com
原理:向 SMTP 服务器发送 VRFY admin 命令,如果返回 250 OK,说明邮箱存在;如果返回 550 错误,说明不存在。
问题:现代邮件服务器(Microsoft Exchange、Postfix)默认禁用 VRFY 命令,返回 500 Unrecognized command。此模式成功率极低。
模式 2:EXPN(Expand)
$ smtp-user-enum -M EXPN -u all-staff -t mail.target-company.com
原理:询问邮件组(如 [email protected])的成员列表。如果目标使用了邮件组,此模式可以一次性获取大量邮箱。
问题:同样被大多数现代邮件服务器禁用。仅在某些老旧的系统(如 Sendmail 8.x)上可能有效。
模式 3:RCPT TO(推荐)
# 单个邮箱验证$ smtp-user-enum -M RCPT -u zhangsan -t mail.target-company.com -d target-company.com
# 批量验证(从文件读取)$ smtp-user-enum -M RCPT -U emails.txt -t mail.target-company.com -d target-company.com -m 50
原理:
- 与 SMTP 服务器建立 TCP 连接(端口 25 或 587)
- 发送
HELO命令(伪造发件人域名) - 发送
MAIL FROM:<[email protected]> - 发送
RCPT TO:<[email protected]> - 如果服务器返回
250 OK→ 邮箱存在;如果返回550→ 不存在
为什么 RCPT TO 模式仍然有效?
因为 RCPT TO 是 SMTP 邮件发送流程中的必要步骤——如果禁用了这个命令的响应,邮件服务器将无法拒绝无效收件人的邮件,导致无法发送退信。因此,几乎所有邮件服务器都保留了对 RCPT TO 的响应。
批量验证的注意事项:
- 速率限制:大多数邮件服务器对单个 IP 的
RCPT TO查询频率有限制(通常 10-30 次/分钟),超出后会被暂时封禁 - 使用代理:建议配合代理池(如 TOR 或付费代理服务)进行批量验证
- 误判处理:某些邮件服务器对不存在的邮箱返回
250 OK,但实际发送时才会退信(称为”接受后丢弃”)。此类服务器的验证结果需要谨慎对待
3.3 使用 swaks 进行高级 SMTP 验证
swaks(Swiss Army Knife for SMTP)是另一个强大的 SMTP 测试工具,可以进行更精细的手动验证:
# 测试邮箱是否存在(不实际发送邮件)$ swaks --to [email protected] --server mail.target-company.com --stop-after RCPT
# 输出示例:-> RCPT TO:<[email protected]><- 250 2.1.5 Recipient OK. # ← 邮箱存在
第四步:构建人员画像(Personnel Profiling)
拥有了有效的邮箱清单后,最后一步是将这些零散的邮箱转化为可被利用的人员画像。一个完整的人员画像应包括:
- 姓名 + 职级(判断是否为高价值目标)
- 部门(判断可被利用的业务场景)
- 汇报关系(判断哪些人可以被”上级口吻”钓鱼)
- 近期动态(LinkedIn 动态、企业新闻,用于个性化话术)
4.1 职级判断
不同职级的员工对不同类型的钓鱼邮件敏感程度不同:
| 职级/岗位 | 可被利用的话术类型 | 成功率 | 推荐附件类型 | | — | — | — | — | | CEO/CFO/高管 | 并购、融资、财务审计 | ~42% | PDF(伪造审计报告) | | HR | 简历、面试通知、薪资调整 | ~35% | DOCX(伪造简历) | | IT Admin | 系统升级、VPN 配置、安全补丁 | ~28% | VHD/ISO(伪造升级包) | | 财务 | 发票、付款通知、税单 | ~38% | XLS(伪造发票) | | 普通员工 | 培训通知、团建活动、企业文化 | ~12% | 各类(效果一般) |
实战技巧:高管(C-Level)通常不直接处理邮件,而是有助理(Assistant)代为处理。针对高管的钓鱼,实际上应该发送给助理的邮箱(如
[email protected])。
4.2 部门职能分析
了解目标所在的部门,可以帮助你选择最逼真的话术和附件:
- IT 部门 → 技术类话术(”服务器漏洞补丁”、”VPN 配置文件更新”)
- HR 部门 → 人事类话术(”2026 年社保基数调整通知”、”新员工入职登记表”)
- 财务部门 → 发票类话术(”增值税专用发票”、”付款通知书”)
- 研发部门 → 代码类话术(”GitHub 安全漏洞通知”、”代码审计报告”)
4.3 社交关系图谱
某些钓鱼攻击需要伪造”内部人员”的身份(如”我是 IT 部门的张三,需要你配合升级 VPN 客户端”)。要伪造得逼真,需要了解目标企业的内部汇报关系和组织架构。
工具:Maltego
Maltego 是顶级的情报关联分析工具,可以将零散的邮箱、域名、IP、社交媒体账号转化为关系图谱:
输入: [email protected] ↓Maltego 自动关联: - 同域名下的其他邮箱(通过 Hunter.io) - 注册过的社交平台(通过 WhatCMS) - 历史密码泄露(通过 HaveIBeenPwned) - 相关联的 IP 和子域名(通过 DNS 记录) ↓输出: 完整的关系图谱(可导出为 PDF/PNG)
Maltego 使用步骤:
- 在 Maltego 中创建新图谱(Graph)
- 将收集到的邮箱逐一添加为 “Email Address” 实体
- 右键点击实体 → “Run Transform” → 选择 “To DNS Name”(解析关联域名)
- 继续运行其他 Transform(如 “To Breached Credentials”)
- 观察自动生成的关系图谱,找出关键节点(如共享密码、同一 IP 下的多个邮箱)
4.4 泄露密码交叉比对
如果目标企业的员工邮箱曾经出现在历史数据泄露事件中,攻击者可以尝试:
- 使用泄露的密码直接登录目标邮箱(如果受害者”密码复用”)
- 使用泄露的密码作为”字典”,对目标 VPN/OA 系统进行暴力破解
- 在钓鱼邮件中伪装成”密码重置通知”,诱导用户主动修改密码(从而获得新密码)
工具:EmploLeaks
专门用于搜索企业邮箱泄露记录的工具:
$ git clone https://github.com/oppai-persona/EmploLeaks.git$ cd EmploLeaks
# 搜索指定域名的历史泄露记录$ python3 emploleaks.py -d target-company.com
输出示例:
[+] 找到 12 条泄露记录:----------------------------------------Email: [email protected]: LinkedIn 2021 LeakPassword Hash: $6$salt$abcdef...Cleartext Password: Summer2023! # ← 某些泄露事件包含明文密码
⚠️ 法律风险提示:使用历史泄露密码尝试登录目标系统,在绝大多数国家和地区均属刑事犯罪(计算机欺诈与滥用法案,CFAA)。本段内容仅供企业红队在授权测试场景下参考。
总结与下篇预告
本文详细拆解了邮件钓鱼攻击链最前端的 OSINT 信息收集四步法:
- 域名发现:通过官网、招聘信息、WHOIS 历史记录提取邮箱域名,并通过 MX 记录判断邮件系统类型
- 邮箱枚举:使用
theHarvester(50+ 数据源)、linkedin2username、truffleHog、Metagoofil批量收集邮箱 - SMTP 验证:使用
smtp-user-enum(RCPT TO 模式)批量验证邮箱有效性 - 人员画像:职级判断、部门分析、社交关系图谱(Maltego)、泄露密码交叉比对
关键数据:
- 完整的 OSINT 流程可将钓鱼邮件的打开率从 12%(盲目发送) 提升至 47%(精准目标)
theHarvester在 50+ 数据源的加持下,平均可发现企业 60-80% 的员工邮箱
下一篇,我们将深入邮件钓鱼的投递阶段——绕过 SPF/DKIM/DMARC 邮件认证机制。你将学到:
- SPF 的
redirect=和include:机制差异,以及如何利用配置错误绕过 - DKIM 签名头字段(
h=参数)篡改手法详解 - DMARC
p=none/quarantine/reject的实际执行差异(为什么p=reject仍然可以被绕过) - EchoSpoofing 完整技术还原(含原始邮件头示例)
- 2026 年 Q1 新披露的 SMTP 服务器绕过漏洞详解
Ice Byte | 邮件钓鱼免杀完全指南(2026) | 转载请注明出处
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:IceByte-Sec IceByte IceByte《邮件钓鱼免杀完全指南(2026 实战版)· 二、OSINT 信息收集四步法》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论