记录一道有趣的web题


PangBai 过家家(1)

开启环境

使用wsrx转换地址

使用火狐浏览器访问地址

第一关

1
下方文字给出了提示「Header」。打开浏览器的开发者工具,在「网络」(Network)选项卡中找到网页的初始请求,查看响应标头,有一个 Location 字段

访问这个目录

第二关

1
题目提示了「Query」和 `ask=miao`,其中「Query」指的就是 GET 请求的请求参数,在URL中路径后面 `?` 开始就是查询字段,用 `&` 分隔,遇到特殊字符需要进行 URL Encode 转义。因此我们访问路径 `/?ask=miao` 即可进入下一关。

第三关

1
2
3
4
5
6
7
第三关给出的提示为:

> 用另一种方法(Method)打声招呼(`say=hello`)吧 ~

我们在浏览器地址栏输入网址,默认的方法就是 GET,常见的方法还有 POST,在一些表单提交等界面会使用它,在 HTTP 请求报文中就是最开始的那个单词。因此本关用 POST 请求发一个 `say=hello` 的查询即可。

POST 的查询类型有很多种,通过 HTTP 报文中的 `Content-Type` 指定,以告诉服务端用何种方式解析报文 Body 的内容。

使用浏览器的 HackBar 插件:发送个 say=hello 的请求包即可

第四关

1
来到这一关后由于 302 跳转可能会变成 GET 请求,再次用 POST 请求(携带新 Cookie)访问,得到提示「Agent」和 `Papa`,应当想到考查的是 HTTP 请求头中的 `User-Agent` Header. 题目的要求比较严格,`User-Agent` 必须按照标准格式填写(参见 [User-Agent - HTTP | MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent)),因此需携带任意版本号发送一个 POST 请求:

使用bp抓包添加User-Agent:Papa/1.0

1
此时提示需要将 `say` 字段改成「玛卡巴卡阿卡哇卡米卡玛卡呣」(不包含引号对 `「」`),中文需要转义(HackBar 会自动处理中文的转义)。因此最终的报文为:

将得到的token替换一下

第五关

1
2
3
4
5
6
7
由于 302 跳转的缘故变成了 GET 请求,我们再用 POST 请求(携带新 Cookie)访问,得到的提示为:

> 或许可以尝试用修改(PATCH)的方法提交一个补丁包(`name="file"; filename="*.zip"`)试试。

这是要求我们使用 PATCH 方法发送一个 ZIP 文件。

这一关是相对较难的一关,浏览器插件并不支持发送 PATCH 包和自定义文件,必须通过一些发包工具或者写代码来发送该内容。PATCH 包的格式与 POST 无异,使用 `Content-Type: multipart/form-data` 发包即可,注意该 Header 的值后面需要加一个 `boundary` 表示界定符。例如`Content-Type: multipart/form-data; boundary=abc`,那么在 Body 中,以 `--abc` 表示一个查询字段的开始,当所有查询字段结束后,用 `--abc--` 表示结束。

使用bp选择这个选项即可

这样发包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PATCH /?ask=miao HTTP/1.1
Host: 127.0.0.1:56566
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarysPnsITRMirqQsU5V
Content-Length: 291
Origin: http://127.0.0.1:56566
Connection: close
Referer: http://127.0.0.1:56566/?ask=miao
User-Agent: Papa/1.0
Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsZXZlbCI6NX0.0d9h_pYLM6ZQWtz2MgsSxf4O0POmJy2PJT0JY0s11wA
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Priority: u=1



------WebKitFormBoundarysPnsITRMirqQsU5V
Content-Disposition: form-data; name="file"; filename="1.zip"

abc

------WebKitFormBoundarysPnsITRMirqQsU5V
Content-Disposition: form-data; name="say"

玛卡巴卡阿卡哇卡米卡玛卡呣
------WebKitFormBoundarysPnsITRMirqQsU5V--

老样子还是替换token

第六关

1
2
3
本题提示内容指出了 `localhost`,意在表明需要让服务器认为这是一个来自本地的请求。可以通过设置 `Host` `X-Real-IP` `X-Forwarded-For` `Referer` 等标头欺骗服务器。

以下任意一种请求都是可以的。

bp添加X-Real-IP: 127.0.0.1

1
2
3
4
5
6
7
8
9
10
11
随后提示给出了一段话:

PangBai 以一种难以形容的表情望着你——激动的、怀念的,却带着些不安与惊恐,像落单后归家的雏鸟,又宛若雷暴中遇难的船员。

你似乎无法抵御这种感觉的萦绕,像是一瞬间被推入到无法言喻的深渊。尽管你尽力摆脱,但即便今后夜间偶见酣眠,这一瞬间塑成的梦魇也成为了美梦的常客。

「像■■■■验体■■不可能■■■■ JWT 这种■■ Pe2K7kxo8NMIkaeN ■■■密钥,除非■■■■■走,难道■■■■■■吗?!」

「......」

其中提到了 JWT 和 Pe2K7kxo8NMIkaeN,这个数字和字母组成内容推测应当是 JWT 的密钥。JWT 是一个轻量级的认证规范,允许在用户和服务器之间传递安全可靠的信息,但这是基于签名密钥没有泄露的情况下。可以通过 JWT.IO 网站进行在线签名和验证(JWT 并不对数据进行加密,而仅仅是签名,不同的数据对应的羡签名不一样,因此在没有密钥的情况下,你可以查看里面的数据,但修改它则会导致服务器验签失败,从而拒绝你的进一步请求)。

将我们当前的 Cookie 粘贴入网站:

Payload,即 JWT 存放的数据,指明了当前的 Level 为 6,我们需要更改它,将它改为 0 即可。可见左下角显示「Invalid Signautre」,即验签失败,粘贴入签名密钥

bp替换token

第〇关·终章

点击提示中的「从梦中醒来」,过完一个片尾小彩蛋即获得 Flag 内容。


文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录