允许使用Apache2进行目录遍历



我正试图为一个项目创建一个CTF。我的目标之一是建立一个允许目录遍历的Apache web服务器,这样尝试我的CTF的人就可以遍历到我的根目录,并访问包含加密文件的文件夹。我希望他们能够下载这个文件,这样他们就可以在自己的机器上对其进行解密。然而,我甚至不知道从哪里开始允许目录遍历。我以前从未真正使用过Apache web服务器,我在网上找到的一切都是关于防止目录遍历的。

我在Ubuntu 12.04虚拟机上使用Apache2。

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

首先,我将/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,文件就会显示给他们。

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

Apache本身不允许创建目录遍历漏洞。您将需要使用类似PHP的东西来传递?file=filename参数并使用具有该值的open()

PHPopen()函数将解释转义"0"所必需的CCD_;预期的";目录然而,Apache本身不允许这样做。

PHP的最小示例

  1. 同时安装PHP:

    sudo apt install php
    
  2. 清除web根目录:

    sudo rm -rf /var/www/html/*
    
  3. 创建具有以下内容的/var/www/html/index.php

    <?php
    $p = 'home.php';
    if (isset($_GET['p']))
    $p = $_GET['p'];
    include ($p);
    ?>
    
  4. 创建具有以下内容的/var/www/html/home.php

    <!DOCTYPE html>
    <html>
    <head>
    <title>Read World!</title>
    </head>
    <body>
    <a href="?p=home.php">home</a>
    </body>
    </html>
    
  5. 利用,例如:

    curl http://<IP>/?p=../../../etc/passwd
    

相关内容

  • 没有找到相关文章

最新更新