[61dctf]bbencode
题目给了一个py
1 | flag = open("flag", "r").read().strip() |
因为是异或,所以重复encode就能拿到flag了
1 | def bbencode(n): |
flag{you_xian_yu_huan_leduo!!}
[61dctf]rsappend
1 | ➜ rsappend_101ghfuaori488hs9 ls -l |
rsappend.py
1 | flag = open("flag", "r").read().strip() |
第一直觉是共模攻击,pm为256位,前32位是flag,后224位是随机填充值。但是又仔细一想,共模攻击的条件是加密同一明文,这里很明显不满足,但是如果不是共模攻击,这题除了往死里爆破p和q,就没办法了啊。先不管那么多,试试共模攻击
1 | import gmpy2 |
另外在这里,我尝试取不同组的(e, c),最后的结果居然一样,这就解释了为什么能进行共模攻击,因为他给的result文件并不是按他给的脚本加密出来的,应该是出题的意识到无解,然后悄悄把随机那里变成了固定的padding
1 | ➜ crypto python rsappend.py |
[61dctf]rsa(not solved)
1 | ➜ ~ cd Downloads/rsa |
其中send.bak是128字节的乱码,然后分别看一下每一个文件的内容
keygen.sage
1 | #!/usr/bin/env sage |
communication.py
1 | #!/usr/bin/env python |
bob_public_key.py
1 | #!/usr/bin/env python |
alice_public_key.py
1 | #!/usr/bin/env python |
不难看出,要解密send.bak,我们需要先用bob的私钥对(bob.d, bob.n1)得到sig,然后再用alice的公钥对(alice.e, alice.n2)解密得到明文。alice的公钥我们直接从题目给的文件就能得到,那么我们要做的就是通过bob的(e, n1, n2)拿到bob的私钥d。
卡了两天,尽可能尝试了我已知的RSA攻击方法,都不能解出私钥d,毕竟500分的题。。。能力有限,此题日后在肝
[61dctf]cry
nc pwn2.jarvisoj.com 9891
下载得到一个py文件
cry.py
1 | import primefac |
先nc看看
1 | ➜ rsa nc pwn2.jarvisoj.com 9891 |
我们知道p的高180*4
即720bit,p一共1024bit,所以采用Factoring with high bits known
原理及例子:
https://github.com/mimoo/RSA-and-LLL-attacks#factoring-with-high-bits-known
下面是我按照上面nc得到的结果写的sage脚本
1 | # nc pwn2.jarvisoj.com 9891 |
运行结果
1 | ➜ crypto sage cry.sage |