僕の世界観を変えてみる

文系男子が趣味でプログラミングを勉強していくブログです。他にも日常で起きたどうでもいいことや愚痴を書いていきたいです。座右の銘は和を以て貴しとなすです。仲良くやろうよ。

CTF初心者によるCpawCTF Lv1のWriteUp

f:id:htmllifehack:20180611224631j:plain

CpawCTF - Main page

Cpaw CTF Lv1のWriteUpを書こうかな。なんて。



Q1.[Misc] Test Problem

この問題の答え(FLAG)は、cpaw{this_is_Cpaw_CTF} です。
下の入力欄にFLAGを入力してSubmitボタンを押して、答えを送信しましょう!

コピペです。

Q6.[Crypto] Classical Cipher

www.htmllifehack.xyz

前回の記事参照 or 使えるプログラミング言語 シーザー暗号で検索検索!

Q7.[Reversing] Can you execute ?

exec_meという拡張子不明のファイルをダウンロードして解析するんですが

このファイルがウイルスだったりするのでVirtualBoxなり使って仮想OS上で開きましょう。

www.htmllifehack.xyz

qiita.com

fileコマンド

拡張子がわからないファイルはfileコマンドを使って調べるようです。

toor@toor-VirtualBox:~/ダウンロード$ file exec_me
exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
toor@toor-VirtualBox:~/ダウンロード$ ./exec_me
bash: ./exec_me: 許可がありません
toor@toor-VirtualBox:~/ダウンロード$ sudo ./exec_me
[sudo] toor のパスワード: 
sudo: ./exec_me: コマンドが見つかりません
toor@toor-VirtualBox:~/ダウンロード$ ^C
toor@toor-VirtualBox:~/ダウンロード$ 

exec_meはELFという形式のようです。

▼ELFとは
Executable and Linkable Format - Wikipedia

実行は./exec_meですが許可がないということなのでsudoしてみましたがダメです。

ELF 実行方法でググるといろいろでてきます。
バイナリレベルでの調査に使用するLinuxコマンドメモ

中を見ようと思いobjdumpやstrings、あとcatコマンド使ってみましたがダメでした。

catは文字化け、ofbjdumpやstringsではフラグらしきものは見つからず

toor@toor-VirtualBox:~/ダウンロード$ objdump -s exec_me | head
exec_me:     ファイル形式 elf64-x86-64
セクション .interp の内容:
 400238 2f6c6962 36342f6c 642d6c69 6e75782d  /lib64/ld-linux-
 400248 7838362d 36342e73 6f2e3200           x86-64.so.2.    
セクション .note.ABI-tag の内容:
 400254 04000000 10000000 01000000 474e5500  ............GNU.
 400264 00000000 02000000 06000000 18000000  ................
セクション .note.gnu.build-id の内容:

writeupでヒントを探したところどうやら実行権限が与えられていなかったから実行できなかったようです。

lsにlオプションを付けて詳細を表示してみます。

toor@toor-VirtualBox:~/ダウンロード$ ls -l
合計 113988
-rw-rw-r-- 1 toor toor        0 1026  2017 IMG_5743.HEIC
-rw-rw-r-- 1 toor toor 83638506  821  2017 atom-amd64.deb
-rw-rw-r-- 1 toor toor     8556  611 08:00 exec_me
-rwxrwxr-x 1 toor toor  7077355  916  2017 geckodriver
-rw-rw-r-- 1 toor toor  2259579  923  2017 geckodriver-v0.19.0-linux64.tar.gz
-rw-rw-r-- 1 toor toor    27136  611 08:21 open_me

rは読み込み可、wは書き込み可、xが実行権限。

exec_meにはxがありません、権限を与えましょう。

権限の変更はchmodコマンドで行います。

プラスで追加、マイナスで破棄です。

toor@toor-VirtualBox:~/ダウンロード$ chmod +x exec_me
toor@toor-VirtualBox:~/ダウンロード$ ./exec_me

Q8.[Misc] Can you open this file ?

Q7同様fileコマンドで調べます。

toor@toor-VirtualBox:~/ダウンロード$ file open_me
open_me: Composite Document File V2 Document, Little Endian, Os: Windows, Version 10.0, Code page: 932, Author: v, Template: Normal.dotm, Last Saved By: v, Revision Number: 1, Name of Creating Application: Microsoft Office Word, Total Editing Time: 28:00, Create Time/Date: Mon Oct 12 04:27:00 2015, Last Saved Time/Date: Mon Oct 12 04:55:00 2015, Number of Pages: 1, Number of Words: 3, Number of Characters: 23, Security: 0

2行目にMicrosoft Office Wordの文字が...!

UbuntuにはLibule officeがもともと入っているのでこれを使います。

toor@toor-VirtualBox:~/ダウンロード$ libreoffice open_me
Q9.[Web] HTML Page

F12でブラウザのデベロッパツールを起動させます。

ページに表示されている部分以外にも、ページをより良くみせるためのデータが含まれています。

と書かれているようにbody以外を見てみましょう。

f:id:htmllifehack:20180611233515j:plain

Q10.[Forensics] River

これは面白かったです(笑)

写真にはExifと言って日時や緯度経度、何で撮影したのかという情報が記録されています。

ここからriver.jpgの場所を探します。

▼Exif情報を読み取れるサイト
EXIF確認君 - 画像情報解析ツール

Googleマップも表示されるので便利です。

Q11.[Network]pcap

pcapファイルとはパケットキャプチャファイル?ですかね。

wiresharkを使って開くようです。

「Wireshark」ネットワークプロトコルアナライザー - 窓の杜ライブラリ

おめぇwiresharkはすでにインストールされてっぞぉって出たんで驚きですね。

すでにインストール済みだったのを忘れていました。

network10.pcapをwiresharkで開けば答えが書かれています。

Q12.[Crypto]HashHashHash!

ハッシュは過去にも記事で扱いましたがハッシュ化すると元の文字列は解読できません。

しかし、レインボーテーブルを使えば別です。

それがブラウザ上でできちゃうんだからすごい話ですよね。

e4c6bced9edff99746401bd077afa92860f83de3  she-1とかでググると出てきます。

これだけフラグがすごく短いです(笑)

Q14.[PPC]並べ替えろ!

そのままですね。

僕はpythonで書きました。

num = [15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207]
num.sort(reverse=True)
''.join(map(str,num))

sortで降順、引数でreverseを指定すると昇順にできます。

mapを使わずstr(num)にすると”,”で区切られてしまいます。

sortedってのもあるようですがわからないのでmapにしちゃいました。

まあ説明はできないけどなんでなのかはわかります。

もっときれいな書き方があると思います。

まとめ

このへんは比較的簡単でしたね。

いや、拡張子がわからないファイルの調べ方とか権限の付与とかは初めてだったんでわからなかったです。

wiresharkは使い方わからなかったんですけど開くだけでOKなので苦戦はしなかったですね。

Lv1は1問10ポイントなのに対してLv2は100ポイントなので難しそうです。

まだ1問目しか解いてません。

Lv2も終わったら記事にしようかなと思います。

以上!