MD5绕过(强弱类型比较)

文章目录

  • 前言
  • 一、强类型比较(===)和弱类型(==)比较区别
  • 二、MD5弱类型绕过
    • 1.0e绕过
    • 2.数组绕过
  • 三、MD5强类型绕过
    • 1、
    • 2、数组绕过
  • 四、特定条件下的MD验证绕过:ffifdyop
  • 总结


前言

在刷题的时候遇到,强弱类型比较和MD5的验证,就简单的总结记录一下


一、强类型比较(=)和弱类型()比较区别

首先,我们来看一下php对类型比较的解释

松散比较也就是弱类型比较,严格比较就是强类型比较
a==b:弱类型比较会将a和b转成统一数据类型在进行比较,而强类型比较会先判断a和b是不是相同类型,不是,则返回false,是,再比较a和b的值。


二、MD5弱类型绕过

1.0e绕过

弱比较会把0exxxx当做科学计数法,不管后面的值为任何东西,0的任何次幂都为0

代码如下(示例):

if ($_GET['a'] != $_GET['b'])
	{
		if (md5($_GET['a']) == md5($_GET['b']))
			echo '1';
		else
			echo '0';
	}
	else echo "请输入不同的a,b值";

代码审计:要求get获取的a和b的值要求不相等,但要求其md值相同

  • 以下是一些字符串md5值以0e开头
    QNKCDZO
    240610708
    s878926199a
    s155964671a
    s21587387a

payload:?a=QNKCDZO&b=240610708 即可绕过


2.数组绕过

md5()函数计算的是一个字符串的哈希值,对于数组则返回false

payload:?a[]=1&b[]=2


三、MD5强类型绕过

1、

因为强类型比较,不仅比较值,还比较类型,0e会被当做字符串,所以不能用0e来进行
但是我们可以用MD值完全相同的字符来进行绕过


2、数组绕过

同上

四、特定条件下的MD验证绕过:ffifdyop

Select * from ’admin’ where password=md5($pass,true)

首先要知道md($pass,true)的含义
MD5绕过(强弱类型比较)_第1张图片
MD5报文将以原始 16字符二进制格式返回

ffifdyop 字符串经过MD5加密后为276f722736c95d99e921722cf9ed621c
在转换成字符串为’or’6乱码

Select * from ’admin’ where password=‘or’6乱码
相当于万能密码


总结

没有总结,凑合看吧

你可能感兴趣的:(学习笔记,安全,md5)