HackThisSite - Basic Mission 11

Challenge

Sam decided to make a music site. Unfortunately he does not understand Apache.

Sam 决定做一个音乐网站,可惜他不懂 Apache 配置。

页面上随机显示一句歌词,如 "Ghetto Gospel" is the best!,每次刷新会变。没有密码输入框,没有明显的交互元素。

Solution

这题考察的是 Apache 服务器配置知识,解题过程像一个探索任务。

Step 1 — 识别歌曲线索

多次刷新页面,歌曲会变化,包括:

  • "Ghetto Gospel" (2Pac ft. Elton John)
  • "Georgia" (Elton John)
  • 等等

搜索这些歌曲,全部是 Elton John 的作品。这暗示了目录结构。

Step 2 — 目录遍历

尝试拼出 Elton 的名字:访问 /missions/basic/11/e/,发现目录列表!继续往下走:

1
2
3
4
5
/missions/basic/11/e/
/missions/basic/11/e/l/
/missions/basic/11/e/l/t/
/missions/basic/11/e/l/t/o/
/missions/basic/11/e/l/t/o/n/ ← 最后一层,看起来是空的

Step 3 — 查看 .htaccess 文件

/e/l/t/o/n/ 目录看起来是空的,但在 Apache 中,.htaccess 文件可能被目录列表隐藏了。直接访问:

1
https://www.hackthissite.org/missions/basic/11/e/l/t/o/n/.htaccess

内容:

1
2
3
4
5
IndexIgnore DaAnswer.* .htaccess

<Files .htaccess>
require all granted
</Files>
  • IndexIgnore:告诉 Apache 目录列表中不要显示 DaAnswer.*.htaccess
  • <Files .htaccess>:允许所有人访问 .htaccess(这是关键错误,应该禁止访问)

Step 4 — 访问 DaAnswer

既然 .htaccess 泄露了隐藏的文件名,直接访问:

1
https://www.hackthissite.org/missions/basic/11/e/l/t/o/n/DaAnswer

页面显示动态文本,如:

1
2
The answer is available!
Just look a little harder.

Step 5 — 提交答案

访问 /missions/basic/11/index.php(注意不是入口页面),会出现密码输入框。表单字段名是 answer,提交 available 即可过关。

1
2
3
4
$ curl -sL -b 'HackThisSite=YOUR_COOKIE' \
-e 'https://www.hackthissite.org/missions/basic/11/index.php' \
--data-urlencode 'answer=available' \
'https://www.hackthissite.org/missions/basic/11/index.php'

核心知识点:

  1. Apache 的 IndexIgnore 只是不在目录列表中显示文件,文件本身仍然可以被直接访问
  2. .htaccess 文件应该禁止外部访问(Require all denied),否则会泄露目录配置信息
  3. 路径遍历 + 配置文件泄露是经典的 Apache 安全问题