rsa1:
(转)题解链接:http://www.tuicool.com/articl...
(转)payload:https://github.com/Hcamael/ct...
(学习中。。。)
rsa2:给定公钥文件、一个由公钥加密后的包含压缩包密码的文本、加密后的压缩包,需要找到私钥解密文本,用其中的密码打开压缩包。
openssl rsa -in public.key -pubin -text -modulus
看到N并没有什么特殊之处(比如很多零之类),N的bit位还特别多(就是Modulus,都2048位了,直接暴力分解不可能)。
python -c "print long(0x94A03E6E0EDCF···A5FD5CAB066881))“
把10进制的N扔到 http://factordb.com/ 上看看能不能分解,挺幸运的,恰好能分解。
而且我还注意到分解后的p和q相差很大。当p和q之差特别大或者p和q大小差不多时,还可以用软件yafu直接分解。
得到p和q以后,就可以用rsatool.py生成私钥文件。python ./rsatool.py -p 250527704258269 -q 74891071972884336452 ··· 78063375349 -o private.pem
另外看到加密的文本里末尾有着熟悉的“==”,猜测这个文本还被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
解密文本。
level2.zip密码fA35ORI11TLoN_Att1Ck_cL0sE_PrI8e_4acTorS,可得FLAG{500_sI,pLE_tRE1S7Re_iN_rSa_AtTa3K_2_24CASF}。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。