MD5函数漏洞$str1 = $_GET['str1'
;$str2 = $_GET['str2'
;if (md5($str1) == md5($str2)){
die('OK');
【PHP|MD5绕过的技巧】
- php弱类型比较产生的漏洞
- 想要满足这个判断只需要构造出MD5值为0e开头的字符串 , 这样的话弱类型比较会认为是科学技术法 , 0的多少次方都是0 , 因此可以绕过
- 有一些字符串的MD5值为0e开头 , 这里记录一下
- QNKCDZO
- 240610708
- s878926199a
- s155964671a
- s214587387a
- 还有MD5和双MD5以后的值都是0e开头的
- CbDLytmyGm2xQyaLNhWn
- 770hQgrBOjrcqftrlaZk
- 7r4lGXCH2Ksu2JNT3BYM
$str1 = $_GET['str1'
;
$str2 = $_GET['str2'
;
if (md5($str1) === md5($str2)) {
die('OK');
- 因为是强类型比较 , 用0e开头的字符串是没办法绕过的了 , 但是PHP自身的特性使得可以提交一个数组 , 而md5函数传入数组的返回值都是NULL , 这样就可以绕过强类型比较了 。 所以这里用GET传入?str1[
=1&str2[
=2就行了
- 补充:md5()或者sha1()之类的函数计算的是一个字符串的哈希值 , 对于数组则返回false , 如果
$str1
和$str2
都是数组则双双返回FALSE 两个FALSE相等得以绕过
$str1 = (string)$_GET['str1'
;
$str2 = (string)$_GET['str2'
;
if (md5($str1) === md5($str2)) {
die('OK');
- 由于强制类型转换 , 传数组就不可行了 , 这里就需要MD5碰撞 , 对于需要两个内容不同但是MD5值相同的文件 , 使用Fastcoll就可以了
select * from 'admin' where password=md5($passtrue)
- ffifdyop
- 这个点的原理是 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c , 这个字符串前几位刚好是 ‘ or ‘6 ,
而 Mysql 刚好又会吧 hex 转成 ascii 解释 , 因此拼接之后的形式是select * from 'admin' where password='' or '6xxxxx' 。 等价于 or 一个永真式 , 因此相当于万能密码 , 可以绕过md5()函数
- PHP|高配版小米12?三星S22将至,或4999元起步!
- 社交|【2022/02/04】thinkphp源码详细阅读(二)
- 乔布斯|【2022/01/25】thinkphp源码无差别阅读(二十九)
- PHP|接口一变十,性能猛堆料,奥睿科TB3-S2雷电硬盘盒扩展坞评测
- 华为|想绕过华为公司不可能!日本和华为达成的重要协议,意味着什么
- 微信|php运行报Call to undefined function curl_init()的解决办法
- |php通过正则表达式匹配结果输出时出现乱码怎么处理
- PHP|php中序列化与反序列化
- 忘记织梦后台登录密码1、登录PHPmyadmin登录phpmyadmin|数据库修改DEDECMS后台密码,忘记了织梦后台密码怎么办?
- PHP|爱奇艺、优酷、腾讯独播内容对比:差距无法接受