ctf.show-CTF部分-SafePassword
这道题目考的是弱比较和PHP的异常处理
![image]()
其中前者的值是完全可控的, 但是第二个值不是:
![image]()
会发现我们不知道变量$secret_salt的值, 所以解法就是不进入IF分支语句
当$channelKey的值长度大于64的时候, 进入ELSE分支语句, 经过层层throw, catch, 最后$channelKey的值会变为2025
最后, 我们只需要构造一个MD5值能够弱等于2025的$accessKey值就行了,下面是爆破脚本
import hashlib,random,stringdef get_md5(target="2025"):while True:tmp = "".join(random.choices(string.ascii_letters+string.digits,k=20))#从字母数字组成的集合中随机挑选出20为字符tmp_md5 = hashlib.md5( tmp.encode() ).hexdigest()#把随机字符转为字节, 然后计算MD5值,最后返回16进制的格式if tmp_md5.startswith(target) and tmp_md5[ len(target) ] in "abcdef":#如果哈希值的开头是2025并且2025的后面一位字符是字母的话, 那就说明找到了print(f"[+]{tmp};{tmp_md5}")print("-----------------------------")get_md5()


