RGB CTF 2020 Writeup
Contents
URL: https://ctf.rgbsec.xyz/home
最終順位は、334位でした。
こうやってみると、全然解けてないですね。。
[Beginner]: Pieces
Challenge
My flag has been divided into pieces :( Can you recover it for me?
Attachment:
- Main.java
以下が中身です。
|
|
Solution
Javaのコードの中でやっていることは、
- 文字を2で割ったものをansに追加。(16行目)
- 文字を2で割り切れた場合はansに"|“を追加、割り切れなければansに”/“を追加。(17行目)
- その結果が
9|2/9/:|4/7|8|4/2/1/2/9/
になる。(6行目)
ということで、
$ python3 >>> chr((ord('9'))*2) 'r' >>> chr((ord('2'))*2+1) 'e' >>> chr((ord('9'))*2+1) 's' >>> chr((ord(':'))*2) 't' >>> chr((ord('4'))*2+1) 'i' >>> chr((ord('7'))*2) 'n' >>> chr((ord('8'))*2) 'p' >>> chr((ord('4'))*2+1) 'i' >>> chr((ord('2'))*2+1) 'e' >>> chr((ord('1'))*2+1) 'c' >>> chr((ord('2'))*2+1) 'e' >>> chr((ord('9'))*2+1) 's'
Flag: rgbCTF{restinpieces}
[Misc]: Differences
Challenge
If a difference could difference differences from differences to calculate differences, would the difference differently difference differences to difference the difference from different differences differencing?
Attachment:
- DifferenceTest.java
Solution
所々、文字化けしてます。
やることは簡単で、バイナリエディタで値を取得し、本来の文字との値の差分を取るとフラグになる、というだけです。
最初の7文字は、rgbCTF{
なので、以下は8文字目以降です。
文字化けしている箇所のHex値は以下の通り。(8文字目以降)
E7, D5, 9F, DE, D1, A6, D3, E1, A1, A2, E2, 9F, C1, D7, 7D
本来、入るべきの文字は以下の通り。(8文字目以降)
's', 'c', 'n', 'n', 'e', 's', 't', 't', 'n', 'n', 't', 'n', 'S', 'p', '}'
ということで、
$ python3 >>> chr(0xE7-ord('s')) 't' >>> chr(0xD5-ord('c')) 'r' >>> chr(0x9F-ord('n')) '1' >>> chr(0xDE-ord('n')) 'p' >>> chr(0xD1-ord('e')) 'l' >>> chr(0xA6-ord('s')) '3' >>> chr(0xD3-ord('t')) '_' >>> chr(0xE1-ord('t')) 'm' >>> chr(0xA1-ord('n')) '3' >>> chr(0xA2-ord('n')) '4' >>> chr(0xE2-ord('t')) 'n' >>> chr(0x9F-ord('n')) '1' >>> chr(0xC1-ord('S')) 'n' >>> chr(0xD7-ord('p')) 'g' >>> chr(0x7D-ord('}')) '\x00'
Flag: rgbCTF{tr1pl3_m34n1ng}
Triple Meaning (どこがトリプル?)
[Pwn/Rev]: Too Slow
Challenge
I’ve made this flag decryptor! It’s super secure, but it runs a little slow.
Attachment:
- a.out
Solution
Ghidraでデコンパイルします。
|
|
main() を見ると、getKey() の戻り値を win() の引数にして呼んでいるのがわかります。
getKey() では、local_10 が 0x265d1d23 になるまで特定の計算をしつつループします。これが時間かかります。
local_10 は 1 ずつインクリメントしているだけなので、戻り値は計算するまでもなく 0x265d1d23 になります。
よって、単純に win() に 0x265d1d23 を渡してやるとフラグが取れます。
gdbを使って解きました。
|
|
Flag: rgbCTF{pr3d1ct4bl3_k3y_n33d5_no_w41t_cab79d}
[Beginner]: Shoob
Challenge
s h o o b
Attachment:
- shoob.png
### (Unsolved) 「青い空を見上げればいつもそこに白い猫」の「左ローテート 7回」が一番見やすかったです。
ただし、字がちゃんと読めなくて、フラグが通りませんでした。。。めんどくさくなって、降参。
Author CaptureAmerica @ CTF フラxxグゲット
LastMod 2020-07-14