• md5强弱碰撞


    一,类型。

    1.弱比较

    php中的"=="和"===="在进行比较时,数字和字符串比较或者涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。按照此理,我们可以上传md5编码后是0e的字符串,在比较时php语言会将0e开头的数据认为是科学记数法,而后面的数据会被当做0。

    例如:a=xxx&b=xxxx

    240610708:0e462097431906509019562988736854
    QLTHNDT:0e405967825401955372549139051580
    QNKCDZO:0e830400451993494058024219903391
    PJNPDWY:0e291529052894702774557631701704
    NWWKITQ:0e763082070976038347657360817689
    NOOPCJF:0e818888003657176127862245791911
    MMHUWUV:0e701732711630150438129209816536
    MAUXXQC:0e478478466848439040434801845361

    2.强比较

    php中的''==='在比较时先判断字符串类型是否相同,再比较值。

    数组绕过:md5不能加密数组,在加密数组的时候会返回NULL,如果设置没有判断变量类型或内容,就可以使用,因此,强弱比较都是可以使用数组绕过的。

    eg:a[]=1&b[]=2

    3.真实碰撞对(md5值)

    eg:

    0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef

    和0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef

    二,示例

    [SWPUCTF 2021 新生赛]easy_md5(弱)

    1.包含有一个flag.php的文件,然后 get传参name,post传参password,当name和password的值不等,但是他们的md5值相等时,就会输出flag,否则输出wrong

    2.数组绕过

    3. 0e绕过

    [BJDCTF 2020]easy_md5(sql+弱+强)

    1.打开环境,提交查询后,在地址栏出现password=输入内容。

    2.bp抓包重放后发现hint: select * from 'admin' where password=md5($pass,true)

    3.绕过:ffifdyop

    4.得到一个新的页面,看源码,get传参a和b的弱比较,数组绕过或0e绕过

    数组绕过     ?a[]=1&b[]=2                  0e绕过      ?a=xxxx&b=xxxx

    5.得到一个新页面,强比较post传参param1和param2。

    post传参 数组绕过:param1[]=a¶m2[]=b,得到flag

     [SWPUCTF 2022 新生赛]奇妙的MD5(sql+弱+强)

    1.开始的绕过——ffifdyop

    2.弱比较

    3. 强比较:post传参wqh和dsy

     [NSSCTF 2022 Spring Recruit]babyphp(正则+强+0e弱)

    1,打开环境,是一串代码,包含有一个flag.php文件

    正则

    :preg_match是php函数,会被搜索的结果所填充,进行正则表达式匹配。并且只匹配一次

    此处为检查表单提交的数据是否满足以下条件:

    1. 变量 $_POST['a'] 是否存在;
    2. 变量 $_POST['a'] 中不包含数字;
    3. 变量 $_POST['a'] 可以转换为整数。

    post传参a,正则绕过

    可以使用数组绕过为a[]=1

    2.要求b1和b2强碰撞

    b1[]=3&b2[]=4

    3.c1和c2弱碰撞,强调了要传入c1不等于c2且c1,c2都要是字符串,c1,c2的MD5值要相等 所以c就不能用数组绕过,可以用科学计数法0e绕过

    c1=s878926199a&c2=s155964671a

    4.同时满足以上条件

    a[]=1&b1[]=3&b2[]=4&c1=s878926199a&c2=s155964671a

     

     [GDOUCTF 2023]受不了一点(php数字与字符比较)

    1.php代码如下

    1.post传参ctf和gdou会将ctf赋值给b以及gdou赋值给a并进行md5的强比较

    ctf[]=1&gdou[]=2

    2.get传参aaa和bbb要求其数值等于114514但是这两个的真实值不同(数字弱比较)

    当字符串与数字进行比较时,字符串会转换成整型/浮点型进行比较$a='114514a'--->114514

    aaa=114514&bbb=114514a

    3.设置cookie=j0k3r

    4.post传参flag与get传参flag,检查 $_POST['flag'] 是否等于字符串 'flag',或者 $_GET['flag'] 是否等于字符串 'flag'。如果任一条件为真,则它使用 die() 函数来终止脚本的执行

    此处要不结束进程,flag的值要不相等或者我们可以直接不传flag

    绕过:flag=33&33=flag或者分别传参不相等,这里我试验了没成功,但是按道理就是这样的,如果有能解答的请解答一下。

    [UUCTF 2022 新生赛]funmd5(暂缓)

    1.打开环境是一段代码

    • preg_replace 用于尝试替换掉可能的 "0e" 形式的字符串,但替换后的字符串并未被重新赋值给 $md5
    • preg_match 用于检查 $md5[0] 是否包含 "0e".
    • $sub 的赋值在 if(isset($md5)) 块之外是无效的.

    三,md5碰撞实验

    此类说明和解释了怎样生成和为什么可以做到不同行为的两个可执行文件具有相同的MD5值,直接参考吧。

    网络攻防技术——MD5碰撞实验-CSDN博客

    四,ffifdyop——详解

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

    md5在此处是一个函数,语法为md5(string,raw)

    1. string:必需,规定要使用的字符串。
    2. raw:可选 默认不写为FALSE3216进制的字符串
    3. TRUE16位原始二进制格式的字符串

    当raw项为true时,返回的这个原始二进制不是普通的二进制(0,1),而是  'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c

    32位16进制字符串:将MD5加密得到的128 位长度的值以每4位为一组,分为32组,每组以转换为16进制,进行转换得到一个32位的字符串。也就是md5加密。即md5的raw为true时,该函数的输出是原始二进制格式,会被作为字符串处理

    构造一个语句使sql语句永恒为真 

    布尔型判断时,以数字开头的字符串会被当做整型数,要单引号括起来(闭合语句),eg:password=‘xxx’ or ‘1xxxxxxxxx’,那么就相当于password=‘xxx’ or 1  ,也就是password=‘xxx’ or true,当xxx为纯数字时就可以不用引号

    目标:要找一个字符串取32位16进制的md5值里带有276f7227这个字段的,加上数字部分

    最终:想要得到一个可以绕过md5的值,就要有以下要素

    1.   'or'    该符号对应的16进制是   276f7227 

    2.   在276f7227这个字段后面紧跟一个数字,除了0,就是1-9,对应的asc码值是49-57,转化为16进制就是31-39,最终形式为276f7227+(31-39)

    3.最终xxxxxx276f7227+(31-39)这样形式的md5值,但是因为md5的特性,要把这个从md5解密出来需要庞大的计算,因此一般不会去另找。

  • 相关阅读:
    机器学习强基计划2-3:图文详解决策树预剪枝、后剪枝原理+Python实现
    spring mvc 上传文件出错,Required request part ‘file‘ is not present
    构建企业级DNS系统(十)搭建Docker容器bind
    软考知识点2
    PMP_第10章章节试题
    就在刚刚 Kubernetes 1.25 正式发布,包括这些重大变化
    Zlog日志框架学习笔记
    ASEMI肖特基二极管SB30100LCT图片,SB30100LCT应用
    WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台
    Python 自定义函数的基本步骤
  • 原文地址:https://blog.csdn.net/2303_81631620/article/details/139270496