[ Jarvis OJ ] flag在管理员手里–Hash长度扩展攻击学习笔记

什么是hash算法及hash扩展攻击

http://www.freebuf.com/articles/web/69264.html

http://www.freebuf.com/articles/web/31756.html

大部分教程都是直接告诉什么是hash扩展攻击,但都没讲为什么(对小白很不友好),其实理解了服务器准备干什么,更容易理解怎样攻击。

这要从一道题目讲起:

http://web.jarvisoj.com:32778/

抓包:


题目的意思应该是将guest改为admin,但是还有一个hash验证cookie没有被篡改过。

用源码泄露工具扫描一下:


打开这个链接可以下载到一个文件index.php_,这个其实是php的备份恢复文件,拿到lunix下,重命名为index.php.swp ,使用命令vim -r index.php 即可恢复原来的php文件,得到源码:


扫描工具参见:http://www.zjzhhb.com/archives/190

这里我们可以看到服务器想干什么,看这部分代码:

$s为role,hsh为salt拼接$s的翻转字符串,然后MD5。验证时

用的是用户传过来的hsh和role,满足role=admin很容易,直接抓包修改就行,但是满足hsh=MD5(salt+role)就比较难了,因为我们不知道salt的值,如果改了hsh和role,那怎么满足等式成立呢,所以这看似很安全,服务器放心的把认证信息都存在用户的浏览器的cookie里,而服务只需保留salt的值就可以验证用户的身份了。理想很丰满,现实就是存在hash长度扩展攻击。

开头两篇文章里总结的很清楚,我就总结一下:我们先补充第一次的salt+身份信息的长度,使之符合MD5算法的要求,这一步服务器也是这么做的,只不过服务器将补足后的信息拿去运算,然后得到hash(记为hash1),返回给我们。但我们在补足长度之后再拼接上其他信息,比如admin,看看会发生什么。服务器会先进行之前一样的运算得到hash1,用这个hash1再作为register,拿去加密后一个块admin(这句话如果不明白再看看hash的原理),最终完成MD5(salt+role)得到一个值hash2与hsh比较。重点来了,现在MD5(salt+role)我们也可以完成,得到那个hash2了。可是我们不是不知道那个salt吗?是的,这次服务器的MD5过程是从头开始运算,到倒数第二步是用hash1去运算admin块,最后得到hash2.

可我们知道hash1(第一次服务器正常的身份信息),和admin(我们自己加上的嘛),那么我们做一次hash1和admin的MD5运算不就得到hash2了嘛。把hash2赋值给hsh,传入就满足了hsh=MD5(salt+role)

这个计算过程可以借助lunix下的hashpump,为这个漏洞量身定制的,不过要在kali中还是要安装的,P神的教程:https://www.cnblogs.com/pcat/p/5478509.html

不知道这样说明不明白,总之有点啰嗦,希望能给像我一样刚入门的选手一点帮助。

这道题目之后还有序列化和倒序的操作就不写了。重点在对攻击原理的理解。

防护方法也很简单,将用户能改的信息(这里是role)拼接在salt前即可,毕竟MD5中是从前向后分块的,大家自己思考下哈!

 文章同步到我的博客:http://www.zjzhhb.com/archives/377

转载指明出处

猜你喜欢

转载自blog.csdn.net/zpy1998zpy/article/details/80858080