[BJDCTF2020]Easy MD5
知识点
- md5 bypass(数组返回false)
过程
主页,是这么个框框
抓包发现提示
select * from 'admin' where password=md5($pass,true)
16 位 md5 常见套路,输入密码 ffifdyop
,登录即可。这是因为它的原始字符串导致了' or 1=1
的 SQL 注入,相当于所谓的万能密码登录。请参考:
https://www.jianshu.com/p/12125291f50d
http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/
登录后,查看网页源代码,发现代码,要求 a 和 b 不等但是 md5 相等:
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
//wow,you can really dance
}
又是典型的 md5 bypass,因为 md5()
或者 sha1()
之类的函数计算的是一个字符串的哈希值,对于数组则返回 false,如果 $a
和 $b
都是数组则双双返回 FALSE, 两个 FALSE 相等得以绕过。payload:
/levels91.php?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;
}
param1[]=1¶m2[]=2
一些md5值
0e开头的md5和原值:
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a