解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php
刚看到这道题的时候一脸懵,毕竟不是科班出身,然后就上网查各种资料,一遍看不懂看两遍两遍看不懂就看三遍,就这样慢慢的有点感觉,然后试着试着自己写代码,从网上找的各种资料都是用Python写的,但是自己对Python不是特别了解,而且主要是想靠自己完完整整的走一遍,于是就用世界最好的语言PHP写了部分代码,没注释,因为最开始就是尝试的态度。
打开试题网站,提交数据后就看到下面有tips.php的文件,于是打开该页面,看到到了一堆PHP代码,这下就高兴了,因为PHP代码我刚好能看懂。
然后把里面不常见的函数进行查阅,基本逻辑就了解的差不多了,于是发现这道题主要就是openssl_encrypt($plain, METHOD, SECRET_KEY, OPENSSL_RAW_DATA, $iv);函数的加密与解密,但是发现SECRET_KEY已经隐藏了,所以只能上网查询资料,基本上查的资料都说用CBC翻转攻击,于是就一遍一遍的看,然后成功实现SQL注入得到了flag值
解题思路:
1)在于考察aes-128-cbc算法的“CBC翻转攻击“漏洞
2)由源代码我们可知:
2.1)Flag只有Session = admin可以查看
2.2)我们不可以通过POST传参的方式Set Session = admin
2.3)我们可以通过CBC算法的翻转攻击漏洞 Set Session = admin
3)CBC翻转攻击原理:
上图CBC加密的原理图
1.Plaintext: 待加密的数据。
2.IV: 用于随机化加密的比特块,