对md5加密的绕过

if(md5( k e y 1 ) = = m d 5 ( key1) == md5( key1)==md5(key2) && $key1 !== $key2){
echo $flag.”取得flag”;

如果md5加密的值一样而未加密的值不同,就输出flag.

有两种方法绕过:

1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。

http://www.index.php?kekeyy1[]=1&kekeyy2[]=2
这里是加上为了绕过对key替换为空格

2,利用==比较漏洞

如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

下列的字符串的MD5值都是0e开头的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s214587387a

额外的知识点
1、备份文件的扩展名一般为*.swp,*.bak

2、两种比较靠谱的方法:①用御剑扫描;②用源码泄露工具

3、阅读代码,这里有几个函数:

strstr(string,search,before_search):找到search字符串在string中第一次出现的位置,并把后面的字符串输出;before_search如果为true,则返回位置之前的字符串;默认为false;

substr(string,start,length):看参数很容易理解,返回字符串的一部分;

str_replace(find,replace,string,count):在字符串sting中找到字符串find,并把它替换成replace;

parse_str(string,array):把查询字符串解析到变量中;

然后我们可以知道这段代码的意思:代码从?后开始截取到str中,也就是变量后开始截取字符串;然后从位置1开始截到字符串结束;之后把字符串中的kay字段全用‘ ’替代,这个我们可以通过构造"kekeyy"来绕过;最后把key1和key2解析成变量;

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值