[BJDCTF2020]Easy MD5
知识点
过程
主页,是这么个框框

抓包发现提示

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
|