[BJDCTF2020]Easy MD5

这题打开啥都没发现,随便提交点东西,在head里面看到select * from 'admin' where password=md5($pass,true)

md5(string,raw)

1.string 必需。规定要计算的字符串。

2.raw 可选。规定十六进制或二进制输出格式:

TRUE - 原始 16 字符二进制格式

FALSE - 默认。32 字符十六进制数

没接触过这东西,想不通这里要怎么绕过,果断看wp

https://imagin.vip/?p=166#Easy_md5

他这里是传入一个字符串,这个字符串被md5处理成十六进制格式后跟password进行比较,因为mysql会把hex格式当成ascii格式,那我们要构造一个被处理后字符串里面含有' or '1的字符串,这里的答案是ffifdyop,他被md5加密过之后变成276f722736c95d99e921722cf9ed621c,而这个被当成16进制进行解码的话会变成'or'6�]��!r,��b,这里6xxxxx,其布尔值为1,换成别的以数字开头的字符串都行

进去之后查看源代码

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

if($a != $b && md5($a) == md5($b)){

这个就比较经典了,字符串不同,加密后的md5弱类型比较相同,网上一找找一堆,我 这用了byGcY,sonZ7y,或者用数组绕过也行,进去看到

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

highlight_file(__FILE__);

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

变成全等于那就只能用数组解决了,数组的md5哈希为NULL,param1[]=1¶m2[]=2,嗯,这回post又没反应了,用老办法加点料之后成功上传参数拿到flag

标签: none

评论已关闭