对md5加密的绕过

if(md5( k e y 1 ) = = m d 5 ( 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解析成变量;

在这里插入图片描述

发布了20 篇原创文章 · 获赞 18 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/100110388