にゃーんとか言ったことなし

コンテンツは特にないです。

akictf #10 easy_crackme

問題

https://ctf.katsudon.org/problem/10

 

考えたこと

bin問題なので、まあバイナリ解析だろうという予想は簡単につくが一応fileコマンドで確認すると、予想通りそれだった。実行権限xがなかったので、それを追加してあげて適当に動かしたら、Usage: ./q10 flag って言われたので、コマンドライン引数がいるらしい。まあ適当にflagとか与えたらさすがに動かなかったので、objdumpしてあげた。すると、 call 8048358 <strcmp@plt>という記述がったので、何と何を比較しているか調べてあげれば良い。そこで、ltraceで適当な引数を与えてあげて様子をみた。すると、何と比較しているかはわかったので、それをそのままいれたらうまくいかなくて???ってなった。ちょっと考えたけどマルチバイト文字じゃねと気付いたので、エンコードしてあげたら、correctとでたがそれ以外何も出なくてえ?ってなった。またちょっと悩んだけど、loopでもx-flagそのままぶちこんだら通ったしそのままぶち込んだらいいのかなと思ってぶち込んだら通った。

 

おまけというかつい

バイナリ解析を実は全然やったことがなかったので、頑張ってアセンブラを調べながらやっていたけど、バイナリ解析の入門資料みたいなのは少ないなあと思った。今回はハリネズミ本に少しお世話になった。

 

 

 

 

akictf #12 ASCII Art

問題

https://ctf.katsudon.org/problem/12

 

考えたこと

akictfの作者であるaliym氏がPerl使いであることと、自分がたまたま知っていたperlのモジュールでText::AAlibっていうのがあるので、まあそれかなと思って投げつけたら、なんかちょこっとエラーでたけど答えは見れた。

 

おまけというかついで

ksnctfの25番でreservedという問題があるけど、それはPerl予約語が並べられていて、それだけで動くのではえ〜って感じだった。他の言語でもそういうのあるのかな..

 

 

ksnctf #36 Are you ESPer?

問題

http://ksnctf.sweetduet.info/problem/36

 

考えたこと

リンク踏んだらぶっ壊れたファイルみたいなのでてきたけど、よくみたら一番最初にELF(Executable and Linking Format)とか書いてあったから、これは実行ファイルであるとわかる。とりあえずダウンロードしてncコマンド殴ると、数字をあてるゲームが始まる。乱数かなっておもって適当にコード書いて流し込んだら弾かれて???ってなった。困って別問題やってたときに、向こうのサーバーと時間差があることを知った。そこで、srandの初期化の時間を無効のサーバーに合わせてあげて、パイプラインで実行結果を流してあげたらフラグをとれた。

 

おまけというかついで

rand関数は、初期設定を行わない場合、常に同じランダムパターンを返すことになっていて、これでは乱数の意味をなさないので、srand関数を用いて初期化の時刻を自分で設定してやる。何気なくsrand(time(NULL));とか書いてたけど、改めてちゃんと理解した。

 

akictf #6 Game#1

問題

http://ctf.katsudon.org/problem/6

 

考えたこと

URLを踏むとJankenと書かれたページが出てくる。とりあえず普通にやってみたら、何を出しても負けになり、すぐにmoneyがなくなる。なんだこいつと思ったけど、10ってとこかRankingを変えてやればいいんじゃねと思い、Chromeデベロッパーツールで編集をする。ザーッと見てやると、その中に

<input type="hidden" id="h" value="d3d9446802a44259755d38e6d163e820">

というHTML文がある。valueの中身がどういうものかよくわからなかったので、そのままググってやるとこれがMD5エンコードされた10であるとわかった。ならこれと上の10っていう数字を書き換えたらいいんだなと思ってRankingの1位の数字(一千万)より大きい数字にしてRegisterボタンを押してやったらフラグをゲットできた。

 

おまけというかついで

curlコマンドでごにょごにょしてもできると思うけど、curlコマンドがいまいちよくわかってないのでアレ() デベロッパーツールは強いなあと思いました(こなみかん

 

akictf #21 loop

問題

http://ctf.katsudon.org/problem/21

 

考えたこと

とりあえずURL踏んでみたらリダイレクトが繰り返し行われた云々って出てきたから、タイトルの意味はそれかと納得した(リダイレクトループ)。じゃあどうしようとなって、まあwebページ類の問題だし常套手段としてcurlコマンド殴ったらいいんじゃね?と思って適当にオプション調べてはえ〜ってなって色々してたらX-Flagっていうのが出てきた。頭にX-ってついてるやつはHTTPのルールでオレオレフィールドらしい。Flagとも書いてあるしこれ使えばいいやんけっていうのはわかった。どうやって使うのかはわからなかったので、全部つないでncコマンドとかやってみたけどさっぱりだったのでなんじゃこりゃ〜って言って答えに投げたら通ってしまった(要するにいじらなくてよかった)。

 

おまけというかついで

write_upとか見てるとシェルスクリプト書いてあって、こういうことぱぱっとかける人はすごいなあと思った。私は手動で全部つないだけど、awkコマンドとか使えば勝手につないでくれるのでそっちの方が絶対楽だよね。

akictf #13 Yet Another G00913

問題

http://ctf.katsudon.org/problem/13

 

考えたこと

前にksnctfのG00913っていう問題について書いた時にも触れた問題だけど、PPC (Professional Programming and Coding)なので当然プログラムを自分で書く必要がある。詳しくはG00913の記事のおまけというところを参照されたい。私は1000桁調べたけど、実際は500桁も調べたら十分である。まあつまり考えたことは特になくコード書いて走らせただけって話。

 

おまけというかついで

このコードを書くにおいて苦労したことは、gmp_prob_prime()の第一引数が文字列っていうことを知らなかったので、integerにキャストしてそこに通していたので、1000けた回しても素数でてこないじゃんはわわ〜ってなったことぐらいですかね。

コードあげといてもいいんだけど、ぐちゃぐちゃのgitを見られるのは恥ずかしいので、あげるのはやめときます..

これのコード書いててひとつ気になったんですけど、

 

$num = "1234056789"

$tmp = substr($num, $i, 1);
if($tmp == 0){
  continue;

}

みたいなcontinue文の使い方、例外処理(というほどでもないけど)の仕方って許されるんですかね..

 

ksnctf #20 G00913

問題

http://ksnctf.sweetduet.info/problem/20

 

考えたこと

問題文に FLAG_Q20_{first 10-digit prime found in consecutive digits of π} とあったが、そもそもG00913ってなんだよ聞いたこともないぞと思い、タイトルをググった。そうすると、下の写真が出てきた。これはgoogleの求人広告らしい。どう見てもこれをオマージュした問題である。答えそのものはググったときについでに出てきた。

f:id:kurofune6:20170314235630j:plain

 

おまけというかついで

これまたこいつをオマージュした問題でYet Another G00913という問題もある。

http://ctf.katsudon.org/problem/13

これの厄介なところは200桁を判定しなければならないところである。上の10桁程度ならRubyのPrimeクラスとか使えそうだが、さすがに200桁は無理なので、別の方法を考えないといけない。他のアルゴリズムとして桁が小さければエラトステネスのふるい、フェルマーの小定理(フェルマーテスト)があったりするが、それは疑素数といって素数でなくても通ってしまう数字が出てくる。それを改良しても通ってしまうカーマイケル数というものもあるが、まあ詳しくはググってください(細かく書くのが面倒)。そこで今回用いるミラーラビンテストの登場である。こいつは200桁の素数判定でも一瞬で終わる優れものである。これも確率的素数判定なので間違いが出ることはあるが、その確率は判定回数をk回とすると「4^-k」なので、kを大きくすればほぼなくなる。実装はさほど難しいわけではないが、PHPならgmp_prob_prime()という組み込み関数がミラーラビンの確率的テストによっておそらく素数であるか調べてくれる。この辺のもう少し詳しい話は気が向けばMathIについての記事を書いた時にやろうと思う。