CTF | JetBrains Quest 1&2 WriteUp/攻略


前言

昨晚在 Telegram 里看到朋友发了一个 JetBrains Quest 的 twitter 链接,据说难度不大,还可以白嫖他家的产品授权。

感兴趣就来体验一下吧!

于是体验了 Quest1 和 2 白嫖了 3+3 个月的 JB 家全产品授权,这里记录一下通关过程,也算是攻略 / WriteUp 吧。

感觉也是 CTF, Capture The Flag 的范畴吧,暂且就归类为 CTF 好了(

欢迎来和我交流哈。

PAY ATTENTION! 注意!

如果没有玩过的话

本文下面的内容 全 是 剧 透

如果想自己做的话,就暂时不要往下看了!

这个 Quest 在 2020-03-15 12:00 CET (欧洲中部时间)之前都有效


Quest 1

https://twitter.com/jetbrains/status/1236986174075482113

Quest1

48 61 76 65 20 79 6f 75 20 73 65 65 6e 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6f 66 20 74 68 65 20 4a 65 74 42 72 61 69 6e 73 20 77 65 62 73 69 74 65 3f

一看是 hex,于是转成 ASCII,得到:

Have you seen the source code of the JetBrains website?

Step 1

去官网上找呗。传送门:https://www.jetbrains.com/

(还别说,挺久没上 JetBrains 官网了,感觉又多了不少工具,界面也变得更好看了唉。

提示了看源码,既然是 JetBrainsQuest 了,当然就搜一下quest

果然看到了提示。

Step1

<!--
      O
{o)xxx|===============-
      O

Welcome to the JetBrains Quest.

What awaits ahead is a series of challenges. Each one will require a little initiative, a little thinking, and a whole lot of JetBrains to get to the end. Cheating is allowed and in some places encouraged. You have until the 15th of March at 12:00 CET to finish all the quests.
Getting to the end of each quest will earn you a reward.
Let the quest commence!

JetBrains has a lot of products, but there is one that looks like a joke on our Products page, you should start there... (hint: use Chrome Incognito mode)
It’s dangerous to go alone take this key: Good luck! == Jrrg#oxfn$

                 O
-===============|xxx(o}
                 O
-->

这里提示了hint: use Chrome Incognito mode

建议用 Chrome 的无痕模式。


Step 2

于是就去 products 里找了呗。

(可能没注意)没找到入口,盲猜就在 /products 目录了,访问后跳转到了 https://www.jetbrains.com/products.html

后来发现主页上的链接在 See All Tools 里(

products

找找哪个looks like a joke,一猜就是 JK 了,而且还是2020.1.1版本(嘻嘻 。

Step2

后来发现,JK 这个产品可能需要在 无痕模式/隐私模式 下才出现。(有可能有缓存?

后面再来分析一下这个怎么加载出来的8.


Step 3

找一下 500 到 5000 之内有多少素数,随手写个 py 的 jio 本。

(边界值的话,5000肯定不是素数,不影响结果

from math import sqrt
cnt = 0
for i in range(500, 5000):
    for j in range(2, int(sqrt(i))+1):
        if i % j == 0:
            break
        if j == int(sqrt(i)):
            cnt += 1
print('OK!')
print(cnt)

跑出来 cnt 为 574.

于是访问 https://jb.gg/574 .(不输入的话是跳转到官网的

(其实爆破也行,反正就三位数呢

发现 301 重定向到了 https://www.jetbrains.com/help/pycharm/getting-help.html#quest

Step3


Step 4

Google 上一搜就是了。

(下面还有 V2EX 上别人的讨论

((不看不看先不看!

MPS-31816

https://youtrack.jetbrains.com/issue/MPS-31816

Step4

这是 YouTrack 的一个 issue。(这里直接谷歌可能是非预期解了

JetBrains Quest
“The key is to think back to the beginning.” – The JetBrains Quest team

Qlfh$#Li#|rx#duh#uhdglqj#wklv#|rx#pxvw#kdyh#zrunhg#rxw#krz#wr#ghfu|sw#lw1#Wklv#lv#rxu#lvvxh#wudfnhu#ghvljqhg#iru#djloh#whdpv1#Lw#lv#iuhh#iru#xs#wr#6#xvhuv#lq#Forxg#dqg#iru#43#xvhuv#lq#Vwdqgdorqh/#vr#li#|rx#zdqw#wr#jlyh#lw#d#jr#lq#|rxu#whdp#wkhq#zh#wrwdoo|#uhfrpphqg#lw1#|rx#kdyh#ilqlvkhg#wkh#iluvw#Txhvw/#qrz#lw“v#wlph#wr#uhghhp#|rxu#iluvw#sul}h1#Wkh#frgh#iru#wkh#iluvw#txhvw#lv#‟WkhGulyhWrGhyhors†1#Jr#wr#wkh#Txhvw#Sdjh#dqg#xvh#wkh#frgh#wr#fodlp#|rxu#sul}h1#kwwsv=22zzz1mhweudlqv1frp2surpr2txhvw2

结合 Step1 中的 Good luck! == Jrrg#oxfn$,分析可知是往后移了3个字符(SHIFT3)

于是全部往前移3个字符得到:

Nice! If you are reading this you must have worked out how to decrypt it. This is our issue tracker designed for agile teams. It is free for up to 3 users in Cloud and for 10 users in Standalone, so if you want to give it a go in your team then we totally recommend it. you have finished the first Quest, now it…s time to redeem your first prize. The code for the first quest is <TheDriveToDevelop<. Go to the Quest Page and use the code to claim your prize. https://www.jetbrains.com/promo/quest/

Beat The Quest

Rua!哇好耶!

TheDriveToDevelop

然后就可以拿着这个 code 去白嫖免费授权了!

success

输入邮箱和上面的 Code,提交就好啦。

这里看到 Twitter 上有人说 Firefox 会报 CORS issue,请使用 Chrome 试试。

(An error occurred while …

这里说了会把你的信息提供给他,他会给你的邮箱发推荐信息,可能这是 JetBrains 吸收流量的一个手段吧(盲猜的

不过他也说了在邮件末尾可以取消订阅。

BTW,发现这里的 Code 并没有上传到后端进行校验,而是直接在前端进行的。

可以给 Code 输入框的 input 打个断点看看(

(或者看看提交表格的 call stack 好了

success2

于是得到了白嫖的 3-months free All Products Pack subscription

有点意思唉~

success3

等等?还没完唉!

这是一系列的 Quest!

下一个 quest 的时间是1583924400,转换时间戳发现是 2020-03-11 19:00:00.



Step2 中 JK 的加载分析

突然有点好奇这个 JK 是怎么被加载出来的,于是简单分析一下吧。

这里搜索quest,在网页末尾处看到了一个加载的dialog-polyfill.js

Elements

在 Sources 里这个文件里搜索 JK或者quest,都找不到网页上与 JK 有关信息,倒是定义了一堆相关的属性方法之类的,css 文件中是dialog框的相关样式。

dialogJS

在 Network 里看 products.html 的 response,里面并没有 JK,也没有quest。就连上面这个脚本文件也没有。

那这个 JK 到底是怎么加载出来的呢?

于是在 Network 里全局搜索了一下 quest,有了新的收获。

原来这些信息都是通过一个JS脚本来加载的。

这个 js 的 response 包含了页面上的所有产品信息,是把网页内容嵌入到 json 里进行数据交互的。

哇,第一次见唉!😂

Network

再看一下 Initiator,发现调用了 Googletagmanager,这是什么东西唉,之前爬虫虫也没遇到过(又是我知识盲区了

call stack

查了一下,是谷歌的标签管理器,都诞生挺久了然而并不知道。

Google Tag Manager helps make website tag management simple with tools & solutions that allow small businesses to deploy and edit tags all in one place.

这里是他的官网

上去看了一下,感觉就是可以动态修改前端的代码,不用直接修改原本的网站文件,不需要重新部署。而且还自带版本管理,可以多人合作之类的吧。

谷歌的统计也是用这个来实现的。

不过有个缺点是,国内访问比较慢而且说不定哪天就连接不上了。

emmm 后面有空感兴趣再折腾吧(

googletagmanager




Quest 2

来了来了!第二个 Quest 来了!

https://twitter.com/jetbrains/status/1237694815283879943

Quest2

.spleh A+lrtC/dmC .thgis fo tuo si ti semitemos ,etihw si txet nehw sa drah kooL .tseretni wohs dluohs uoy ecalp a si ,dessecorp si xat hctuD erehw esac ehT .sedih tseuq fo txen eht erehw si ,deificeps era segaugnal cificeps-niamod tcudorp ehT

很明显倒叙了,这里反过来得到:

The product domain-specific languages are specified, is where the next of quest hides. The case where Dutch tax is processed, is a place you should show interest. Look hard as when text is white, sometimes it is out of sight. Cmd/Ctrl+A helps.

提示了是个与 domain-specific languages有关的产品,quest相关的文字设置为白色的了。


Step 1

谷歌搜一下,直接就得到了 JetBrains 家的 MPS (MetaProgrammingSystem) (之前也没了解过

谷歌搜索结果

访问它的官网吧,传送喵:https://www.jetbrains.com/mps/


Step 2

在网页里同样搜一下 quest

网页里找到pdf

发现有个 PDF 文件唉~

打开来看看吧!


Step 3

于是继续在 PDF 里搜索quest

发现果然是白色的文字23333.

Step3

Ctrl + A ,Ctrl + C / V,看一下那一块的文字

This is our 20th year as a company,
we have shared numbers in our JetBrains
Annual report, sharing the section with
18,650 numbers will progress your quest

Step 4

上面提示了JB 20周年年度报告,想起来官网首页上有个链接来着。

20周年

https://www.jetbrains.com/company/annualreport/2019/

插几句题外话。

就是个年报吧,看上去 JB 的确挺受欢迎哒!(PyCharm 真挺好用的

下面这个视频封面的小黄鸭让我想到了 小黄鸭调试法 23333

(这个 Dogfooding 用的有点意思

这回再来搜索 quest

Step4

第七届 Hackathon。(emmm

<span class="react-js-quick-share" data-hashtag="JetBrainsQuest" data-text="I have found the JetBrains Quest! Sometimes you just need to look closely at the Haskell language, Hello,World! in the hackathon lego brainstorms project https://blog.jetbrains.com/blog/2019/11/22/jetbrains-7th-annual-hackathon/" data-theme="dark">

Step 5

访问 https://blog.jetbrains.com/blog/2019/11/22/jetbrains-7th-annual-hackathon/

重点关注 Haskell languageHello,World!hackathon lego brainstorms project

看来就与这张图有关了呢!

Step5

看来就是右边图上这段话了。emmm

d1D joo KN0w 
J378r41n2 12 
4lw4y2 H1R1Ng? 
ch3ck Ou7 t3h K4r33r2 
P4g3 4nD 533 1f 
7H3r3 12 4 J08 0R 4 
KW35T 0 cH4Ll3n93 70 
g0 fUr7h3r @ 13457.

草(一种植物),我大概翻译出来了!

Did you know 
jetbrains is 
always hiring?
Check Out the kareers
Page and see if 
here is a job or a
kwest challenge to
go further at least

形象带师 233333

(讲真,觉得 CTF 有趣的一个原因大概就是从各种奇怪的数字大小写字母混杂的形象的 flag 开始的吧

(觉得出题人脑洞就很大

比如随手来一个 → flag{1t_I5_s0_Fun_70_S33_y0u_H3r3}。😁

不过这里第一次见把2当作s的。

还有kareers应该是careerskwest应该是quest吧 23333.

查了一下,发现原来这个叫做 Leet,又叫 黑客语

详见 VV 1 |< 1 P 3 [) 1 4click here.

所以 JB 顺便再来招个聘?

看来下一个 Step 是个与 job 有关的地方了。


Step 6

在官网上找到了 Company -> Careers -> Jobs.

https://www.jetbrains.com/careers/jobs/

搜索Quest,发现了一个奇怪的职位。那就是它了!

Step6

于是来到了这个页面 ↓。

fearless_quester

233333 这里回顾了一下这一路 journey 经历过的那些有意思的东西。

fearless_quester2

到下面这里,点击按钮,会给它的邮箱发个邮件。

mailto:[email protected]?subject=Fearless Quester - Any - any

然而发现并不是啦 23333.

然后再看回 To progress with your quest what you’ll need

应该是与一个游戏开发有关,查了一下 Konami games.

日本最具影响力的游戏软件商之一,KONAMI(科乐美)。

可能是有个游戏啥的?


Step 7

找了找 game develop,发现了一个这个网页

game_development

然后找死找不到quest,难受死了。

在 Network 里找个半天也没找到嘤嘤嘤。

就在一脸懵逼的时候,想起来好像没有用 Chrome 的无痕模式((

后来发现是我的浏览器开了弹窗拦截,把找个也给误拦截了emmm。

再一搜,发现了相关的 js 文件。

Step7


Beat The Quest

block-breaker.js 这个文件里搜索quest,发现了第二个 quest 的 code ↓。

(可能这个也是非预期解了23333

block-breaker_JS

"\n        |\n        |\n        |   Congratulations you have beat the second quest.\n        |   Use the code key GamesAreFun on the\n        |   quest page https://jb.gg/quest to claim your prize.\n        |     \n    "

所以 Code 就是 GamesAreFun 啦~

拿着它去 https://jb.gg/quest 换新的授权吧嘻嘻嘻。

发现也是跳转到之前的那个页面( https://www.jetbrains.com/promo/quest/ )。

同样输入邮箱和 Code 就好了。

又得到3个月的免费授权!上面说了可以叠加使用。

Beat_quest2

You have passed the second quest and have proven yourself a worthy contender for our devious puzzles. We have one last quest in this series for you. It will be the ultimate quest, and it will secure your place in the halls of JetBrains Quest legend.

A little @jetbrains bird will deliver the next clue – so do some birdwatching,

噫!还有一个终极的 quest 等着大家呢!

猜一猜是不是六个月的授权,然后凑成一整年呢哈哈哈哈哈。


然后在邮件结尾又发现了 Leet,就是 Step5 中提到的那个黑客语。这才发现原来 Quest1 的邮件中也有。

可能这也算是一个暗示/hint 吧!

email_leet

Y0U H4V3 R3C13V3D 7H15 3M41L B3C4U53 Y0U H4V3 P4RT1C1P4T3D 1N J3TBR41N5 QU35T

这里还可以取消邮件订阅啥的,应该还算挺友好的吧。



Step7 中 game dev 页面的游戏解法

再回去看一下这个游戏到底啥回事。结合再上一步中的提示。

To progress with your quest what you’ll need:

  • To check out what we have for game developers.
  • Be geeky enough to remember how you used to cheat at Konami games.
  • Try cheating on the page.

看了一下别人的讨论,才大概明白这个的意思。

他是想让你用在 Konami games 里积累的技巧来唤出游戏界面,然后尝试完成游戏,或者尝试在网页中作弊完成(可能是上面的非预期解吧)。

根据别人的说法,在网页里通过依次按下键盘上的 上上下下左右左右BA 这几个键,就能唤出游戏界面了!

游戏开始界面

原来就是个弹球游戏啊 23333. 而且球掉了还可以继续玩。

看了一下是通过一个 canvas 来实现的。

把条块消除得差不多就看到 code key 啦!

game



小结

感觉 JetBrains 的这两个 Quest 难度还好,还是挺友好的。

于是就白嫖了总共六个月的 JB 全家产品免费授权。

(不过之前就有教育邮箱的免费授权呢

所以通过这个 Quest,让我们更深入地了解了 JB?说不定还能顺便招聘?

(这大概是其本意吧?(盲猜

注意一下上面的内容仅供学习研究,转载的话记得留下本文链接呢。

欢迎一起交流嘻嘻嘻。

(溜了溜了


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