Sign inSign up

wjx4321/treasure

By wjx4321

Updated 9 months ago

Image
0

893

wjx4321/treasure repository overview

关卡顺序如下(按题目要求):

  1. 第一关:/treasure?key=magic_word
  2. 第二关:/guard/1337
  3. 第三关:/guard/1337/../vault
  4. 第四关:/vault?password=7777
  5. 第五关:/claim?name=宝藏猎人 → 返回动态 flag

以下示例将 IP:PORT 替换为题目实际地址。
推荐使用 curl -i 观察返回内容(必要时也能看头信息)。

✅ 第一关:使用 URL 参数

访问:

curl -s "http://IP:PORT/treasure?key=magic_word"
预期返回:

复制代码
第一关通过!线索:去问问1337号守卫
说明
这里考察 URL 参数:key=magic_word

如果 key 写错/缺失,会收到幽默错误提示(掉进数字沼泽)

✅ 第二关:访问指定路径
根据提示访问守卫 1337:

bash
复制代码
curl -s "http://IP:PORT/guard/1337"
预期返回:

bash
复制代码
第二关通过!我听说宝藏在../vault里
说明
这里考察 路径参数/路径片段:/guard/1337

线索中出现 ../vault,暗示下一关涉及 路径遍历

✅ 第三关:路径遍历(../)概念演示
按题面要求访问:

bash
复制代码
curl -s "http://IP:PORT/guard/1337/../vault"
预期返回:

ruby
复制代码
第三关通过!但金库需要密码:?password=数字
说明(关键点)
../ 表示“回到上一层目录”,是路径遍历最基础的符号

在很多 Web/文件系统路径解析中:
A/B/../C 会等价于 A/C

本题通过 URL 路径的方式让你直观理解 ../ 的含义

✅ 第四关:再次使用 URL 参数(密码)
根据提示访问金库并带上密码参数:

bash
复制代码
curl -s "http://IP:PORT/vault?password=7777"
预期返回:

pgsql
复制代码
最终挑战:告诉我你的名字?name=宝藏猎人
说明
这里再次考察 URL 参数

密码必须为 7777 才能继续

✅ 第五关:提交名字并领取宝藏(flag)
根据提示访问 /claim 并传入 name=bounty_hunter:

注意:如果用 curl,中文需要 URL 编码,最省事的写法是直接把整段 URL 放在引号里,让 shell 不乱解析。

bash
复制代码
curl -s "http://IP:PORT/claim?name=bounty_hunter"
预期返回:

直接输出 动态 flag(来自环境变量 GZCTF_FLAG)

四、一键通关命令(顺序执行)
bash
复制代码
curl -s "http://IP:PORT/treasure?key=magic_word"
curl -s "http://IP:PORT/guard/1337"
curl -s "http://IP:PORT/guard/1337/../vault"
curl -s "http://IP:PORT/vault?password=7777"
curl -s "http://IP:PORT/claim?name=%E5%AE%9D%E8%97%8F%E7%8C%8E%E4%BA%BA"
五、常见坑与排错
1)提示“掉进了数字沼泽”
说明你当前关卡条件不满足,常见原因:

参数拼错:如 magic_word、password=7777

路径打错:如 /guard/1337 少了数字

尝试跳关:未按顺序通过前面关卡(进度验证会拦住)

2)第三关 URL 被“自动规范化”
某些代理/网关可能会把 ../ 在到达应用前就归一化(例如直接变成 /guard/vault 或 /vault)。
如果遇到这种情况:

尝试用浏览器直接访问 /guard/1337/../vault

或使用不同客户端(curl / burp)再次请求

Tag summary

Content type

Image

Digest

sha256:d1de841bd

Size

45.9 MB

Last updated

9 months ago

docker pull wjx4321/treasure