CTF中有关md5绕过的题


想起有次做到这样一道题:

 

 

 由代码可知要得到flag需要str1=str2且a!=b

a,b是POST的方式得到,hack,rep是GET方式得到


 

题中的hash函数:

string hash ( string $algo , string $data [, bool $raw_output = false ] )

 

algo
要使用的哈希算法,例如:"md5","sha256","haval160" 等。
data
要进行哈希运算的消息。
raw_output
设置为 TRUE 输出原始二进制数据, 设置为 FALSE 输出小写 16 进制字符串。

 

题中为对变量a进行md5加密


题中的strstr函数:

strstr ( string $haystack , $needle [, bool $before_needle = FALSE ] ) 

结果返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串。

若before_needle= TRUEstrstr() 将返回 needle 在 haystack 中的位置之前的部分。

 


md5绕过原理:

 

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,

 

所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

 

常用的有:

QNKCDZO

s878926199a

s155964671a

......


 

 

解题:

题中先对a和b进行了md5加密,这里我们用a=QNKCDZO,b=s878926199a.(因为它们md5加密后都为0e开头)

则得到str1=0e830400451993494058024219903391

而后由strstr函数的性质,这里令hack=e,rep=true

str2=strstr("0e545993274517709034328855841020","e",true)=0

所以最后满足了str1=str2且a!=b,得到flag:

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM