Bugku-8.前女友-MD5,strcmp()绕过

image-20210812190932771

源码发现链接

image-20210812191008589

<?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;
        }
    }
}
?>

1.需要get传入v1,v2,v3

2.v1!=v2,且v1和v2的md5相等(难道是找碰撞?)

3.strcmp()

返回值:

0 - 如果两个字符串相等

<0 - 如果 string1 小于 string2

>0 - 如果 string1 大于 string2

区分大小写,!strcmp($v3, $​​​flag)要为1,意思是v3为flag的内容

MD5绕过的技巧 - _Whoami - 博客园 (cnblogs.com)

php在处理0e开头的字符串存在缺陷,0e开头字符串相比较,会相等,也就是说"0e123"=="0e456"的值是1。

所以在处理的时候,推荐使用全等于===

md5('240610708') ==md5('QNKCDZO')

返回True

strcmp()5.3之后的有这个漏洞:

strcmp函数无法比较数组,对象,会返回0

输入?v1=240610708&v2=QNKCDZO&v3[]=1获得flag

image-20210812203214797

posted @ 2021-08-12 20:45  1ink  阅读(200)  评论(0编辑  收藏  举报