[buuoj][BJDCTF2020]Easy MD5

知识点:

  • password=’".md5($pass,true)."’
    ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6,
    而 Mysql 刚好又会吧 hex 转成 ascii 解释,因此拼接之后的形式是1select * from ‘admin’ where password=’’ or ‘6xxxxx’

等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数

  • php弱类型比较
    • &a!=&b MD5(&a)==MD5(&b)
      MD5碰撞,可以用MD5值以0e开头的来碰撞,也可以用数组绕过
    • &a!==&b MD5(&a)=MD5(&b)
      md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到
      =强比较的值相等
      或者利用md5值强碰撞,找到两个md5值相同的字符串即可。
      复现:
      打开页面,get参数传递,随便输入一个数:
      [buuoj][BJDCTF2020]Easy MD5_第1张图片
      看到提示:
Hint: select * from 'admin' where password=md5($pass,true)在这里插入代码片

构造password=ffifdyop
[buuoj][BJDCTF2020]Easy MD5_第2张图片
得到新页面levels91.php

[buuoj][BJDCTF2020]Easy MD5_第3张图片
构造a[]=1&b[]=2
[buuoj][BJDCTF2020]Easy MD5_第4张图片
得到新页面levell14.php
[buuoj][BJDCTF2020]Easy MD5_第5张图片
构造param1[]=1¶m[]=2
[buuoj][BJDCTF2020]Easy MD5_第6张图片

你可能感兴趣的:(web)