SECCON Beginners 2019で使ったコマンド
Team 283rd place 260 points
個人 483rd place
結局1問しか解けなかった。
.bash_history
からコマンドがなくなってしまわないうちに記録しておく。
基本的に使うコマンド
file
なんのファイルか教えてくれる
$ file flag
flag: POSIX tar archive
strings
バイナリファイルの中のASCIIコードを表示してくれる
$ strings secconpass
/lib64/ld-linux-x86-64.so.2
libstdc++.so.6
__gmon_start__
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
base64
base64で暗号化されているものを復号化する
$ base64 -d file1 > file2
Revrsing 「seccompare」
時間内には解けてない
ltrace
ダイナミックリンクライブラリの呼び出しを追跡するプログラムらしい。
似たようなものにstrace
というのがあるらしい。
失敗したら出てきた。
$ ltrace ./seccompare 1
strcmp("ctf4b{5tr1ngs_1s_n0t_en0ugh}", "1") = 50
puts("wrong"wrong
) = 6
+++ exited (status 0) +++
objdump
16進ダンプする
リダイレクトして、テキストにしたら、"}"を検索すれば近くに出力されているのがわかる。
$ objdump -s seccompare
400630 c645d063 c645d174 c645d266 c645d334 .E.c.E.t.E.f.E.4
400640 c645d462 c645d57b c645d635 c645d774 .E.b.E.{.E.5.E.t
400650 c645d872 c645d931 c645da6e c645db67 .E.r.E.1.E.n.E.g
400660 c645dc73 c645dd5f c645de31 c645df73 .E.s.E._.E.1.E.s
400670 c645e05f c645e16e c645e230 c645e374 .E._.E.n.E.0.E.t
400680 c645e45f c645e565 c645e66e c645e730 .E._.E.e.E.n.E.0
400690 c645e875 c645e967 c645ea68 c645eb7d .E.u.E.g.E.h.E.}
4006a0 c645ec00 488b45c0 4883c008 488b1048 .E..H.E.H...H..H
ghex
GUIのバイナリエディタ
objdumpと同じように検索で"}"を見つけることができる。
container
これも自分では解けてない
foremost
バイナリデータから画像等を抜き出す
$ foremost -i containers -T
dump
これだけ自力で解けた
流れ
- Wiresharkでpcapデータからファイルを抽出
- 抽出したデータおよびファイル名から8進数表記のデータ部分を切り取る
(データ部分だけ見ても8進数だとわかるが、ファイル名にhttpでgetしたときの
コマンド cmd=hexdumpなんとか が出ていて、%20等を戻してあげると
fileを8進数にして取得していることがわかる) - excel または LibleCalcで 8進数から16進数に変換(OCT2HEX関数)
- 変換した16進数をテキストに保存(file1として保存)
- xxdコマンドを使用して、16進数のテキストファイルをバイナリに変換(xxd -r ./file1 file2)
- fileコマンドでファイル形式を確認するとzipファイル($ file ./file2)
- ファイル名をflag.zipに変更($mv file2 flag.zip)
- unzipするとflag.jpgが出てくる
- jpgファイルを閲覧するとflagが書いてある
wireshark
言わずとしれたpcapファイルを解析するためのツール
pcapファイルから受信したファイルを取り出すことができる。
file-オブジェクトをエクスポート-http-ファイルを選択。
(今回、http通信だったのでhttpを選択した)
xxd
16進数を書いたtxtからバイナリファイルにする
$ xxd -r ./hexdump hexdump2
LibreCalc
Oct2Hex という関数を使いたかったので使用