(轉)題解連接:http://www.tuicool.com/articl...
(轉)payload:https://github.com/Hcamael/ct...
(學習中。。。)python
openssl rsa -in public.key -pubin -text -modulus
看到N並無什麼特殊之處(好比不少零之類),N的bit位還特別多(就是Modulus,都2048位了,直接暴力分解不可能)。git
python -c "print long(0x94A03E6E0EDCF···A5FD5CAB066881))「
把10進制的N扔到 http://factordb.com/ 上看看能不能分解,挺幸運的,剛好能分解。github
並且我還注意到分解後的p和q相差很大。當p和q之差特別大或者p和q大小差很少時,還能夠用軟件yafu直接分解。學習
獲得p和q之後,就能夠用rsatool.py生成私鑰文件。python ./rsatool.py -p 250527704258269 -q 74891071972884336452 ··· 78063375349 -o private.pem
ui
另外看到加密的文本里末尾有着熟悉的「==」,猜想這個文本還被base64編碼了。腳本以下:編碼
#base64解碼 rsa解密 def decrypt_RSA(private_key_loc, package): from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from base64 import b64decode key = open(private_key_loc, "r").read() rsakey = RSA.importKey(key) rsakey = PKCS1_OAEP.new(rsakey) decrypted = rsakey.decrypt(b64decode(package)) return decrypted key = "Zc2LYzlDHW6fEwMqqey8d6uCYWXEcUWt0LMvx3fMA/YMezn7jkXoUOkZD8pQyH5DBhJFCzSIoIUMaV+rJzyUooAIfxCG87Ej9CDDOb1CB+bxY2fH4Xr0D2iJMyKCgN9WwLggfJheJEcLsjhNx32lhJ81WGX/yQpk9HEDAaIBu1ds5BP0Cfy+aUOp9JDH9+b+9jjTgJpccBfh4uCG2XusQ7SDVMbejBIH/rGKNVlg8aSasOjDQ0PErHwzMVp4ewEk0va4NBJYhilxeTZyO+m2f/tw63LmTHmVxFzmzcCvAYv5M9wsACqi8BkCaSqwRHKXmN96eeLJE0qyEUvgSM+i9w==" print decrypt_RSA('private.pem', key)
levle1.zip壓縮包密碼是FaC5ori1ati0n_aTTA3k_p_tOO_sma11
解壓以後又蹦出三個文件,其中一個仍是壓縮包。加密
既然以前考的是p、q過相差大時的解決方案,那麼這一次應該是p、q差很少的時候如何對N進行分解,這一次我直接用yafu分解了N獲得p、q,生成私鑰文件。openssl rsautl -decrypt -in level2.passwd.enc -inkey private.pem -out key.out
解密文本。code
level2.zip密碼fA35ORI11TLoN_Att1Ck_cL0sE_PrI8e_4acTorS,可得FLAG{500_sI,pLE_tRE1S7Re_iN_rSa_AtTa3K_2_24CASF}。ip