bugku 前女友WP (md5绕过 strcmp绕过)

bugku 前女友WP (md5绕过 strcmp绕过)

php代码如下

<?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. v1 != v2 && md5(v1) == md5(v2)
  2. strcmp(v3, flag)==0

1.md5绕过

法1:md5碰撞

使用fastcoll等工具进行md5碰撞,得到两个本身不同但md5码完全相同的字符串

法2:科学计数法绕过弱类型比较

使用两个不同的字符串,但md5码都以0e开头,即值为0,判断为相等

如:

QNKCDZO

0e830400451993494058024219903391

240610708

0e462097431906509019562988736854

s878926199a

0e545993274517709034328855841020

s155964671a

0e342768416822451524974117254469

法3:数组绕过md5函数,返回null

php中md5()之类的哈希函数计算的是一个字符串的哈希值,对于数组则返回false

所以传入两个不同的数组即可绕过

image-20220321203637631

2.strcmp绕过

strcmp函数原型

strcmp

Binary safe string comparison

<?php
function strcmp(string $string1, string $string2): int { }
@param string $string1 — The first string.

@param string $string2 — The second string.

@return int

比较的是string字符串类型大小,如果传入数组则直接返回0,传入数组即可成功

posted @ 2022-03-21 21:10  qweg_focus  阅读(183)  评论(0编辑  收藏  举报