net-nyan-cat

俺たちがインフラ野郎Aチーム

SharkyCTF Writeup

2020/5/9~行なわれていたSharkyCTFのwriteup。

772ptで263位。 修行が足りなさすぎる(´;ω;`) 

 

 

 

Forensics - Romance Dawn (82pt)

pngファイルが与えられますが、ファイルが壊れています。

pngcheckでファイルを確認します。

f:id:xrzhev:20200512132940p:plain

エラーが出てますね。

pngの必須チャンクである、IDATチャンクが存在せず、EASYという謎のチャンクが存在しています。

PNGのファイルフォーマットの一覧を見てもEASYというチャンクは存在しません。

 

www.setsuki.com

EASYチャンク = IDATチャンクなのでは?という仮説を立て、検証しました。

IDATチャンクではチャンクタイプ前4バイトにチャンクデータのサイズが格納されているので、それをチェックしてみます。

最初に現れるEASYチャンクは0x88バイトです。

そこの前4バイトは2000という表記になっているので、0x2000バイトぶんイメージデータが格納されています。

f:id:xrzhev:20200512134051p:plain

 

起点をChunk Data Lengthとすると、
Chunk Data Length(4バイト) + Chunk Type(4バイト) + CunkData(0x2000バイト) + CRC(4バイト) = 0x200C

0x200Cバイト先を確認すると、ちょうどChunk Data Lengthが存在していたので、これがIDATっぽいです。

f:id:xrzhev:20200512135613p:plain

 

EASYとなっているChunk Typeを IDAT に変更します。

変更するとファイルが正常に見れるようになりフラグとなります。

f:id:xrzhev:20200512140113p:plain

 

 

Stego - basic LSB (50pts)

kawaiiねこちゃんの画像が渡されます。

 

f:id:xrzhev:20200512140347p:plain

 

とりあえずstegonlineにぶちこみます。

georgeom.net

 

画像の各色のLSBイメージをチェックした後、文字列出力するとフラグがありました。

 

f:id:xrzhev:20200512140637p:plain

 

 

 

WEB - XXExternalXX (70pt)

 なんかxmlを読み込んで画面に出すプラットフォームっぽいです。

説明文では /flag.txt にフラグが隠されてるとのこと。

 

f:id:xrzhev:20200512141022p:plain

 

 名前からして怪しいのでXXEを試してみました。

まずは、表示しているxmlファイルの構造をチェックします。

 

f:id:xrzhev:20200512141234p:plain

rootの下にdata要素があってその中にコンテンツがありますね。OKです。

いろいろ調べてたらサイト自体の脆弱性としてRFIとかディレクトリトラバーサルがありました。

 

ここではflagを得る手段として、自分が保有するwebサーバー上にXXE用のxmlファイルを配置し、それをRFIで読み取らせ、XXEを成功させてみました。

 

XXEを用いてflag.txtを読み取り、その内容をdata要素にぶち込むようなxmlファイルを作成します。

 

<?xml version="1.0"?><!DOCTYPE root [<!ENTITY test SYSTEM 'file:///flag.txt'>]><root><data>&test;</data></root>

 

というファイルを作成し、自分のWEBサーバーに格納しました。

URLをGETパラメーターに入れてあげればフラグゲットです

 

f:id:xrzhev:20200512141957p:plain

 

 

WEB - LOGS IN! PART 1 (155pt)

 

f:id:xrzhev:20200512142352p:plain

 

symfonyの画面が見えちゃってますね。

管理パネルをいろいろ突っついてみます。

WEBフレームワークだったらルーティング用のファイル見つけたらいいな~って思ってたら速攻見つけました。

 

f:id:xrzhev:20200512142611p:plain

 

アクセスしたらフラグゲット。

 

f:id:xrzhev:20200512142706p:plain

Misc - Trolled (50pts)

burpで拾えるよ

 

 

NETWORK - RattataTACACS (167pts)

パケットキャプチャのデータが渡されます。
中を見てみると、TFTPでciscoルーターのコンフィグを転送しているものとTACACS+というプロトコルで通信していることがわかります。

 

TACACS+はシスコ独自のプロトコルで、RADIUSっぽく使えるらしいです。
詳しくは以下。 NW機器結構触ってたけど使ったことないなあ。

www.infraexpert.com

TACACS+ではパケット全体をクライアント - サーバ間で共有鍵を用いて暗号化しているっぽいですね。

CISCOのコンフィグレーションにTACACSの認証設定が書いてあるはずなので覗いてみましょう!

WireSharkでTFTPで通信してたコンフィグをダンプします。

 

f:id:xrzhev:20200512143530p:plain

 

89行目にTACACSの認証設定が入ってます。
当然ながら、暗号鍵はハッシュ化されてますね。

オンラインツールでハッシュの解読にチャレンジします。

 

f:id:xrzhev:20200512143827p:plain

見事に平文にできました。

平文をWireSharkに食わせてTACACS+の通信内容を解読していきます

 

WireSharkの編集タブ > 設定を開き、ProtocolsでTACACS+を選択し、
先ほどの暗号鍵を入力し、OKをクリックします。

 

f:id:xrzhev:20200512144147p:plain

 

するとWireShark上でTACACS+の通信の平文を見ることができます。

f:id:xrzhev:20200512144306p:plain

 

パケットを見てくとフラグゲット
NW系のネタ好きなので解いてて楽しかったです。

 

f:id:xrzhev:20200512144344p:plain

 

 

REVERSE - z 3 r o b o t w a v e s (188pts)

ghidraで中身を見てみる。

check_flag関数で入力を見てます。

 

f:id:xrzhev:20200512144651p:plain

 

check_flag関数はこちら。

こーれは無理じゃないですかね…?

 

f:id:xrzhev:20200512144736p:plain

 

困ったのでangrを使ってみました。
初めて使ったんですが、マジでちゃんと動いてビビりました。

 

まずmain関数のアドレスをチェック。0x1337ですね。

f:id:xrzhev:20200512145025p:plain



次に目標とする到達地点のアドレス、失敗とみなすアドレスをチェック。

目標到達地点のアドレスは0x1413です。

 

f:id:xrzhev:20200512145152p:plain

 

失敗とみなすアドレスは0x142dとします。

 

f:id:xrzhev:20200512145318p:plain

 

では、angrで動かしてみます。

コードは以下。

import angr

base = 0x400000
main = base + 0x1337

proj = angr.Project("./z3_robot", auto_load_libs=False)
state = proj.factory.entry_state(addr=main)
simgr = proj.factory.simulation_manager(state)

good = base + 0x1413
bad  = base + 0x142d

simgr.explore(find=good, avoid=bad)


result = simgr.found[0]
for i in range(3):
    print(result.posix.dumps(i))

 

 

なんか10秒くらいで結果が返ってきます。 凄過ぎだろ。

 

f:id:xrzhev:20200512150616p:plain

 

というわけで cl4ss1c_z3___t0_st4rt_:) を実際に入力してみましょう!

 

f:id:xrzhev:20200512150731p:plain

 

フラグゲットですね!

 

 

まとめ

angr凄すぎん? 結果帰ってきたとき声出たよ

もっと修行して最強のインフラエンジニアになります。