bugku-前女友

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dyw_666666/article/details/82348071

这里写图片描述
这里写图片描述

发现一段代码:

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>

想了解关于strcmp()函数漏洞可以看下面这篇文章
https://blog.csdn.net/dyw_666666/article/details/82349432


根据php代码,以GET形式传递3个值,其中v1变量值 != v2变量值,if中的第二个判断条件用的是 ==,我们可以利用 “0x” == “0a”的判断结果为1,找出经过加密后的两个md5值以0开头,接下去以都相同的值,直到遇到的字母的两个字符串相等 v3 == flag


可以通过
PHP处理0e开头md5时hash字符串漏洞
来构造,下面这篇文章中有关于这个的构造
https://blog.csdn.net/dyw_666666/article/details/82348564
构造:index.php?v1[]=QLTHNDT&v2[]=UTIPEZQ&v3[]=EEIZDOI


并且,在PHP中
MD5是不能处理数组的,md5(数组)会返回null,所以md5(a[])==null,md5(b[])==null,md5(a[])=md5(b[])=null,这样也可以得到答案了。
构造:index.php?v1[]=1&v2[]=2&v3[]=3

猜你喜欢

转载自blog.csdn.net/dyw_666666/article/details/82348071