[GKCTF2021]babycat
Posted Y4tacker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GKCTF2021]babycat相关的知识,希望对你有一定的参考价值。
写在前面
是Java没错了,冲它
babycat
发现接口直接post发包注册一个号登录进去
此时我们可以看见不管怎样role都是guest,后台只有管理员有上传权限
我们需要关注如何成为admin,但是文件下载那里可以目录穿越首先读取web.xml
<web-app>
<servlet>
<servlet-name>register</servlet-name>
<servlet-class>com.web.servlet.registerServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.web.servlet.loginServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>com.web.servlet.homeServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>com.web.servlet.uploadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>download</servlet-name>
<servlet-class>com.web.servlet.downloadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>logout</servlet-name>
<servlet-class>com.web.servlet.logoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>logout</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>download</servlet-name>
<url-pattern>/home/download</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>register</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<display-name>java</display-name>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/home/upload</url-pattern>
</servlet-mapping>
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.web.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>/home/*</url-pattern>
</filter-mapping>
<display-name>java</display-name>
<welcome-file-list>
<welcome-file>/WEB-INF/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
可以慢慢读取文件,这里乱码用浏览器下载即可
反编译看一下注册的部分
可以看见这里
接收data
参数并正则匹配"role":"(.*?)"
for(Matcher matcher = pattern.matcher(var); matcher.find(); role = matcher.group()) {
}
这里for循环的意思是对最后一个匹配的进行强制替换
由于是gson进行解析,所以我们可以配合注释符,成功成为了admin
接下来我们看看uploadServlet
的内容,可以看见这里分别有内容和后缀的白名单
继续读其他文件
可以通过触发XMLDecoder
用实体编码绕过
覆盖以后再次登录触发利用
以上是关于[GKCTF2021]babycat的主要内容,如果未能解决你的问题,请参考以下文章