Writeup............焦ったぜ............1問も解けねぇんじゃねぇかってな............1.[Crypto]Agents[110]1.[Crypto]Agents[110]AES-OFBの問題。ncすると↓を返される。HQを選ぶと↓のように、「ignatij158040と名乗り、このメッセージをAgentに届けなさい」とおつかいを頼まれる。HQを選ぶたびに変わる。Agentを選ぶと、まず名乗れと言われる。name█さっき付けられた名前を入力すると、次にメッセージを聞かれる。info.Bye!と言われ、何も教えてくれないまま追い返される。spy.とやっぱり怒られる。改竄の仕方によっては普通に受け取ってくれる場合もある。同じ名前で2回来ると、(先のメッセージが突き返されていたとしても、)↓のように追い返される。よって、同じ名前で別々のメッセージを2回届けることはできない。spy.では解答に入る。メッセージはAES-OFBで暗号化されているようなので、まずはAES-OFBについて↓のサイトなどで勉強する。Blog勉強すると、OFBモードは1ビット単位での改竄が可能だと分かる。そこで、メッセージ中の1バイトだけを改竄してAgentに渡し、受け取ってくれるか怒られるかをチェックすることで、どのバイトが何の役割を果たしているかのヒントを得ることができる。1バイト目から順に改竄していくと、前から12バイト目の下3ビットを改竄したときに、↓のように初めて見る反応が返ってくる。posible.6872c2091fdc4ef1458500f9bd3e13b70dcb92071e623189e189bc19e6d5eb24a1b199baf0bcf964816fbe97b2371dcf777372c1f1f5b627ad8dd6360adb230a131fab73b67886b5fb3f1e077ea0b6ab76a2bc9de945195656faaca20fd08c524c10044b268e59613d0fe6f5c35a0f0f460845b4ad843eb1387fdb9e9c9f25cbどうやら12バイト目は何か重要なフラグ(CTF的な意味ではなく)が入る場所で、そのフラグが立っていたから信用された、ということらしい。HQを選んでもまたおつかいを頼まれるだけなので、この16進数のシークレットメッセージの中に重要情報が含まれていると考えられる。このシークレットメッセージはRSAで暗号化されていて、その公開鍵はさっきのAES-OFBで暗号化されたメッセージの中に書かれているということなので、それについてさらに情報を集めることにする。さっきのAES-OFBメッセージについて、12バイト目以降も改竄しながら試行錯誤していくと、以下のことが判明する。メッセージ長は必ず337バイトである。1~11、13~17、327~331、337バイト目は改竄すると確実に怒られる。18~326、332~336バイト目は改竄すると怒られる場合と怒られない場合がある。18~326バイト目はまったく同じ改竄をしても、怒られる場合と怒られない場合がある。平文が毎回変わっている。332~336バイト目はまったく同じ改竄をすると、まったく同じ応答が返ってくる。平文が毎回変わらない。↓にXORしても怒られない数のリストを示す。62]例えば332バイト目に14や15をXORしても怒られないが、6、8、9などをXORすると怒られる。65537を表しているような気がしてくる。表しているのではないかという感じがする。(1024ビットの数は10進法だと大体308~309桁ぐらいなので、桁数もそれっぽい。具体的な値は分からないし、そもそも分かったところで秘密鍵がなければ復号できない。ここで、シークレットメッセージを受け取るときに言われたことをもう一度思い返してみる。me.この文から、AES-OFBメッセージ中の公開鍵を別の値に改竄してから渡した場合、改竄後の値を用いてシークレットメッセージが作られる、と予想できる。1(スペース4つと1)に改竄し(JSON形式ではスペースは内容に影響しない)、さらに12バイト目のフラグも立てた状態でメッセージを渡してみる。ときは平文がそのまま出てくるはずである。使われたことが分かる。これをlong_to_bytes()にかけると(CTF的な意味での)フラグが出る。Writeup月別アーカイブはてなブログをはじめよう!zzk1boxさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。