net-nyan-cat

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

0xLaugh CTF writeup

2021/01/15~行われた0xLaugh CTFのwriteupです。
1500点で371チーム中46位でした。
2021年度初の人権を感じたCTFです。
(先週の某CTFで精神を破壊されたため)
以下、writeupです。

Web

Cakes Shop

ページにアクセスするとケーキの購入画面になります。 f:id:xrzhev:20210116202843p:plain Flagも販売中ですが、手持ちの資金が少なく購入できません。

Userinfoという名前でCookieが格納されるので、中身をチェックします。 f:id:xrzhev:20210116203054p:plain
文字列の特徴を推察し、base32でデコードすると、現在の手持ちの資金が出力されました。
f:id:xrzhev:20210116203211p:plain
これをいい感じの額に書き換えます。 f:id:xrzhev:20210116203247p:plain f:id:xrzhev:20210116203314p:plain f:id:xrzhev:20210116203333p:plain いけましたね! Flagを購入します。
f:id:xrzhev:20210116203400p:plain

Flag : 0xL4ugh{baSe_32_Cook!es_ArE_FuNny}

EasyLogin

ページにアクセスするとログイン画面が出現します。 f:id:xrzhev:20210116203608p:plain
ページのソースコードにコメントでユーザーが記載されています。
f:id:xrzhev:20210116203644p:plain
上記のID,パスワードでログイン後、記事をPOSTできる画面に遷移します。
適当にPOSTしてみます。
f:id:xrzhev:20210116203844p:plain とくに珍しい画面ではありませんでしたが、POST後の画面のソースコードに興味深いコメントがあります。
f:id:xrzhev:20210116203925p:plain
HTMLタグでflagHuntと記載せよ、という意味にとれます。
また、下の.css.jsもバチボコに怪しいです。
.css.jsも確認します。
f:id:xrzhev:20210116204035p:plain どうやらこれがフラグを司る鍵のようです。
前述のflagHuntのidが存在していると色々ブラウザのコンソールに文字を出力しているようです。
ブラウザの開発者ツールで適当な要素のidをflagHuntに変更します。
あとは.css.jpのコードをコピペでコンソールに張り付けて実行します。
f:id:xrzhev:20210116204910p:plain

Flag : 0xL4ugh{N0_Syst3m_1s_S@f3_3v3n_Y0u}

多分、これはPOST時のインジェクションによってHTMLタグを埋め込む問題だと思うんですが、このようなスタイルでもできました。

Sad_Agent

ページにアクセスするとこんな画面が出現します。 f:id:xrzhev:20210116205113p:plain
とりあえずUserAgentをsadに変更してみます。
f:id:xrzhev:20210116205240p:plain
画面が変わりました。
また、POSTするデータの中にhidden要素でurlという項目があります。 f:id:xrzhev:20210116205336p:plain
base64でデコードするとPHPのコードが紛れていました。 f:id:xrzhev:20210116205527p:plain
どうやら、この値をもとにevalで実行させているのだと思います。
system関数でディレクトリを観察します。 f:id:xrzhev:20210116205611p:plain
f:id:xrzhev:20210116205641p:plain
f:id:xrzhev:20210116205714p:plain
無事にコードが実行されました。
highlight_file関数でindex.phpを確認します。
f:id:xrzhev:20210116205927p:plain f:id:xrzhev:20210116210035p:plain f:id:xrzhev:20210116210023p:plain

flag : 0xL4ugh{S@dC0d3r_M3mbe3r_1n_0xL4ugh_&_sad_W0rld}

Reverse Engineering

Home

a.outという実行形式ファイルが与えられます。
stringsで見るだけ。
f:id:xrzhev:20210116211016p:plain

Flag: 0xL4ugh{34SY_R3V_Ch411}

WannaCry

chall.outという実行形式ファイルが与えられます。
ghidraで見るとフラグらしき値がHTMLのエンティティとしてエンコードされた形で平文で出力されそうな部分が確認できます。
f:id:xrzhev:20210116211421p:plain
デコードして確認します。 f:id:xrzhev:20210116211336p:plain

Flag : 0xL4ugh{Ourfirsteventenjoy}

Forensics

Baby Shark

パケットキャプチャファイルが渡されます。
httpでフィルタしてPOSTしている値を見ていたところ、怪しい文字列を確認しました。
f:id:xrzhev:20210116211810p:plain
password部分を切り取ってデコードできるか試します。
base58でデコードできました。
f:id:xrzhev:20210116211913p:plain
Flag : 0xL4ugh{W1R3SH4ARK_I5_N0I53Y}

Woobs

パケットキャプチャファイルが渡されます。
前の問題同様、httpでフィルタしてPOSTの値を見ていたところ怪しい文字列を発見しました。
問題文中にユーザー名を紛失した、という形で記載があったため、ユーザー名のデコードを試みます。
f:id:xrzhev:20210116212203p:plain
URLデコードしたあと、base85でデコードをすると、URLが出現します。 f:id:xrzhev:20210116212316p:plain
与えられたページにアクセスしても404となります。 f:id:xrzhev:20210116212353p:plain
他の記事をチェックし、URLの構造を確認します。
f:id:xrzhev:20210116212439p:plain
ここで、問題文中で与えられていた、d02a7960という値が合致すると思い、URLに追加してアクセスしました。
f:id:xrzhev:20210116212605p:plain
外部ファイル共有サイトのリンクが張られています。
リンクからファイルをダウンロードすると、モールス信号が流れるwavファイルが出現します。
あとは読み取るだけです。
f:id:xrzhev:20210116212817p:plain

Flag : 0xL4ugh{S0METIM35SH4RK1SFR13ND1Y}

Crypto

Cyclops

点字の書かれた画像ファイルが渡されます。
f:id:xrzhev:20210116213001p:plain

気合でデコード(?)。

Flag : 0xL4ugh{I_Th1nk_Br1ll3_W45_$MART}

Programming

Hashem

問題文を紛失したので詳しいことが書けません。
以下記憶を頼りに。

  • ハッシュ値 bd737ce0d884c0dd54adf35fdb794b60
  • 上記ハッシュのソルト mmal7

が与えられます。 これを解読する問題です。
与えられている条件としては、
* 元の平文はアルファベット小文字で4 ~ 8文字 ということです。

今回はコードを書かずにhashcatで殴りました。

.\hashcat.exe -m 20 -a 3 -o ../found.txt ..\hasem.hash --increment --increment-min 4 --increment-max 8  "?l?l?l?l?l?l?l?l"
#hasem.hash
bd737ce0d884c0dd54adf35fdb794b60:mmal7

出力がlaughになるので、これをフラグフォーマットに乗せるだけです。
ただ、laughの前に1とか2とか付けたんですよね… 覚えてないです。
Flag : 0xL4ugh{1_laugh}

Misc

Sanity Check

ディスコにあります。
Flag : 0xL4ugh{welc0m3_t0_Our_Firs7_CTF}

Noisy

wavファイルが渡されます。
とりあえずスペクトログラムを確認したらフラグが。
f:id:xrzhev:20210116215850p:plain

Flag : 0xL4ugh{Sp3c7re_1s_Gr347}

Gesture

gesture.keyというファイルが渡されます。
このファイルはAndroid関連のロック解除のジェスチャーをハッシュ化したものです。
3*3で取りうる値も比較的少ないため、レインボーテーブルによる攻撃が可能となっています。
今回は、GestureCrackを利用し、ハッシュを平文に戻しました。

github.com

f:id:xrzhev:20210116214729p:plain

オイオイ瞬殺だよ… ということでこの数列がフラグになります。
Flag : 0xL4ugh{75214863}

1990

電話のピポパポ音が流れるwavファイルが渡されます。 multimon-ngのDTMF解析で文字起こしします。

66#666#8#33#888#33#777#999#8#44#444#66#4#666#66#7777#2#6#33#9#2#999# という入力値となっていました。
あとはこれをMulti-tap Phone Cipherのデコードをするだけです。
(ただのケータイの文字入力を文字起こししただけですが…。)
f:id:xrzhev:20210116215153p:plain

Flag : 0xL4ugh{NOTEVERYTHINGONSAMEWAY}

おわりに

このCTFでは某web問がCTF開催中にWebサーバー上からファイルが消失するというアクシデントもありましたが、楽しみながらプレイできました。
Gestureなんかはリアルなハックに近く、非常に面白いと感じました。
2021年もハック!ハック!するぞ~!