shiyanbar-ALL-writeup(1)
#shiyanbar-ALL-writeup(1)
最近搞一波ctf,巩固一下基础,搞一些原来没有注意到的点。
简单的登录题
遍历一下ascii 0-255 发现过滤了# , - = \ ~
, 没有过滤'
扔一个进去,回显hello,再回到index的时候显示报错信息,考虑报错注入。说明记录了每次输入的数据,然后通过cookie回显回来。同样可以说明cookie中包含了payload(这点我没想到,第一是对密码学不熟悉,第二真实环境这样用的概率不大,但是想一想也是有可能的,毕竟内存里做加密与解密比读写sql IO要快的多)
test.php爆出了源码,逻辑挺简单的,感觉思路就是利用cookie绕waf,只要控制set-cookie,就可以随意输入了。但是不知道private key。这有点蛋疼。
所以接下来的思路就是刚密码学了,我觉得这个题出的很不好。。。web偏弄密码学,纯粹为了出题而出题。。。
google:attack aes-128-cbc
and you will get CBC Byte Flipping Attack
http://resources.infosecinstitute.com/cbc-byte-flipping-attack-101-approach/#gref
–
以下是我对 CBC Byte Flipping Attack 的一点点理解
知道了是如何加密与解密,其实理解起来就相对比较简单了,可能还需要对异或的性质有一些了解:
- 异或运算法则:不同则为1,相同则为0
- 如果
A xor B = C
那么则有C xor B = A
A xor A = 0
如果改变Ciphertext其中的1 byte必定会影响下一个chunk相同位置的Plaintext 1 byte,这样的话,被改变的Ciphertext也就不能得到正确的明文啦,如图:
现在我们可以控制输入了,我们如何能让Plaintext变成我们想要的value呢?其实很简单,这里面涉及一个简单的运算(Example for 1 byte)。
1 |