该题的考点:
1.MD5类型的sql注入字符串:ffifdyop;针对sql语句中的MD5解密绕过
2.MD5弱类型比较:常见MD5值为0e开头的字符串:常见的MD5碰撞:md5值为0e开头_md5 0e-CSDN博客
3.MD5强类型比较:数组绕过或强类型碰撞
强类型碰撞的字符串:
字符串1:
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
字符串2:
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
题目地址:a65ab9cc-4596-447b-b0b3-2d10002831cb.node5.buuoj.cn:81/leveldo4.php
进入题目发现是一个输入框,查看源码没发现什么东西;随便输入一个密码提交发现没啥变化
通过bp抓包发现了后台的检测代码;必须满足password=md5($pass,true)为真才会有输出;
到这里就懵了,看了别人的wp才发现原来还有这样的字符串:ffifdyop
关于该字符串的详解:ffifdyop——绕过中一个奇妙的字符串 - 你知道是我的 - 博客园 (cnblogs.com)
该字符串经过md5加密后:276f722736c95d99e921722cf9ed621c
再转换为字符串:'or'6<乱码> 即 'or'6�]��!r,��b
刚好可以构成一个sql注入的语句 'or'6;这里真的太神奇了
通过将密码改为ffifdyop发现直接得到了返回信息;但是还没完;
通过访问提示的文件到达了另一个页面;源码中有了对应的提示信息;
这里考察的是MD5的弱类型匹配==;即对于两个以数字开头的字符串进行比较时会以数字为比较值;如0e==0为true;123afdsf==123fejifieji为true;那这里直接找两个MD5值为相同开头的就好了;我这里用的是MD5值为0e开头的字符串;a=QNKCDZO;b=240610708
MD5值为0e开头的字符串:常见的MD5碰撞:md5值为0e开头_md5 0e-CSDN博客
又给了一个提示文件;再去访问一下该文件;
这里有给出了一段源码;这里用的是===;明显是考察MD5值的强类型绕过;由于对于输入没有进行处理;所以这里有两种方法:数组绕过或者MD5值的强碰撞绕过
数组绕过原理:MD5只能对字符串进行处理;无法解析数组;因此会直接返回为NULL;
构造payload:param1[]=1¶m2[]=2
得到了flag值
第二种就是直接MD5强类型碰撞;找两个MD5值相等的不同字符串;上网百度了一下还真有;
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2
M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
构造payload:
param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2¶m2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2
同样得到了flag
10