开卷看题
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/1.png)
题干提示我们可能存在备份文件
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/2.png)
开始探索
主页面有一串天文数字,仔细一看是两个相同数据重叠了,提取出来扔到cmd5上跑一下看看
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/3.png)
貌似没什么用,还是扫描一下备份文件吧
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/4.png)
NICE,成功扫描到了index.php.bak,访问一下
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/5.png)
分析源码
1 |
|
总结就是找到两个数值不同但MD5相同的数,根据MD5的文档可知,两个不同字符串MD5相同的概率低到直接忽略不计( 1/(10E28) ),这条路堵死了。
柳暗花明
就在此时突然发现了一个细节
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/6.png)
MD5值比较用的弱等于,而两个key值之间的比较用的强等于,也就是说比较MD5这里大有文章可做
果不其然,经过了谷歌探索之后,发现可以使用科学计数法进行绕过
原理:0的任何次幂都是0,用科学计数法表示就是0e后面接任何数字
列举出几个MD5值前两位是0e的:
- QNKCDZO
- 240610708
- s878926199a
- s155964671a
- s214587387a
- s214587387a
同时在查询资料时还发现MD5无法计算数组,对于数组的计算结果总是为NULL,使用此特性也可以达到不同数值但MD5值相同的效果
迈向未来
经过上述知识铺垫,最终的payload方案如下:
- kkeyey1=QNKCDZO&kkeyey2=240610708 使用科学计数法
- kkeyey1[]=somthing&kkeyey2[]=anything 使用数组
本次演示采用第二种方案(因为数组计算的MD5为NULL不会显示在页面上造成干扰)
/%E5%A4%87%E4%BB%BD%E6%98%AF%E4%B8%AA%E5%A5%BD%E4%B9%A0%E6%83%AF/7.png)
得到了想要的答案,NICE
后记
谷歌大法好