[BJDCTF2020]Easy MD51

提示

  1. 万能密码的md5形式转变
  2. MD5函数的各种性质

这里拿到题目什么都没有只有一个提交框

信息收集

  1. 源代码查看
  2. 抓包查看
  3. 目录扫描
  4. sqlmap尝试跑
  5. 查看框架

[BJDCTF2020]Easy MD51_第1张图片

这题只需要抓包查看有提示

这里就涉及到MD5以及mysql的性质问题

  1. 看到这种sql语句第一项到的就应该是万能密码or1=1或者or2=2之类的
  2. 一串特定的代码(ffifdyod)被md5加密以后会变成 276f722736c95d99e921722cf9ed621c,这个字符串前几位ascii解释刚好是 ' or '6  
  3. Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是 1select * from 'admin' where password= '' or '6xxxxx' ,类似于or1=1这种万能密码

[BJDCTF2020]Easy MD51_第2张图片

输入后会跳转到另一个界面

[BJDCTF2020]Easy MD51_第3张图片

查看源代码

这里我所知道的有两种方法

  1. 数组绕过:a[]=1&b[]=2       这里把a和b变成数组了a不等于b,但是md5加密后会报错为null但是报错以后反而还相等了
  2. 弱等于0e开头绕过:a=240610708&b=QNKCDZO,这样也符合了a和b不相等,当加md5加密以后他们都是0e开头,并且使用的是弱等于'==',所以相等(在php中’===‘是绝对等于,意思就是两边必须完全相等,但是‘==’就相反,反而只用开头相等就行,例如12456==12789或者123456==123)

这些md加密后都是0e开头,网上随便都能搜到的

[BJDCTF2020]Easy MD51_第4张图片

[BJDCTF2020]Easy MD51_第5张图片

到第三关

像这一关也可以用数组绕过

除非当数据传入的时候进行了将它变成字符串

比如md5(strval($_POST['param1']))===md5(strval($_POST['param2']))

[BJDCTF2020]Easy MD51_第6张图片

payload:   param1[]=1¶m2[]=2

[BJDCTF2020]Easy MD51_第7张图片

你可能感兴趣的:(BUUCTF,web题,php,安全)