type
Post
status
Published
date
slug
summary
tags
CTF
推荐
category
CTF-WP
category (1)
icon
password
comment

spring

考点: Spring Actuator heapdump 利⽤
根据 index ⻚⾯的提示可以知道为 spring actuator
参考⽂章: https://xz.aliyun.com/t/9763
访问 /actuator/env 可以发现 app.username 和 app.password 这两个环境变量
image-20231102161525273
image-20231102161525273
app.username 提示 flag 就在 app.password ⾥⾯, 但是它的 value 全是星号, 这⾥其实被 spring 给隐藏了
spring actuator 默认会把含有 password secret 之类关键词的变量的值改成星号, 防⽌敏感信息泄露
但是我们可以通过 /actuator/heapdump 这个路由去导出 jvm 中的堆内存信息, 然后通过⼀定的查询得到
app.password 的明⽂
https://github.com/whwlsfb/JDumpSpider
image-20231102161651004
image-20231102161651004
image-20231102161709707
image-20231102161709707

auth_bypass

考点: Tomcat Filter 绕过 + Java 任意⽂件下载搭配 WEB-INF ⽬录的利⽤
首先分析源码
Authfilter.java
DonloadServlet.java
根据DonloadServlet.java可以看出,代码存在任意文件下载的漏洞,但是download路由被Authfilter.java中的代码给过滤了,这边就需要对filter进行绕过,详细绕过方法可以看我另一篇博客filter设计缺陷导致的权限绕过
这边我们采用/;sac/download来进行绕过
image-20231102184632769
image-20231102184632769
接下来我们通过传入filename的参数实现任意文件下载,注意因为代码中是protected void doGet,所以我们只能用get传filename参数
根据题⽬描述, ⽹站使⽤ war 打包,关于war包的目录结构在我的WAR包的目录结构的博客里有
这边先访问web.xml文件,查看路由和类(class目录下)的映射关系。因为..被过滤了,所以根据我的filter设计缺陷导致的权限绕过这篇博客,要用url编码进行绕过
下载了一个_WEB-INF_web.xml文件,我们打开看一下
image-20231102190115686
image-20231102190115686
看到了可疑的路由/You_Find_This_Evil_Servlet_a76f02cb8422和它所对应的类com.example.demo.EvilServlet,看不懂的可以去看我的WAR包的目录结构这篇博客
接下来我们先要获取到这个类的文件,filename访问%2e%2e/WEB-INF/classes/com/example/demo/EvilServlet.class
下载得到了_WEB-INF_classes_com_example_demo_EvilServlet.class文件,用JD-GUI反编译java工具打开
得到
可以看到有命令执行,最后因为没有回显,那么我们直接post传参反弹shell即可
这边反弹shell命令要进行编码,具体看
https://www.anquanke.com/post/id/243329
https://y4er.com/posts/java-exec-command/
这边注意对echo后面的要进行编码,不然会有特殊字符
image-20231102192941821
image-20231102192941821
image-20231102192952085
image-20231102192952085
image-20231102193305647
image-20231102193305647
成功!

YourBatis

这有⼀个⼩坑, 如果 jar 包使⽤ JD-GUI 反编译的话就⽆法正常得到 UserSqlProvider 这个类的内容, 必须得使⽤
IDEA ⾃带的反编译器或者 Jadx-GUI 等其它⼯具才⾏
利用idea的反编译命令,在编译之前创建好out目录
反编译完之后还是jar包,将jar包解压
得到一系列文件,找到pom.xml文件
image-20231102210442901
image-20231102210442901
发现使用了mybatis,可能会有漏洞,详细看我的Mybatis从SQL注入到OGNL注入
image-20231102210834801
image-20231102210834801
发现存在漏洞点
根据参考⽂章可以知道这⾥的 username 被直接拼接进 SQL 语句, 存在 SQL 注⼊, 但是更进⼀步来讲这⾥存在
OGNL 表达式注⼊
在 OGNL 表达式当中也可以访问静态变量或者调用静态方法,格式如 @[class]@[field/method ()]。
直接反弹 shell
但是很显然是会失败的, 因为传⼊的命令包含了 { 和 } , 会被递归解析为另⼀个 OGNL 表达式的开头和结尾
解决⽅案是只要不出现⼤括号就⾏, ⽅法很多, 这⾥给出⼀种, 利⽤ OGNL 调⽤ Java ⾃身的 base64 decode ⽅法
urlencode 全部字符后发送, 反弹 shell, 查看环境变量拿到 flag
image-20231102213035617
image-20231102213035617

TestConnection

自己搭一个docker环境来复现
http://111.229.162.217:1236/
获取题目附件的jar包后进行反编译,可以看到项目的文件
首先找到pom.xml
image-20231109141636111
image-20231109141636111
然后右键导入maven项目,导入之后会有警告
image-20231109141850781
image-20231109141850781
其中可以找到几个关键的cve,最后查到是CVE-2022-21724
可以去看我的MYSQL_JDBC反序列化解析,里面具体介绍了怎么利用漏洞
漏洞注入的关键代码在
image-20231109142303501
image-20231109142303501
可以看到我们要传driver(驱动),url(数据库的地址),username(数据库用户名),password(数据库用户名密码)这四个参数
其中由于url参数的可控给我们提供了代码执行的条件
接下来我们需要准备一个恶意的数据库然后去连接,命令执行
这边介绍一个利用的工具:https://github.com/4ra1n/mysql-fake-server
这个工具可以生成payload并且创建一个恶意的数据库让用户去连接然后去命令执行
注意:用docker搭建恶意的数据库的时候要确保docker的版本高,低的docker版本无法搭建
image-20231109143431557
image-20231109143431557
生成的payload
2023香山杯-misc-pintu0xGame-Week3-web
Loading...
公告
🎉qetx新博客已经上线🎉
-- 感谢您的支持 ---
这里会有什么?
ctf知识
RL学习笔记
有趣的生活日常