#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 的一点点理解

Encryption

decryption

知道了是如何加密与解密,其实理解起来就相对比较简单了,可能还需要对异或的性质有一些了解:

  1. 异或运算法则:不同则为1,相同则为0
  2. 如果 A xor B = C 那么则有 C xor B = A
  3. A xor A = 0

如果改变Ciphertext其中的1 byte必定会影响下一个chunk相同位置的Plaintext 1 byte,这样的话,被改变的Ciphertext也就不能得到正确的明文啦,如图:

现在我们可以控制输入了,我们如何能让Plaintext变成我们想要的value呢?其实很简单,这里面涉及一个简单的运算(Example for 1 byte)。

1