[base]MD5强碰撞

进行代码审计,if($_POST['a']!=$_POST['b']&&md5($_POST))==md5($_POST['b']))

法一:找出md5值都是两个0e开头的开头的。原理是PHP里面在做 == 的时候会先把两边的类型转成一样的,因为是0e开头,php会认为它是科学技计数法,

而0的多少次方都是0。

QNKCDZO

0e830400451993494058024219903391

s878926199a

0e545993274517709034328855841020

s155964671a

0e34276841682245152497411725446

注意:将GET改成POST;加上Content-Type:application……

法二:数组绕过。这里也考察了一个PHP的md5函数漏洞,就是如果md5函数的参数是一个数组值,会导致函数返回false。

原理是md5等函数不能处理数组,导致函数返回Null。而Null是等于Null的,导致了绕过。

第一关通过!

if($_POST['c']!=$_POST['b']&&md5($_POST))===md5($_POST['b']))

第二关如第一关一样,两个方法都行。

注意:直接在a[]=1&b[]=2后面接着写就行,不需要另外起行,我这里还卡了蛮久。

第二关通过!

if ((string)$_POST['e']!== (string)$_POST['f'] && md5($_POST['e']) === md5($_POST['f']))

多了个(string),这里我们需要用超长的字符串且MD5值相等,例:

%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2

%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

注意:数组,普通字符串得用a[]=……,超长字符串得用a=,否则不成功!

第三关通过,获得flag!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值