[BJDCTF2020]Easy MD51

一、知识点:

MD5加密

PHP中:

  • == 运算符用于比较两个变量的值是否相等,会进行类型转换。
  • === 运算符用于比较两个变量的值和数据类型是否完全相等,不会进行类型转换。
  • 在 PHP 中,将两个以 `0e` 开头的字符串进行比较时会认为它们相等是因为 PHP 在进行非严格相等比较时(使用 `==` 运算符)会进行类型转换,而这个类型转换特性在处理以 `0e` 开头的字符串时产生了有趣的效果。以 `0e` 开头的字符串在 PHP 中会被解释为科学计数法表示的数值,并且如果将其转换为整数或浮点数时,它们会被解释为 `0`。

    例如:
    $str1 = "0e1234"; // "0e" 后面是一个较大的数字
    $str2 = "0e5678"; // "0e" 后面是另一个较大的数字

  • var_dump($str1 == $str2); // 输出: bool(true)

  • 这是因为在非严格相等比较时,PHP 将这两个字符串转换为数值类型并且数值都解释为 `0`,因此它们被认为是相等的。但要注意,这种现象仅限于非严格相等比较(`==` 运算符)。在严格相等比较时(`===` 运算符),PHP 会同时比较值和数据类型,所以这两个以 `0e` 开头的字符串在严格相等比较时不会被认为相等。因此,对于哈希值的比较,尤其是在安全敏感的场景中,应该使用严格相等比较来确保数据的准确性和安全性。即使用 `===` 运算符来进行比较。

  • md5等函数不能处理数组,导致函数返回Null

二、解题:

开题,页面一个输入框,试试sql注入,没反应,用sqlmap跑也啥也没有。题目说是MD5,抓个包看看 

有个hint,发现我们输入的内容会进行MD5运算,所以还是一个sql注入,只是需要用MD5加密后的万能密码注入,查资料后,

ffifdyop这个字符串MD5加密后得到276F722736C95D99E921722CF9ED621C 

在将其进行16进制转字符后就是 'or' ******后面这串不为0就行 ,提交ffifdyop

 再看页面源码

 用到上面的知识点

1、== 运算符用于比较两个变量的值是否相等,会进行类型转换

2、在 PHP 中,将两个以 `0e` 开头的字符串进行比较时会认为它们相等是因为 PHP 在进行非严格相等比较时(使用 `==` 运算符)会进行类型转换,而这个类型转换特性在处理以 `0e` 开头的字符串时产生了有趣的效果。以 `0e` 开头的字符串在 PHP 中会被解释为科学计数法表示的数值,并且如果将其转换为整数或浮点数时,它们会被解释为 `0`

 

所以我们找两个MD5加密后开头为0e 的两个明文就行

QNKCDZO

240610708

构造payload:

505706c8-8a86-43fd-be42-c3f19cbeb4e6.node4.buuoj.cn:81/levels91.php?a=QNKCDZO&b=240610708

再看页面显示和上面知识点

1、=== 运算符用于比较两个变量的值和数据类型是否完全相等,不会进行类型转换。

2、md5等函数不能处理数组,导致函数返回Null

所以我们将两个变量搞成数组就可以了 

payload为:

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值