[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5#

一个查询页面,源码也没有给出什么提示,但是给出了出题地址。

image-20220512091526232

出题地址:https://github.com/BjdsecCA/BJDCTF2020 通过出题地址,找到了题目源码,输出 ‘ffifdyop’ 就可以跳转到下一个环节。

image-20220512091638274

image-20220512091754124

给出了部分的 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 相等的机制。

image-20220512093824544

对字符串进行 md5 加密的时候,对于数组类型的数据是不会进行加密的,其返回结果是NULL,所以也可以进行绕过而且可以绕过md5的强类型比较。

image-20220512095244486

image-20220512095351635

解决 md5 强类型比较的问题,再看 !== 的问题,在 != 和 !== 的区别就在于,!== 的返回值只有 false,!= 返回值有0和false

image-20220512100350072

image-20220512100445279

因此知道当 $a !== b 为 t r u e , m d ( b 为true,md( btruemd(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&param2[]=2

image-20220512101339365

参考文章:#

浅谈php弱类型

[php中的 !== 与 != ](

作者:knsec

出处:https://www.cnblogs.com/knsec-cnblogs/p/16582243.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

备注:你可以在这里自定义其他内容,支持 HTML

posted @   knsec  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示