Jay17 2023.8.12日报

8.12

今天做了2题,CTFshow 红包挑战8(PHP create_function())和BUU [RoarCTF 2019]Easy Java(web.xml泄露)。

此外一直在打NepCTF,出了一题(ez_java_checkin)简单了解了java中shrio反序列化漏洞的利用。

做Nep时候顺便补充了一下文件包含的绕过方式。

Jay17 2023.8.12日报_第1张图片

CTFshow 红包挑战8(wp现在不能放)

Jay17 2023.8.12日报_第2张图片

NepCTF ez_java_checkin

Jay17 2023.8.12日报_第3张图片

BUU [RoarCTF 2019]Easy Java

考点:web.xml泄露

开题是一个登录框。

Jay17 2023.8.12日报_第4张图片

点击help跳转到/Download路由,同时返回提示(报错)。
由此我们得出/Download路由后端语言是Java,同时存在任意文件下载漏洞。

Jay17 2023.8.12日报_第5张图片


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配置文件禁止访问WEB-INF目录就好了: location ~ ^/WEB-INF/ { deny all; } 或者return 404; 或者其他。


我们先尝试利用任意文件下载漏洞读取Web应用程序配置文件

这里提交方式要改为POST,应该是题目原因。

filename=/WEB-INF/web.xml

成功下载。

Jay17 2023.8.12日报_第6张图片

_WEB-INF_web.xml文件的内容:


<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         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>Indexwelcome-file>
    welcome-file-list>

    <servlet>
        <servlet-name>IndexControllerservlet-name>
        <servlet-class>com.wm.ctf.IndexControllerservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>IndexControllerservlet-name>
        <url-pattern>/Indexurl-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>LoginControllerservlet-name>
        <servlet-class>com.wm.ctf.LoginControllerservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>LoginControllerservlet-name>
        <url-pattern>/Loginurl-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>DownloadControllerservlet-name>
        <servlet-class>com.wm.ctf.DownloadControllerservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>DownloadControllerservlet-name>
        <url-pattern>/Downloadurl-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>FlagControllerservlet-name>
        <servlet-class>com.wm.ctf.FlagControllerservlet-class>
    servlet>
    <servlet-mapping>
        <servlet-name>FlagControllerservlet-name>
        <url-pattern>/Flagurl-pattern>
    servlet-mapping>

web-app>

我们重点看以下xml代码片段和前文提到的WEB-INF包含的class目录

<servlet>
        <servlet-name>FlagControllerservlet-name>
        <servlet-class>com.wm.ctf.FlagControllerservlet-class>
servlet>
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中

所以我们读取FlagController.class文件的payload如下:

filename=/WEB-INF/classes/com/wm/ctf/FlagController.class

Jay17 2023.8.12日报_第7张图片

用记事本打开是编译过的。

Jay17 2023.8.12日报_第8张图片

用IDEA打开自动反编译。

Jay17 2023.8.12日报_第9张图片

ZmxhZ3s3NWYyYmNlYS01YTJhLTQ4OTYtOGExZi02ODIwNWExMGIwYjR9Cg==
解码后
flag{75f2bcea-5a2a-4896-8a1f-68205a10b0b4}

你可能感兴趣的:(日报专栏,网络安全,web安全)