Cryptix CTF 2019 Writeup
Contents
URL: https://cryptixctf.com/challenges
上位に賞金が出るやつでしたけど、参加者が300チーム弱と、意外と狙い目のCTFだったかもです。
ただし、全問正解しないとダメですけどね。
[Forensics]: Hidden deep within (400 points)
Challenge
“This is just noise… There is nothing….”
Attachments:
- useless.png
Solution
「青い空を見上げればいつもそこに白い猫」でLSB立てたらPNGのヘッダが見えたので、バイナリデータ保存したところ、“flag{Haha_fake_flag}” と書かれたPNGファイルになりました。
そのPNGに対してZstegかけたらフラグが取れました。
Flag: flag{st3g4n0gr4phy_i5_34sy}
[Web]: Your ID please
Challenge
This is super secure, confidential research. You are just not meant to access it. Don’t even try, it’s futile.
Okay, you don’t believe me? have the source code too!
https://cryptixctf.com/web4/php_code.txt
https://cryptixctf.com/web4
Attachments:
- php_code.txt
|
|
Solution
Burpでpwdのところをpwd[]に書き換えてフォワードします。
ID=“SuperUser1337”&pwd[]=pass
Flag: flag{Why_Juggl3_th3_Typ5}
[Reversing]: Let’s climb the ladder (250 points)
Challenge
Here is an executable. You know what to do.
Note: The flag format is as usual flag{XXXX…}
Attachments:
- passphrase (ELF 64-bit)
Solution (Unsolved…)
Ghidraでデコンパイルします。
|
|
長さ0x15 (21文字) でチェックしていて、それぞれのif文を解析すると、たぶんこんな感じかな〜と思ったんですけどね。
00 : r 01 : 3 // if ((int)pcParm1[2] - (int)pcParm1[1] == 1) { 02 : 4 03 : d // if ((int)*pcParm1 + (int)pcParm1[3] == 0xd6) { 04 : i // if ((int)pcParm1[4] - (int)pcParm1[3] == 5) { 05 : n // if ((int)pcParm1[6] + (int)pcParm1[5] == 0xd5) { // 110 + 103 = 213 06 : g // if ((int)pcParm1[5] - (int)pcParm1[6] == 7) { // 110 - 103 07 : _ // if ((int)pcParm1[7] - (int)pcParm1[8] == 0x2b) { 08 : 4 // if ((int)pcParm1[2] == (uint)(pcParm1[8] == 0)) { 09 : 5 // if ((int)pcParm1[9] == (uint)(pcParm1[10] == 0)) { 10 : 5 // if ((int)pcParm1[10] - (int)pcParm1[8] == 1) { 11 : 3 // if ((int)pcParm1[1] == (uint)(pcParm1[0xb] == 0)) { 12 : m // if ((int)pcParm1[0xd] + (int)pcParm1[0xc] == 0xcf) { // 98 + 109 13 : b // if ((int)pcParm1[0xd] * (int)pcParm1[0xc] == 0x29ba) { // 2 * 7^2 * 109 = 98 * 109 14 : l // if ((int)pcParm1[0xf] - (int)pcParm1[0xe] == 0xd) { 15 : y // if ((int)pcParm1[0xf] - (int)*pcParm1 == 7) { 16 : _ // if ((int)pcParm1[7] == (uint)(pcParm1[0x10] == 0)) { 17 : d // if ((int)pcParm1[3] == (uint)(pcParm1[0x11] == 0)) { 18 : 4 // if ((int)pcParm1[8] == (uint)(pcParm1[0x12] == 0)) { 19 : m // if ((int)pcParm1[0xc] == (uint)(pcParm1[0x13] == 0)) { 20 : n // if ((int)pcParm1[5] == (uint)(pcParm1[0x14] == 0)) {
このパスフレーズを使ってプログラムを実行すると、
root@kali:~/cryptixctf# ./passphrase r34ding_455embly_d4mn Please wait while we are authenticating.... ....... .... You are in!
“You are in!” と言われるんですが、実際にはフラグとして通りませんでした。
Discordでも、ご機嫌ナナメの人が数名いました。
Flag: (?)flag{r34ding_455embly_d4mn}
それはさておき、Ghidraのデコンパイルの結果がちょっと変だと思いました。
|
|
if文にマッチしたらfail()だし。
“== 0” だし。。
radare2で見ると、こんな感じ。
|
|
ふーん、まいっか(笑)
Author CaptureAmerica @ CTF フラxxグゲット
LastMod 2019-10-14