新BugKu-web篇-web16

web16

这道题的考点的是MD5碰撞:
PHP在处理哈希字符串时,
会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
"===“和”!==“即strict比较符,只有在类型相同时才相等。”==“和”!="即non-strict比较符,会在类型转换后进行比较。
此外0 == 字符会被认为是正确的,可以绕过验证
接下来看题,首先查看源码,没啥有用的东西,其次题目提示“备份是个好习惯”,那就先dirsearch扫描一波
在这里插入图片描述
得到了一个bak的备份文件,下载下来,里面有源码
在这里插入图片描述
首先是个文件包含的漏洞,然后给大家在菜鸡的角度解读下代码

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?'); // 它会先查看URI中是有 ? ,如果有,就匹配 ? 及后面的所有内容
$str = substr($str,1); // 匹配的内容从第一位开始匹配,也是就是不匹配'?'了,因为'?'是第0位
$str = str_replace('key','',$str); // 在匹配的内容中会将'key'替换为空
parse_str($str); // 将字符串解析至变量中
echo md5($key1); // 回显MD5加密后的变量key1

echo md5($key2); // 回显MD5加密后的变量key2
if(md5($key1) == md5($key2) && $key1 !== $key2){ // 如果加密后的key1 == key2 并且 key1 !== key2 
    echo $flag."取得flag"; // 回显flag

再结合文章开头的md5()这个函数的特点,构造payload

http://114.67.246.176:13503/?kekeyy1=s878926199a&kekeyy2=QLTHNDT

得到最终的flag
在这里插入图片描述
这道题目的payload的不止这一种,剩余的大家可以自行尝试










注:萌新第一次写write up,不足之处还请见谅,不对之处欢迎批评指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值