Pwnable.kr crypto1
复制本地路径 | 在线编辑
源代码
源代码不写了。流程就是客户端用户首先输入 id 和 password ,而且客户端存有一个我们不可见的 cookie ,客户端会以 id-password-cookie 这样方式将三者组合起来,进行 AES 加密。然后服务端解密,得到 id 和 password 和 cookie ,最后判断 id==admin 以及 password==id+cookie ,成功就会通过。
流程分析
首先分析加密算法是否有问题,没有问题,使用了官方包。我们必须要知道 cookie 是多少,才能通过检测,但我们没有漏洞点找到 cookie 的值。然而很遗憾,程序的多次一举让它有了漏洞。多此一举在于它把 id-password-cookie 这种方式进行组合。
首先两个前提要知道:第一, AES 加密是通过 16 字节一段一段进行加密。第二,加密内容我们是可以知道的。这是肯定的,要是连加密内容都不能截获(本题是直接打印告诉我们了),那还谈什么破解啊。
想象一下,我们首先输入 id='-'*13 以及 pwd=NULL ,那么 AES 会先加密 '-'*15 + cookie[0] 这一段,我们获取加密的内容。
下面进行爆破,现在输入 id='-'*15 + obj ,其中 obj 就是我们爆破的字符,此时 AES 会加密 '-'*15 + obj 这一段,我们也可以获取这一段加密后的内容。然后两个比较即可,如果不一样,那就换字符,如果一样,那么 cookie[0] 就是当前这个字符了,其余字符同理。
总结知识
- 就是按照字符爆破的思想,BROP 中对 Canary 也是进行这样的操作,可以去看一看
- 一篇讲 AES 加密的文章,写的很好:https://github.com/matt-wu/AES/blob/master/README.md