2017-赛客夏令营-Web-weakphp-git泄露&phpHash泄露

这篇博客介绍了PHP中一个关于哈希对比的隐式转换漏洞,当以0e开头的MD5哈希值被比较时,会被误判为0。通过这个漏洞,可以找到特定的字符串输入,使得即使不同密码的MD5哈希也能通过等价比较。文章提供了一些0e开头的MD5例子,并提到了利用这个知识点解决Web安全挑战的方法。
摘要由CSDN通过智能技术生成

2017-赛客夏令营-Web-weakphp-git泄露

题目没有给什么有用的信息,尝试扫一扫目录,发现是有.git
在这里插入图片描述
使用GitHacker 将.git克隆到本地
在这里插入图片描述
在git目录下打开git shell 查看git历史发现一个init版本,回退到此版本
在这里插入图片描述
得到index.php
在这里插入图片描述

<?php
require_once "flag.php";
if (!isset($_GET['user']) && !isset($_GET['pass'])) {
    header("Location: index.php?user=1&pass=2");
}

$user = $_GET['user'];
$pass = $_GET['pass'];
if ((md5($user) == md5($pass)) and ($user != $pass)){
    echo $flag;
} else {
    echo "nonono!";
}
?>

看起来是要找到md5的碰撞字符串,如果学过md5的话,就应该知道穷举的复杂度是非常高的,不是几分钟能搞定的(有兴趣可以去看一下md5,原理还是比较简单),所以这儿必不可能是想让你找到两个碰撞的例子。解决这道题涉及到下面的这个php的知识点。
PHP有个隐式转换的缺陷,PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0

详细解释:
php关于==号是这样处理的,如果一边是整型,另一边也需要是整型。

0e545993274517709034328855841020
这是一个整数,在php里是理解为0*10^4549…20的意思,那么其值是0

同样

0e342768416822451524974117254469
这是一个整数,在php里是理解为0*10^34…69的意思,那么其值是0

0e开头的md5和原值:

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

在这里插入图片描述

参考链接:
https://blog.csdn.net/anzhuangguai/article/details/70049960
https://blog.csdn.net/u014549283/article/details/81288443

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值