允许目录遍历 Apache2

Posted

技术标签:

【中文标题】允许目录遍历 Apache2【英文标题】:Allow directory traversal with Apache2 【发布时间】:2021-06-29 15:33:52 【问题描述】:

我目前正在学校参加渗透测试课程。我正在尝试为一个项目创建一个 CTF。我的目标之一是设置一个允许目录遍历的 Apache Web 服务器,以便尝试我的 CTF 的人可以遍历我的根目录并访问包含加密文件的文件夹。我希望他们能够下载这个文件,这样他们就可以在他们的机器上解密它。但是,我什至不知道从哪里开始允许目录遍历。我以前从未真正使用过 Apache Web 服务器,我在网上找到的所有内容都是关于防止目录遍历。

我在 Ubuntu 12.04 VM 上使用 Apache2。

【问题讨论】:

【参考方案1】:

Apache 本身不允许创建目录遍历漏洞。您将需要使用 php 之类的东西,在其中传递 ?file=filename 参数并将 open() 与该值一起使用。

PHP open() 函数将解释转义“预期”目录所需的 ../../ 序列。但是 Apache 本身不允许这样做。

【讨论】:

【参考方案2】:

我有一个足够好的解决方法。

首先,我将/etc/apache2/sites-available/default 中的DocumentRoot 更改为"/",以便服务器可以访问/ 中的所有内容,并在/ 中创建一个index.html 文件,以便Apache 服务器知道要呈现什么. index.html 的内部只是

    <html><script>location="/home/user/server/index.html";</script>

渲染要显示的实际索引。我这样做是为了更清楚地表明会进行某种目录遍历。通过这样做,向访问者显示的路径是http://192.168.xx.xx/home/user/server/index.html

然后,我添加了一个通配符目录:

  <Directory ~ "/*">
        Options +Indexes
  </Directory>

以便用户可以进入根目录中的任何文件夹。现在,当任何人访问192.168.xx.xx 时,他们将被路由到192.168.xx.xx/home/user/server/index.html,如果他们输入其他内容,例如192.168.xx.xx/etc/passwd,文件将显示给他们。

我知道这不是真正的目录遍历,但对于这个项目来说已经足够解决了。

【讨论】:

以上是关于允许目录遍历 Apache2的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 中防止目录遍历但允许路径

如何使用 Gatling 遍历目录中的所有文件?

k8s kubectl复制命令曝目录遍历漏洞

Android如何遍历特定目录下所有文件

js如何遍历本地目录的文件

如何解决 Apache Tomcat 目录遍历漏洞