仙台CTF2019 Writeup

2019/11/16に仙台で開催された仙台CTF2019に参加をしてきたので、そのWriteupを書きます。 ※順次更新予定

制御システム

大人の事情でここのwriteupは詳しく書けないのですが、内容はModbus/TCPを使って制御されている機器のhack。
プロトコルの仕様は公開されているので、知らなくてもそれを読んで頑張る系。

雑学

Tri1

[問題]
・ウェブサイトやソフトウェアなどにログインする際に「IDとパスワード」等による認証の後、必要に応じてもう1回認証を求める認証方式を○○認証という。

ググったら出てくる(ググらないでも出てくる)。flagは二段階認証

Tri2

[問題]
・某セキュリティ研究者が2019年3月にブログで発表した情報によると、台湾の某メーカー製パソコンにプリインストールされる自動更新ツールに、バックドアが仕込まれるという標的型攻撃が判明したとのことです。
・同セキュリティ研究者は、この攻撃をOperation 「○○」と名付けました。

これも有名なのでググったらすぐに出てくる(ググらないでも出てくる)。アススのLive Updateのやつです。
flagはOperation ShadowHammer

Tri3

[問題]
・某セキュリティ研究者が2019年6月にブログで発表した情報によると、RDP接続が可能な端末に対し、ブルートフォース攻撃で感染を広げるボットネットが確認されたとのことです。また、同ボットネットはすでに侵害済みと見られる150万件のホストとアカウント情報のリストを保有していたとのことです。
・同セキュリティ研究者は、このボットネットを「○○」と名付けました。

これもアレですね。ちょっと前に賑わいましたね。 flagはGoldBrute

ネットワーク/ログ解析

NL1

[問題の背景]
DMZに設置しているIDSの監視を外部に委託しています。委託先から公開Webサーバに対するSQLインジェクション攻撃を検知したとの連絡がありました。
・公開Webサーバには、データベースからデータを取得して動的にデータを更新して表示する機能があります。
・あなたは、この攻撃の影響を確認するため、調査を実施することにしました。

[問題]
・IDSが攻撃検知時に自動作成したPCAPファイルを分析し、攻撃元のIPアドレスを特定してください。

問題文の通り、配布された2つのpcapファイルから攻撃元のIPアドレスを特定する問題。
とりあえずNetworkMinerで開いてみると、以下のようにWebサーバに接続してきているクライアントが1つのみだったので、FlagはそのクライアントのIPアドレス

f:id:somebodyN:20191120100019p:plain

NL2

[問題]
・パスワードのハッシュ値の取得が成功したSQLインジェクションの攻撃コードを特定してください。
・攻撃者は、ウェブページのフォームに攻撃コードを投入しています。

apacheアクセスログmysqlログが配布されるので、そこからパスワードが抜かれたログを見つけて、そのPoCを提出する問題。
ログが少なかったので、mysqlのログ内からpasswdgrepすると、以下のように明らかにSQLiされてる箇所があった。

f:id:somebodyN:20191120120720p:plain SELECT itemnum, sdesc, ldesc, price FROM itemdb WHERE '' IN (itemnum,sdesc,ldesc)が元の文なので、そこにインジェクションされている文がflag。

NL3

[問題]
SQLインジェクションを実行した攻撃者のアカウント名(Full name) とパスワードを特定してください。

apacheログを見ると、攻撃者が攻撃の開始直前にアカウントを作成している(一行目)。

31.31.74.47 - - [11/Nov/2019:23:01:33 +0000] "POST /cgi-bin/badstore.cgi?action=register HTTP/1.1" 200 4065
31.31.74.47 - - [11/Nov/2019:23:01:33 +0000] "GET /cgi-bin/bsheader.cgi HTTP/1.1" 200 143
31.31.74.47 - - [11/Nov/2019:23:02:00 +0000] "GET /cgi-bin/badstore.cgi?searchquery=%27&action=search&x=24&y=11 HTTP/1.1" 200 487
31.31.74.47 - - [11/Nov/2019:23:03:04 +0000] "GET /cgi-bin/badstore.cgi?searchquery=a%27+%3D+%27a%27+UNION+SELECT+VERSION%28%29%2C2%2C3%2C4+%23&action=search&x=10&y=2 HTTP/1.1" 200 8173

registerをしている23:01:33mysqlログの方で見てみると、以下のようなユーザが登録されていた。

191111 23:01:33       17 Connect     root@localhost as anonymous on badstoredb
             17 Query       INSERT INTO userdb (email, passwd, pwdhint, fullname, role) VALUES ('AVGVSTVS@roma.it', '393936af6c0391ca9e00f8ee852c1205','purple', 'アウグストゥス', 'U')
             17 Quit       

以上、flagはアウグストゥス-393936af6c0391ca9e00f8ee852c1205...かと思っていたが、弾かれたので問題文をよく見直してみると"パスワード"とあった(submitしたのはハッシュ化されたパスワード)。
見た感じ16バイトだったのでとりあえずmd5で戻してみるとprimusと出てきたので、flagはアウグストゥス-primus