文章目录
- 写在前面
 - babycat
 
写在前面
是Java没错了,冲它
babycat
发现接口直接post发包注册一个号登录进去
![在这里插入图片描述 [GKCTF2021]babycat_for循环](https://file.cfanz.cn/uploads/png/2022/10/31/2/Pf958f909A.png)
 此时我们可以看见不管怎样role都是guest,后台只有管理员有上传权限
![在这里插入图片描述 [GKCTF2021]babycat_xml_02](https://file.cfanz.cn/uploads/png/2022/10/31/2/N8H9757439.png)
 我们需要关注如何成为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>
可以慢慢读取文件,这里乱码用浏览器下载即可
![在这里插入图片描述 [GKCTF2021]babycat_for循环_03](https://file.cfanz.cn/uploads/png/2022/10/31/2/bB8KQD8W23.png)
 反编译看一下注册的部分
![在这里插入图片描述 [GKCTF2021]babycat_xml_04](https://file.cfanz.cn/uploads/png/2022/10/31/2/e90eOdfYL8.png)
可以看见这里
![在这里插入图片描述 [GKCTF2021]babycat_java_05](https://file.cfanz.cn/uploads/png/2022/10/31/2/36971L6DLZ.png)
 接收data参数并正则匹配"role":"(.*?)"
for(Matcher matcher = pattern.matcher(var); matcher.find(); role = matcher.group()) {
        }这里for循环的意思是对最后一个匹配的进行强制替换
![在这里插入图片描述 [GKCTF2021]babycat_xml_06](https://file.cfanz.cn/uploads/png/2022/10/31/2/HacVU8ITZF.png)
 由于是gson进行解析,所以我们可以配合注释符,成功成为了admin
![在这里插入图片描述 [GKCTF2021]babycat_xml_07](https://file.cfanz.cn/uploads/png/2022/10/31/2/cALca8A6K7.png)
 接下来我们看看uploadServlet的内容,可以看见这里分别有内容和后缀的白名单
![在这里插入图片描述 [GKCTF2021]babycat_for循环_08](https://file.cfanz.cn/uploads/png/2022/10/31/2/30UAI7Vad9.png)
 继续读其他文件
![在这里插入图片描述 [GKCTF2021]babycat_for循环_09](https://file.cfanz.cn/uploads/png/2022/10/31/2/66ddKE20B1.png)
 可以通过触发XMLDecoder
![在这里插入图片描述 [GKCTF2021]babycat_for循环_10](https://file.cfanz.cn/uploads/png/2022/10/31/2/X96B18WaTK.png)
 用实体编码绕过
![在这里插入图片描述 [GKCTF2021]babycat_java_11](https://file.cfanz.cn/uploads/png/2022/10/31/2/eU8PcKGXae.png)
 覆盖以后再次登录触发利用
![在这里插入图片描述 [GKCTF2021]babycat_for循环_12](https://file.cfanz.cn/uploads/png/2022/10/31/2/2U8c0Fb01I.png)
                










