如何编写将“/folder1/folder2/”更改为“/”的.htaccess

时间:2021-02-17 15:46:57

标签: .htaccess web mod-rewrite ctf

我正在尝试进行涉及本地文件包含的 ctf 挑战。

考虑到这一点,我用 /etc//var//home 等重新创建了一个类似“linux”的文件夹系统......因为我使用免费的网络托管服务。

为了不让用户看起来可疑,我只想以图形方式更改 URL,使其看起来像用户位于根目录中,而他确实位于其他子目录中(用户也需要能够包括../../etc/passwd)。到目前为止,这就是我所拥有的:

RewriteEngine On
RewriteBase /folder1/folder2/

这个文件位于 /folder1/folder2/,但它什么都不做...

有人可以帮我吗?

PS:对不起我的英语。

1 个答案:

答案 0 :(得分:0)

<块引用>
RewriteBase /folder1/folder2/

就其本身而言,RewriteBase 不做任何事情。 RewriteBase 指令覆盖要在 RewriteRule 指令中的相对路径替换中使用的基本 URL 路径。例如,给定以下内容:

RewriteBase /folder1/folder2/
RewriteRule ^foo$ bar [L]

根据上述内容,如果您请求 /foo,那么该请求将在内部重写为 /folder1/folder1/bar,因为 substitution 字符串 barrelative< /em>。这与声明以下内容相同:

RewriteRule ^foo$ /folder1/folder2/bar [L]

这就是 RewriteBase 指令所做的全部。您在这里并不严格需要它,但如果您愿意,您可以使用它。

<块引用>

这个文件位于“/folder1/folder2/”,但它什么都不做...

您需要针对文档根目录的请求,因此您不能将此 .htaccess 文件放在 /folder1/folder2/ 目录中 - 它根本不会执行任何操作。位于 .htaccess/folder1/folder2/.htaccess 文件只会将请求定向到 /folder1/folder2/ 及其所有子目录。

听起来您想在内部将所有请求从文档根目录重写到 /folder1/folder2/ 目录 - 有效地对用户隐藏 /folder1/folder2/

为此,您需要在位于文档根目录的 /.htaccess 文件中使用类似以下内容:

RewriteEngine On

RewriteRule !^folder1/folder2 /folder1/folder2%{REQUEST_URI} [L]

以上将所有尚未针对 /folder1/folder2 的请求重写到该子目录。

<块引用>

用户还需要能够包含 ../../etc/passwd

我不确定您打算如何“包含”它,但是如果您指的是客户端 URL 路径,那么您不应该使用这样的相对 URL 路径。使用根相对 URL 路径,例如。 /etc/passwd(来自文档根目录)。

<块引用>

如何编写将 .htaccess 更改为 /folder1/folder2//

请注意,此 .htaccess 文件完全相反。它将请求 /(文档根)的 URL 更改为 /folder1/folder2/ - 这似乎是您问题中的要求。您需要已将内部链接中的 /folder1/folder2/ 更改为 /