April Fools' GTF 2017 供養(Writeup)

April Fools' GTF 2017に参加。1809ptで15位。

Welcome!! (Misc 555)

Please input your password.(Today is April Fool)

Today is April Fool がフラグ、かと思いきや何でも通るっぽい。

thinking_face (Trivia 51)

Good GTFs always have trivia tasks.

🤔 (U+1F914) がフラグ。

Japanese Contest (Trivia 61)

What’s the most famous CTF in Japan.

SECCON がフラグ。

Houses (Trivia 91)

Prime
Mind
Force
Lore
Spirit
Chaos
and more?

PhrackとかCardsとかナンチャラとか打った後に、Einherjarと打ったら通った。 Orangeも打っておけばよかった。

O-mikuji (Guess 100, -500)

The flag is a digit.

6と答えると100ptだが、別の数字を答えると-500pt。

Kyo TO Kyo (Guess 75)

Can you read Japanese?

京都府西東京西東京西東京西東京西東京都東京都府西東京都東京都府西東京西東京西東京都東京都府京都府西東京西東京都東京都府西東京西東京西東京都東京都府京都府京都府西東京都東京都府西東京都東京都府西東京都東京都府西東京西東京西東京都東京都府西東京西東京西東京都東京都府京都府西東京西東京都東京都府京都府京都府京都府西東京都東京都府京都府西東京都東京都府京都府西東京都東京都府西東京都東京都府京都府西東京都東京都府京都府京都府京都府西東京西東京都東京都府西東京西東京都東京都府京都府西東京西東京西東京西東京西東京西東京都東京都府京都府西東京都東京都府京都府京都府西東京西東京都東京都府京都府西東京西東京西東京西東京西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京西東京都東京都府京都府西東京都東京都府西東京西東京西東京都東京都府京都府西東京都東京都府京都府京都府西東京西東京都東京都府京都府西東京西東京都東京都府西東京西東京西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京西東京都東京都府京都府西東京都東京都府京都府京都府西東京西東京都東京都府京都府西東京西東京西東京西東京西東京都東京都府京都府西東京都東京都府西東京都東京都府京都府西東京都東京都府京都府京都府京都府西東京西東京都東京都府西東京西東京都東京都府京都府西東京西東京西東京西東京西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京西東京都東京都府京都府西東京都東京都府西東京西東京西東京都東京都府京都府京都府西東京西東京都東京都府西東京西東京西東京都東京都府京都府西東京西東京都東京都府京都府西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京都東京都府京都府西東京都東京都府西東京都東京都府西東京西東京西東京都東京都府京都府西東京都東京都府西東京西東京西東京都東京都府京都府京都府西東京西東京西東京西東京西東京西東京都東京都府京都府西東京都東京都府西東京西東京西東京都東京都府京都府西東京都東京都府京都府京都府西東京西東京西東京都東京都府京都府西東京西東京都東京都府京都府西東京西東京都東京都府京都府西東京都東京都府西東京都東京都府西東京西東京都東京都府京都府西東京西東京都東京都府京都府西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京都東京都府京都府西東京西東京西東京都東京都府京都府西東京西東京都東京都府京都府西東京西東京西東京都東京都府西東京西東京都東京都府京都府西東京都東京都府京都府京都府西東京都東京都府京都府京都府京都府西東京西東京都東京都府西東京都東京都府京都府京都府京都府京都府西東京都東京都府

とりあえず「東京都」を消すと「府」と「西」が残ったので、それぞれ1/0に変換して16進表記したところそれっぽい数字が出た。

$ cat test.txt | sed 's/東京都//g' | sed 's/府/1/g;s/西/0/g'
1000001010001100100011101010100010001100111101101101011011110010011000000110111001100000101111100110100011011100110010001011111001101110011000001101011011110010011000001011111001101000111001000110011010111110110101000110100011100000011010001101110001100110011010100110011010111110110001100110001001101110111100101111101

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 0b1000001010001100100011101010100010001100111101101101011011110010011000000110111001100000101111100110100011011100110010001011111001101110011000001101011011110010011000001011111001101000111001000110011010111110110101000110100011100000011010001101110001100110011010100110011010111110110001100110001001101110111100101111101
>>> hex(x)
'0x41464754467b6b793037305f346e645f37306b79305f3472335f6a3470346e3335335f633137797dL'
>>> hex(x)[2:-1].decode('hex')
'AFGTF{ky070_4nd_70ky0_4r3_j4p4n353_c17y}'

Scoreserver (Wave 404, 422, 500)

Railsで書かれたスコアサーバに対して、404 Not Found、422 Unprocessable Entity、500 Internal Server Errorが出るリクエストを送る問題。

404は適当なURLにリクエストを投げればよい。

$ curl -v https://score.easterns.kyoto.aka.westerns.tokyo/404
(snip)
> GET /404 HTTP/1.1
> Host: score.easterns.kyoto.aka.westerns.tokyo
> User-Agent: curl/7.49.1
> Accept: */*
>
* STATE: DO => DO_DONE handle 0x6000578a0; line 1659 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x6000578a0; line 1786 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x6000578a0; line 1796 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 404 Not Found
< Keep-Alive: timeout=5, max=100
< Content-Length: 43
< Content-Type: text/html; charset=utf-8
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< Status: 404 Not Found
< X-Request-Id: a877d931-3fda-4e7b-b1b7-641eb0d7a95d
< X-Runtime: 0.002451
< Strict-Transport-Security: max-age=15552000
< Set-Cookie: ARRAffinity=7e9446a8829326b9f60badbd177b48e8d9d142cff612a6b0eb16657aa4ba518d;Path=/;Domain=score.easterns.kyoto.aka.westerns.tokyo
< Date: Sat, 01 Apr 2017 08:06:38 GMT
<
404: APRCTF{Kyoto_Is_In_The_West_Of_Tokyo}
* STATE: PERFORM => DONE handle 0x6000578a0; line 1955 (connection #0)
* multi_done
* Connection #0 to host score.easterns.kyoto.aka.westerns.tokyo left intact

422はapplication/x-www-form-urlencodedとして不正な文字列を送ればよい。

$ curl -v --data "give me flag" https://score.easterns.kyoto.aka.westerns.tokyo/problems/5
(snip)
> POST /problems/5 HTTP/1.1
> Host: score.easterns.kyoto.aka.westerns.tokyo
> User-Agent: curl/7.49.1
> Accept: */*
> Content-Length: 12
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 12 out of 12 bytes
* STATE: DO => DO_DONE handle 0x6000578b0; line 1659 (connection #0)
* STATE: DO_DONE => WAITPERFORM handle 0x6000578b0; line 1786 (connection #0)
* STATE: WAITPERFORM => PERFORM handle 0x6000578b0; line 1796 (connection #0)
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 422 Unprocessable Entity
< Keep-Alive: timeout=5, max=100
< Content-Length: 40
< Content-Type: text/html; charset=utf-8
* Server Microsoft-IIS/8.0 is not blacklisted
< Server: Microsoft-IIS/8.0
< Status: 422 Unprocessable Entity
< X-Request-Id: be09ece7-151b-4c0d-b931-51fabf2481b0
< X-Runtime: 0.005885
< Strict-Transport-Security: max-age=15552000
< Set-Cookie: ARRAffinity=49a94ddcdeb25346ee3a2b6c760ba69b1e208509e94f78fe226be7730ca067b6;Path=/;Domain=score.easterns.kyoto.aka.westerns.tokyo
< Date: Sat, 01 Apr 2017 07:25:24 GMT
<
422: 422{Tokyo_Is_In_The_East_Of_Kyoto}
* STATE: PERFORM => DONE handle 0x6000578b0; line 1955 (connection #0)
* multi_done
* Connection #0 to host score.easterns.kyoto.aka.westerns.tokyo left intact

500はflagを不正なUTF-8文字列にしてPOSTすると発生した。

POST /problems/5?locale=en HTTP/1.1
Host: score.easterns.kyoto.aka.westerns.tokyo
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: */*
Accept-Language: en-US,en;q=0.7,ja;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://score.easterns.kyoto.aka.westerns.tokyo/problems/5?locale=en
X-CSRF-Token: HkPQbeE+mqmqRtkz9gADaH0NyeoIsd9ay1SQ/qH+myOphKZnI4nSPY76FmqzAT/X7LKuDJCGGy8IcoEadj3fMw==
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 144
Cookie: _minictf_session=[redacted]; ARRAffinity=[redacted]
Connection: close

utf8=%E2%9C%93&authenticity_token=[redacted]&flag=%FF%FF
HTTP/1.1 500 Internal Server Error
Content-Length: 90
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
Status: 500 Internal Server Error
X-Request-Id: a1cf19da-d03d-45c7-937e-4fadda3f380f
X-Runtime: 0.021744
Strict-Transport-Security: max-age=15552000
Date: Sat, 01 Apr 2017 11:16:38 GMT
Connection: close

500: FLAG{Osaka_Is_In_The_West_Of_Kyoto}; Thank you for your debugging! We'll fix it soon

test problem (Guess 50, 250)

与えられたページのタイトルを答えると50pt。

TWGTF{this_is_not_flag_and_there_is_no_more_flag}

250点はわからなかった。

所感

他に解きたかった問題は以下。

  • MyEncryption (Guess/Crypto 100)
  • Ko-Gyoku (Guess/Misc 193)
  • Find flag (Recon 189)
  • FindMe (Recon 199)