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 内容。