TSALVIA技術メモスマートフォン用の表示で見るTSALVIA技術メモCTFのWriteupや気になったツールについて書いていきます。Analyticsを利用しています。2019は、1位~3位に賞金の出る大会です。USDももらえるそうです。参加制限があり、残念ながら国籍フィルターで日本人は除外されてしまいます。Africa;今回は、「バラバラで参加しよう」という話になり、一人で参加しました。結果は、92/775位で266点でした。幅広いジャンルでの問題が多かった印象です。難易度も易しいものから高難易度の問題まで幅広く用意されていました。一人では全然時間が足りなかったので、次回は複数人で参加したいです。there.解答例Welcome問題、ゲームルールのリンク先にあるフラグを投入するだけ。問題のリンクをクリックすると、304で別のページにリダイレクトされてしまいます。curlで直接リンク先を確認すると、末尾にBase64でエンコードされたデータが確認できました。Y3licmljc3s0YjY0NmM3OTg1ZmVjNjE4OWRhZGY4ODIyOTU1YjAzNH0=</p></body></html>Base64でデコードすると、フラグを取得することができました。エンコードされたデータがあるので、とりあえずデコードしてみました。=63=72=61=63=6B=30=57=65=73=74==6F=6E=38=38=76=65=72=74=65=62=72=61=0A=0A=63=68=65=65=72=73=21=0Aデコードするとパスワードが手に入りました。フラグは、アーカイブファイルの中にあるようです。crack0Weston88vertebracheers!次に、問題文の先頭にあるドメインを足掛かりに調べます。nmapで調査をしてみます。sshとpop3のポートが開いていることが分かりました。seconds問題文に書かれているものは、pop3のコマンド履歴だったようです。LOGIN」付近を見ると、ログインユーザとパスワードがBase64でエンコードされていました。-dCombin4t1onXXYユーザ名、パスワードが分かったので、telnetで接続します。<メール番号>」コマンドでメール内容を確認します。1メールを確認すると、zipファイルが添付されているようです。Base64でエンコードされているので、デコードすると暗号付きzipファイルが出てきました。冒頭で取得したパスワードを使って展開すると、PDFファイルが出てきました。PDFファイルを開くと、フラグが書かれていました。実行して、気合で置換していきました。スマートな解き方が知りたい。!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~と入力すると、以下のようになります。phone!youtu.be/11k0n7TOYeM解答例リンクを踏むと、限定公開のYoutubeの動画に飛ばされます。耳を澄ますと、電話の入力音(DTMF)が聞こえてきます。Youtubeの音声を録音し、Audacityで少しずつ再生しながら耳コピしました。個人的には、再生速度を上げると違いが分かりやすかったです。音声の比較対象として、こちらのサイトも参考にしました。onlinetonegenerator.com耳コピした結果が以下の通りとなります。4これらの番号は、携帯電話のキーパッドと対応しています。割り当てると、以下の通りになります。gフラグの形式に合わせて整形したものが、フラグとなります。見慣れない命令(swabやclrb)を調べていると、PDP-11と呼ばれる古いコンピュータのアセンブリだということが分かりました。ja.wikipedia.orgアセンブリを読んでいくと、33文字毎にMSGをローテートして表示するプログラムのようです。C言語に読み換えて実装してみました。このプログラムを実行すると、フラグが取得できます。itmatreshka.zip解答例zipファイルを展開すると、クラスファイルとdataファイルが入っていました。dataとりあえず実行してみると、Noと表示されます。Code2Nojadを使ってデコンパイルしてコードを確認してみます。Code2.jadデコンパイル結果を確認すると、どうやらユーザ名が正しくないと「No」となってしまうようです。}}上記のコードを書き換えて、本来のユーザ名を特定します。}}上記のプログラムを実行して確認すると、「lettreha」が本来のユーザ名だと分かりました。ところを「lettreha」に置き換えました。}}上記のプログラムを実行すると、「stage2.bin」というファイルが生成されました。Code22つ目のファイルは、ELFファイルのようです。strippedとりあえず、実行してみましたが、やはり「Fail」と表示されるようです。./stage2.binFailまずは、gdb-pedaで「Fail」の表示箇所を見つけます。writeシステムコールでbreakさせて、少しステップ実行してみます。rすると、エラーを表示していそうな箇所を見つけることができました。directory.gdb-peda$アドレスが分かったので、Ghidraで対象のアドレス(0x47630d)を見てみます。エラー表示をしていそうな関数(runtime.printstring())が見つかりました。あり、そこがメインのコードになっていそうです。その場所(0x476181)にgdb-pedaで無理やりjumpしてみます。cすると、また新たに「result.pyc」という名前のファイル生成されました。dataまた、今回はそのまま実行することができませんでした。file拡張子的には、pycファイルとなっているので、とりあえずデコンパイルしてみます。今回は、下記のサイトで行いました。python-decompiler.comデコンパイル結果は、以下の通りとなります。key)print(''.join(res))どうやらフラグは、8文字の文字列をキーとしたxor暗号で暗号化されているようです。あることが分かっています。暗号化されたフラグでxorを取れば、キーが求められそうです。CyberChefを使ってキーを求めてみます。以上の結果から、今回のxorキーは、「Kr0H4137」だということが分かりました。「Kr0H4137」を使って、フラグを復号することができました。添付されたtorrentファイルからzipファイルをダウンロードし、展開するとExt4ファイルシステムのディスクイメージが出てきました。files)「data2.bin」をAutopsyで開いてみました。漁っていると、「.bash_history」を見つけました。ImageMagickのconvertコマンドで画像の一部を白く塗りつぶしているのが確認できました。tor-browser-linux64-8.5.4_en-US.tar.xz編集された画像を見てみると、コマンド履歴の通り左上が白く塗りつぶされています。画像を直接編集しているので復元できそうにありません。調査を進めると、ファイルのメタデータであるファイル拡張属性(user.xdg.origin.url)にURL(https://i.imgur.com/kTd0T9g.png)が残っていることに気が付きました。実際にアクセスしてみると、白く塗りつぶされる前の画像が出てきました。左上にフラグも確認できます。接続してみると、以下のようにQRコードが表示されます。QRコードを読み取ると、プロンプトが出てきました。image」とエラーが出てきました。エラーの文章から推測すると、こちらも同じ形式でコマンドを送信しなけらばならないようです。コマンドの終端となっているようです。QRコードをいちいち作るのは面倒くさいので、下記のサイトを参考し、qrencodeを使ってQRコードを生成させました。orebibou.comqrencodeのインストールは、下記コマンドでできます。qrencode以下のコマンドで、自由に文字列をQRコードに変換することができます。##################################################################################################################################################################################################################################################qrencodeの実行結果をpythonスクリプトに貼り付けて、QR送信用のプログラムを作成しました。lsコマンド送信用のプログラムを作成しました。p.sendline(qr)p.sendline(".")p.interactive()上記のプログラムを実行すると、新たにQRコードが返ってきました。バグっているようですが、問題なく読み取れました。QRコードを読み取ると、以下の通りになっていました。flag.txt」という文字列をQRコードに変換し、送信用のプログラムを調整しました。p.sendline(qr)p.sendline(".")p.interactive()上記のプログラムを実行すると、またQRコードが返ってきました。QRコードを読み取ると、フラグとなっていました。http://95.179.148.72:8083/index.php解答例リンクにアクセスすると、ユーザ名とパスワードの登録画面に飛ばされます。登録するとメニュー画面に遷移します。BTC」ボタンを押すと、自分のBTCが少しだけ増えます。「change」ボタンでBTCとUSDの交換をすることができます。最終的に、$1をどうにかして集めて、フラグを購入することが目標となるようです。調査を進めてみると、USDとBTCの何度かの交換で、少しづつ増えていくことに気が付きました。そこで、nodejsで以下の動作をするプログラムを作成しました。BTC(0.00001)をUSDに変換するUSD(0.1)をBTCに変換する。USDが1以上になるまで、上記を繰り返す。100);上記のプログラムを実行すると、下記の通りになります。($1)」で購入すると、フラグが表示されました。Writeup月別アーカイブはてなブログをはじめよう!tsalviaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。