0x01 钓鱼陷阱的布置
在一次红队评估中,我们接到了一个有趣的任务:目标是一家具有全球业务的金融科技公司。我们的任务是通过社工铓鱼攻击获取其内网访问权限。我们的第一步,是通过社工攻击制造一个看似合法的邮件,以此引诱目标点击。

攻击原理揭秘
社工铓鱼攻击的核心在于利用人类心理学的弱点,例如信任、恐惧、好奇心。通过伪装成值得信赖的来源,诱导受害者执行某些操作,例如点击链接或下载附件。在这个案例中,我们选择了发送一封伪装成公司内部邮件的消息,声称里面包含有关公司财务状况的重要报告。
环境搭建
- 域名准备:注册一个与目标公司域名相似的域名,例如,目标是fintechglobal.com,我们注册fintechg1obal.com(注意"1"与"l"的替换)。
- 邮件服务器搭建:使用Mailgun或SendGrid搭建邮件发送服务,确保我们能够发送伪造的邮件。
- C2服务器设置:搭建C2(Command and Control)服务器,用于接收被钓鱼的客户端的连接。这里我们使用的是Cobalt Strike。
- Payload生成:在Cobalt Strike中生成恶意Payload,选择使用内存加载技术以避免被常规AV检测到。
伪造邮件示例
我们设计了一封如下的邮件:
<pre><code class="language-python">import smtplib from email.mime.text import MIMEText
msg = MIMEText('尊敬的财务团队,请查收最新的财务报告:\n<a href="http://fintechg1obal.com/report">点击查看报告</a>', 'html') msg['Subject'] = '重要:最新财务报告' msg['From'] = '[email protected]' msg['To'] = '[email protected]'
with smtplib.SMTP('smtp.mailgun.org', 587) as server: server.login('user', 'password') server.sendmail(msg['From'], [msg['To']], msg.as_string())</code></pre>
代码解读:简单的Python脚本,通过SMTP发送一封HTML格式的邮件,邮件内容包含一个看似合法的链接,实际指向我们控制的域名。

0x02 流量捕获实战
接下来,我们需要确保一旦目标点击链接并下载Payload,能够顺利建立到我们的C2服务器的连接。
制作Payload
使用Cobalt Strike生成Payload,选择内存加载方式,避免写入硬盘。
<pre><code class="language-bash"># 在Cobalt Strike中生成Payload ./cobaltstrike -profiles http-profile -generate payload.exe</code></pre>
内存加载解释:通过内存加载技术,Payload不写入硬盘,而是在内存中直接执行,极大地降低了被检测的风险。
监控流量
使用Wireshark和tcpdump监控网络流量,确保我们能够捕获到从目标机器到C2服务器的连接。
<pre><code class="language-bash"># 使用tcpdump监控流量 sudo tcpdump -i eth0 host my.c2.server</code></pre>
流量捕获:通过监控流量,我们可以实时观察到目标是否连接到了我们的C2服务器,一旦连接成功,便可进一步进行内网横向移动和数据渗透。
0x03 Payload构造的艺术
在这个阶段,我们将深入探讨如何构造一个高效的Payload,以躲避常规安全软件的检测。

绕过AV技术
- 多态编码:通过使用不同的编码技术,使Payload每次生成的二进制文件都不同。
- 混淆和加壳:使用工具如Veil-Evasion进行Payload混淆,并将其加壳以增加复杂度。
- 内存加载:如前所述,避免在硬盘上留下任何痕迹。
示例代码
以下是一个使用Python构造简单多态Payload的示例:
<pre><code class="language-python">import random

def generate_payload(): shellcode = b"\x90\x90\x90..." # 假设这是我们的Shellcode encoded_shellcode = bytearray()
for byte in shellcode: encoded_shellcode.append(byte ^ random.randint(1, 255))
return bytes(encoded_shellcode)
payload = generate_payload() with open("payload.bin", "wb") as f: f.write(payload)</code></pre>
代码解读:通过随机化XOR编码,每次生成的Payload都不同,从而增加了绕过AV的能力。
0x04 防御者的反击
没有完美的攻击,只有更强的防御。在本文的最后一部分,我们讨论如何检测和防御此类社工铓鱼攻击。
检测思路
- 邮件筛查:使用SPF、DKIM、DMARC等技术来验证邮件的真实性。
- 行为分析:对于内存中的可疑行为进行监控,识别未经授权的内存操作。
- 网络流量分析:对企业网络的流量进行全面监控,识别异常的连接模式。
防御策略
- 员工培训:对员工进行安全培训,提高防范钓鱼攻击的意识。
- 多因素认证:即使攻击者获取了凭据,没有第二因素的认证也无法进行系统访问。
- 零信任架构:在网络中实施零信任策略,确保每个访问请求都需要重新验证。
0x05 个人经验分享
在多年的实战中,我发现社工铓鱼攻击的成功率不仅取决于技术,更依赖于对目标的了解和细致的准备。了解目标的组织结构、文化习惯,甚至是个别员工的兴趣爱好,都可以为攻击的成功提供额外的保障。记住,最强的攻击往往是最简单的那个,真正理解攻击者的思维,才能从根本上提升安全防护水平。
合法声明:本文所述方法仅限于授权的安全测试,学习目的在于提高对社工攻击的防御能力。未经授权进行攻击是违法行为。