By烟花易冷

中科大 Hackergame 2018 我是谁 Writeup
2018-10-17

中科大 Hackergame 2018 我是谁 Writeup

有段时间没刷题了,这周周六就是校赛了,在队友 kOX 的怂恿下一起参加了中国科学技术大学的 Hackergame 2018 CTF 比赛,遇到了一道不错的题目用到 超文本咖啡壶控制协议的茶壶扩展 的相关知识,与队友一起在学院实验室摸索了本天,决定写写自己的解题思路。

这道大题分为两道小题,第一题为“哲学思考”

哲学思考 题目描述

Who am I?
「我是谁?」

「我从哪里来?」

「将到哪里去?」

据说有这样三个有趣的哲学问题。

现在,请帮我回答第一个问题吧。

Can you tell me who I am?

哲学思考 题解

打开 Chrome 浏览器,按下 F12 打开开发人员工具,切换到 Network 选项页,点击 ip 地址,即可看到:Status Code: 418 I'M A TEAPOT,提交 TEAPOT 之后成功获得 flag{i_canN0t_BReW_c0ffEE!},点击链接进入第二小题继续作战。

如图:

至于 418 I'M A TEAPOT 的意思,其实很有趣,便是超文本咖啡壶控制协议的茶壶扩展在普通浏览器下打开的一中报错信息,具体请接着往下看。

Can I help me ? 题目描述

Brewing tea is not so easy.

Try using other methods to request this page.

Can I help me ? 题解

看到题目描述中说采用不同的方法来请求,于是我打开了 POSTMAN 尝试使用 POST 请求,得到了如下提示:

The method "POST" is deprecated.

See RFC-7168 for more information.

好戏开场了,通过一番搜索打开 RFC-7168 的文档,看到其中有一行说到发起茶壶请求时必须在 Content-Type 加入 message/teapot,并且还可以在头部加入 addition-type 来指定要加入的东西以及通过 sugar-type 来指定糖类。除此之外,还抛弃了 POST 方式发起请求,而改用 BREW,真是有意思,于是采用 cURL 发起测试,具体如下:

curl -X BREW -d "name=TEAPOT" -H "Content-Type:message/teapot" -H "addition-type:milk-type" -H "sugar-type:Sugar" -v http://202.38.95.46:12005/the_super_great_hidden_url_for_brewing_tea

得到的返回值如下:

< HTTP/1.0 300 MULTIPLE CHOICES
< Content-Type: text/html; charset=utf-8
< Content-Length: 19
< Alternates: {"/the_super_great_hidden_url_for_brewing_tea/black_tea" {type message/teapot}}
< Server: Werkzeug/0.14.1 Python/3.6.6
< Date: Thu, 11 Oct 2018 12:53:13 GMT
<

这次直接告诉我 300 MULTIPLE CHOICES 有多种口味可以选择了(大雾),并且提示了最终目标为:/the_super_great_hidden_url_for_brewing_tea/black_tea,于是修改请求目标,具体如下:

curl -X BREW -H "Content-Type:message/teapot" -v http://202.38.95.46:12005/the_super_great_hidden_url_for_brewing_tea/black_tea

最后成功的喝上了茶。

Here is your tea: flag{delivering_tea_to_DaLa0}