0x00 Something
这篇 web 中的密码学攻击滞留在博客好久了,因为详细写懒得动,简单写又太水,最后还是在这里水一下吧。包含:
- Hash扩展长度攻击
- Padding Oricle Attack
- Bit-flipping attack TO-DO
0x01 Hash扩展长度攻击
在某篇wp中,为了填坑,写了关于此部分的理解。
MD5等hash算法会对输入进行分组并PADDING,来满足固定的长度,于是我们可以在原有的输入后手动增加PADDING字符,来保证原有的分组不被改变,并在原来的基础上添加新的输入。
PADDING:
- 消息必须进行补位,即使得其长度在对 512 取模后的值为 448。也就是说,len(message) % 512 = 448。当消息长度不满 448 bit 时(注意是位,而不是字符串长度),消息长度达到 448 bit 即可。当然,如果消息长度已经达到 448 bit,也要进行补位。补位是必须的。
- 补位的方式的二进制表示是在消息的后面加上一个1,后面跟着无限个0,直到 len(message) % 512 = 448。在 16 进制下,我们需要在消息后补80,就是 2 进制的10000000。我们把消息abc进行补位到 448 bit,也就是 56 byte。
- 补位过后,第 57 个字节储存的是补位之前的消息长度。abc是 3 个字母,也就是 3 个字节,24 bit。换算成 16 进制为 0x18。其后跟着 7 个字节的 0x00,把消息补满 64 字节。
我们以例子说明:
比如对’admin’字符串进行md5加密,那么填充就应该是'61646d696e8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002800000000000000'
‘61646d696e’是admin的hex编码,80是填充的第一字节,后面的28表示40bit,即5个字节,是小端。
在采用MD5(SALT+SECRET)等类似方式时,由于未知量拼接后在SECRET前面,导致可以在SECRET后添加PADDING字符,在不知道salt的情况下,通过已知的一对VALUE-HASH值,枸造出一对新的VALUE-HASH值(value在原来的基础上在末尾添加额外数据)。
亦可参考:https://seaii-blog.com/index.php/2017/05/12/56.html
0x02 Padding Oricle Attack
原理请见:
- http://blog.zhaojie.me/2010/10/padding-oracle-attack-in-detail.html
- http://www.icylife.net/yunshu/attachments/Padding-Oracle-Attack.pdf
如果看原理的话,个人感觉最好的便是白帽子讲 web 安全,其次是上面两篇。其他的写的都没有上述的三篇清晰。
遇到的题目:
https://www.xmsec.cc/ddctf-2019-writeup/#%E5%86%8D%E6%9D%A5%E4%B8%80%E6%9D%AFjava
其中 token 在 cookie 中,值为 UGFkT3JhY2xlOml2L2NiY8O+7uQmXKFqNVUuI9c7VBe42FqRvernmQhsxyPnvxaF
显然提示了 Padding Oricle,根据原理可写出上文中的脚本,爆出明文 {"id":100,"roleAdmin":false}
,最后根据 IV / 中间值 / 密文的关系构造新的明文 {"id":100,"roleAdmin":true}
即可。
TODO
https://seaii-blog.com/index.php/2017/05/13/60.html
原来一直在看这篇,但是作者讲的细节也有一些欠缺,但是作为复习来看还是可以的。