本文最后更新于 2025-11-06T19:33:56+08:00
1 2 3 对于:(string )$_GET ['md5_1' ] !== (string )$_GET ['md5_2' ] && md5 ($_GET ['md5_1' ]) === md5 ($_GET ['md5_2' ]) ● md5_1=%af%13 %76 %70 %82 %a0%a6%58 %cb%3 e%23 %38 %c4%c6%db%8 b%60 %2 c%bb%90 %68 %a0%2 d%e9%47 %aa%78 %49 %6 e%0 a%c0%c0%31 %d3%fb%cb%82 %25 %92 %0 d%cf%61 %67 %64 %e8%cd%7 d%47 %ba%0 e%5 d%1 b%9 c%1 c%5 c%cd%07 %2 d%f7%a8%2 d%1 d%bc%5 e%2 c%06 %46 %3 a%0 f%2 d%4 b%e9%20 %1 d%29 %66 %a4%e1%8 b%7 d%0 c%f5%ef%97 %b6%ee%48 %dd%0 e%09 %aa%e5%4 d%6 a%5 d%6 d%75 %77 %72 %cf%47 %16 %a2%06 %72 %71 %c9%a1%8 f%00 %f6%9 d%ee%54 %27 %71 %be%c8%c3%8 f%93 %e3%52 %73 %73 %53 %a0%5 f%69 %ef%c3%3 b%ea%ee%70 %71 %ae%2 a%21 %c8%44 %d7%22 %87 %9 f%be%79 %6 d%c4%61 %a4%08 %57 %02 %82 %2 a%ef%36 %95 %da%ee%13 %bc%fb%7 e%a3%59 %45 %ef%25 %67 %3 c%e0%27 %69 %2 b%95 %77 %b8%cd%dc%4 f%de%73 %24 %e8%ab%66 %74 %d2%8 c%68 %06 %80 %0 c%dd%74 %ae%31 %05 %d1%15 %7 d%c4%5 e%bc%0 b%0 f%21 %23 %a4%96 %7 c%17 %12 %d1%2 b%b3%10 %b7%37 %60 %68 %d7%cb%35 %5 a%54 %97 %08 %0 d%54 %78 %49 %d0%93 %c3%b3%fd%1 f%0 b%35 %11 %9 d%96 %1 d%ba%64 %e0%86 %ad%ef%52 %98 %2 d%84 %12 %77 %bb%ab%e8%64 %da%a3%65 %55 %5 d%d5%76 %55 %57 %46 %6 c%89 %c9%5 f%b2%3 c%85 %97 %1 e%f6%38 %66 %c9%17 %22 %e7%ea%c9%f5%d2%e0%14 %d8%35 %4 f%0 a%5 c%34 %d3%f3%a5%98 %f7%66 %72 %aa%43 %e3%bd%a2%cd%62 %fd%e9%1 d%34 %30 %57 %52 %ab%41 %b1%91 %65 %f2%30 %7 f%cf%c6%a1%8 c%fb%dc%c4%8 f%61 %a5%13 %40 %1 a%13 %d1%09 %c5%e0%f7%87 %5 f%48 %e7%d7%b3%62 %04 %a7%c4%cb%fd%f4%ff%cf%3 b%74 %a8%1 b%96 %8 e%09 %73 %3 a%9 b%a6%2 f%ed%b7%99 %d5%39 %05 %39 %95 %ab ● md5_2=%af%13 %76 %70 %82 %a0%a6%58 %cb%3 e%23 %38 %c4%c6%db%8 b%60 %2 c%bb%90 %68 %a0%2 d%e9%47 %aa%78 %49 %6 e%0 a%c0%c0%31 %d3%fb%cb%82 %25 %92 %0 d%cf%61 %67 %64 %e8%cd%7 d%47 %ba%0 e%5 d%1 b%9 c%1 c%5 c%cd%07 %2 d%f7%a8%2 d%1 d%bc%5 e%2 c%06 %46 %3 a%0 f%2 d%4 b%e9%20 %1 d%29 %66 %a4%e1%8 b%7 d%0 c%f5%ef%97 %b6%ee%48 %dd%0 e%09 %aa%e5%4 d%6 a%5 d%6 d%75 %77 %72 %cf%47 %16 %a2%06 %72 %71 %c9%a1%8 f%00 %f6%9 d%ee%54 %27 %71 %be%c8%c3%8 f%93 %e3%52 %73 %73 %53 %a0%5 f%69 %ef%c3%3 b%ea%ee%70 %71 %ae%2 a%21 %c8%44 %d7%22 %87 %9 f%be%79 %6 d%c4%61 %a4%08 %57 %02 %82 %2 a%ef%36 %95 %da%ee%13 %bc%fb%7 e%a3%59 %45 %ef%25 %67 %3 c%e0%27 %69 %2 b%95 %77 %b8%cd%dc%4 f%de%73 %24 %e8%ab%66 %74 %d2%8 c%68 %06 %80 %0 c%dd%74 %ae%31 %05 %d1%15 %7 d%c4%5 e%bc%0 b%0 f%21 %23 %a4%96 %7 c%17 %12 %d1%2 b%b3%10 %b7%37 %60 %68 %d7%cb%35 %5 a%54 %97 %08 %0 d%54 %78 %49 %d0%93 %c3%b3%fd%1 f%0 b%35 %11 %9 d%96 %1 d%ba%64 %e0%86 %ad%ef%52 %98 %2 d%84 %12 %77 %bb%ab%e8%64 %da%a3%65 %55 %5 d%d5%76 %55 %57 %46 %6 c%89 %c9%df%b2%3 c%85 %97 %1 e%f6%38 %66 %c9%17 %22 %e7%ea%c9%f5%d2%e0%14 %d8%35 %4 f%0 a%5 c%34 %d3%73 %a5%98 %f7%66 %72 %aa%43 %e3%bd%a2%cd%62 %fd%69 %1 d%34 %30 %57 %52 %ab%41 %b1%91 %65 %f2%30 %7 f%cf%c6%a1%8 c%fb%dc%c4%8 f%61 %a5%93 %40 %1 a%13 %d1%09 %c5%e0%f7%87 %5 f%48 %e7%d7%b3%62 %04 %a7%c4%cb%fd%f4%ff%cf%3 b%74 %28 %1 c%96 %8 e%09 %73 %3 a%9 b%a6%2 f%ed%b7%99 %d5%b9%05 %39 %95 %ab
MD5值相等的字符串 1 2 ● %4 d%c9%68 %ff%0 e%e3%5 c%20 %95 %72 %d4%77 %7 b%72 %15 %87 %d3%6 f%a7%b2%1 b%dc%56 %b7%4 a%3 d%c0%78 %3 e%7 b%95 %18 %af%bf%a2%00 %a8%28 %4 b%f3%6 e%8 e%4 b%55 %b3%5 f%42 %75 %93 %d8%49 %67 %6 d%a0%d1%55 %5 d%83 %60 %fb%5 f%07 %fe%a2 ● %4 d%c9%68 %ff%0 e%e3%5 c%20 %95 %72 %d4%77 %7 b%72 %15 %87 %d3%6 f%a7%b2%1 b%dc%56 %b7%4 a%3 d%c0%78 %3 e%7 b%95 %18 %af%bf%a2%02 %a8%28 %4 b%f3%6 e%8 e%4 b%55 %b3%5 f%42 %75 %93 %d8%49 %67 %6 d%a0%d1%d5%5 d%83 %60 %fb%5 f%07 %fe%a2
MD5值为0e开头的字符 1 2 3 4 5 6 7 8 9 10 11 12 s878926199a s155964671a s214587387a s214587387a240610708 :0 e462097431906509019562988736854 QLTHNDT:0 e405967825401955372549139051580 QNKCDZO:0 e830400451993494058024219903391 PJNPDWY:0 e291529052894702774557631701704 NWWKITQ:0 e763082070976038347657360817689 NOOPCJF:0 e818888003657176127862245791911 MMHUWUV:0 e701732711630150438129209816536 MAUXXQC:0 e478478466848439040434801845361
sha1值相等的字符串 1 2 ● array1=%25 PDF-1.3 %0 A%25 %E2%E3%CF%D3%0 A%0 A%0 A1%200 %20 obj%0 A%3 C%3 C/Width%202 %200 %20 R/Height%203 %200 %20 R/Type%204 %200 %20 R/Subtype%205 %200 %20 R/Filter%206 %200 %20 R/ColorSpace%207 %200 %20 R/Length%208 %200 %20 R/BitsPerComponent%208 %3 E%3 E%0 Astream%0 A%FF%D8%FF%FE%00 %24 SHA-1 %20 is%20 dead%21 %21 %21 %21 %21 %85 /%EC%09 %239 u%9 C9%B1%A1%C6%3 CL%97 %E1%FF%FE%01 %7 FF%DC%93 %A6%B6%7 E%01 %3 B%02 %9 A%AA%1 D%B2V%0 BE%CAg%D6%88 %C7%F8K%8 CLy%1 F%E0%2 B%3 D%F6%14 %F8m%B1i%09 %01 %C5kE%C1S%0 A%FE%DF%B7%608 %E9rr/%E7%ADr%8 F%0 EI%04 %E0F%C20W%0 F%E9%D4%13 %98 %AB%E1.%F5%BC%94 %2 B%E35B%A4%80 -%98 %B5%D7%0 F%2 A3.%C3%7 F%AC5%14 %E7M%DC%0 F%2 C%C1%A8t%CD%0 Cx0Z%21 Vda0%97 %89 %60 k%D0%BF%3 F%98 %CD%A8%04 F%29 %A1 ● &array2=%25 PDF-1.3 %0 A%25 %E2%E3%CF%D3%0 A%0 A%0 A1%200 %20 obj%0 A%3 C%3 C/Width%202 %200 %20 R/Height%203 %200 %20 R/Type%204 %200 %20 R/Subtype%205 %200 %20 R/Filter%206 %200 %20 R/ColorSpace%207 %200 %20 R/Length%208 %200 %20 R/BitsPerComponent%208 %3 E%3 E%0 Astream%0 A%FF%D8%FF%FE%00 %24 SHA-1 %20 is%20 dead%21 %21 %21 %21 %21 %85 /%EC%09 %239 u%9 C9%B1%A1%C6%3 CL%97 %E1%FF%FE%01 sF%DC%91 f%B6%7 E%11 %8 F%02 %9 A%B6%21 %B2V%0 F%F9%CAg%CC%A8%C7%F8%5 B%A8Ly%03 %0 C%2 B%3 D%E2%18 %F8m%B3%A9%09 %01 %D5%DFE%C1O%26 %FE%DF%B3%DC8%E9j%C2/%E7%BDr%8 F%0 EE%BC%E0F%D2%3 CW%0 F%EB%14 %13 %98 %BBU.%F5%A0%A8%2 B%E31%FE%A4%807 %B8%B5%D7%1 F%0E3 .%DF%93 %AC5%00 %EBM%DC%0 D%EC%C1%A8dy%0 Cx%2 Cv%21 V%60 %DD0%97 %91 %D0k%D0%AF%3 F%98 %CD%A4%BCF%29 %B1
使用ffifdyop万能密码绕过。ffifdyop的MD5加密结果是276f722736c95d99e921722cf9ed621c,经过MySQL编码后会变成'or'6xxx,使SQL恒成立,相当于万能密码,可以绕过md5()函数的加密。关键参数为md5(xx,true)。
MD5弱比较和强比较都可以利用数组绕过 1 2 3 4 5 6 7 8 9 $param1 != $param2 && md5 ($param1 ) == md5 ($param2 )$param1 != $param2 && md5 ($param1 ) === md5 ($param2 ) param1[]=1 param2[]=2
如果加入了 (string) 进行比较 1 2 3 4 5 6 7 (string )$param1 !== (string )$param2 && md5 ($param1 ) === md5 ($param2 ) (string )$param1 !== (string )$param2 && md5 ((string )$param1 ) === md5 ((string )$param2 ) param1=M%C9h%FF%0 E%E3%5 C%20 %95 r%D4w%7 Br%15 %87 %D3o%A7%B2%1 B%DCV%B7J%3 D%C0x%3 E%7 B%95 %18 %AF%BF%A2%00 %A8%28 K%F3n%8 EKU%B3_Bu%93 %D8Igm%A0%D1U%5 D%83 %60 %FB_%07 %FE%A2 param2=M%C9h%FF%0 E%E3%5 C%20 %95 r%D4w%7 Br%15 %87 %D3o%A7%B2%1 B%DCV%B7J%3 D%C0x%3 E%7 B%95 %18 %AF%BF%A2%02 %A8%28 K%F3n%8 EKU%B3_Bu%93 %D8Igm%A0%D1%D5%5 D%83 %60 %FB_%07 %FE%A2
要用bp传,hackbar不行,这个payload也可以绕过前面的不加(string)的
测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?php highlight_file (__FILE__ );error_reporting (0 );$param1 = $_POST ['param1' ];$param2 = $_POST ['param2' ];$a = ($param1 !== $param2 && md5 ($param1 ) == md5 ($param2 ));$b = ($param1 !== $param2 && md5 ($param1 ) === md5 ($param2 ));$c = ((string )$param1 !== (string )$param2 && md5 ($param1 ) === md5 ($param2 ));$d = ((string )$param1 !== (string )$param2 && md5 ((string )$param1 ) === md5 ((string )$param2 ));var_dump ($a );var_dump ($b );var_dump ($c );var_dump ($d );?>
两次MD5加密 跑这个脚本看人品)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 import hashlibimport threadingimport randomimport stringimport timeimport sysimport os CHARSET = string.ascii_lowercase + string.digits MIN_LENGTH = 10 MAX_LENGTH = 12 NUM_THREADS = os.cpu_count() * 4 PRINT_INTERVAL = 10000 SMART_MODE = True found_count = 0 processed_count = 0 start_time = time.time() lock = threading.Lock() running = True def is_valid_hash (hash_str ): """检查哈希是否以'0e'开头且后面全是数字""" return hash_str.startswith("0e" ) and hash_str[2 :].isdigit()def generate_random_string (length ): """生成随机字符串""" return '' .join(random.choices(CHARSET, k=length))def generate_smart_string (): """生成智能模式字符串(基于已知有效字符串模式)""" length = random.randint(MIN_LENGTH, MAX_LENGTH) if length < 3 : return generate_random_string(length) middle = '' .join(random.choices(CHARSET, k=length - 2 )) return 's' + middle + 'a' def worker (): """工作线程函数""" global found_count, processed_count while running: if SMART_MODE and random.random() > 0.3 : s = generate_smart_string() else : length = random.randint(MIN_LENGTH, MAX_LENGTH) s = generate_random_string(length) try : first_md5 = hashlib.md5(s.encode()).hexdigest() second_md5 = hashlib.md5(first_md5.encode()).hexdigest() except : continue if is_valid_hash(second_md5): with lock: found_count += 1 print (f"\n🔥 发现有效字符串 #{found_count} : {s} " ) print (f" 第一次MD5: {first_md5} " ) print (f" 第二次MD5: {second_md5} " ) print ("-" * 60 ) with lock: processed_count += 1 def print_progress (): """打印进度信息""" global processed_count, found_count while running: elapsed = time.time() - start_time speed = processed_count / elapsed if elapsed > 0 else 0 if processed_count % PRINT_INTERVAL == 0 : sys.stdout.write( f"\r已处理: {processed_count} | 发现: {found_count} | " f"速度: {speed:.2 f} 字符串/秒 | 运行时间: {elapsed:.0 f} 秒" ) sys.stdout.flush() time.sleep(0.1 )def main (): global running print ("=" * 60 ) print ("🔥 两次MD5后为0e开头的字符串爆破工具" ) print ("=" * 60 ) print (f"配置:" ) print (f" 字符集: {CHARSET} " ) print (f" 长度范围: {MIN_LENGTH} -{MAX_LENGTH} " ) print (f" 线程数: {NUM_THREADS} " ) print (f" 智能模式: {'启用' if SMART_MODE else '禁用' } " ) print ("=" * 60 ) print ("开始爆破... (按 Ctrl+C 停止)" ) print ("-" * 60 ) threads = [] for i in range (NUM_THREADS): t = threading.Thread(target=worker, daemon=True ) t.start() threads.append(t) progress_thread = threading.Thread(target=print_progress, daemon=True ) progress_thread.start() try : while True : time.sleep(1 ) except KeyboardInterrupt: print ("\n\n🛑 用户中断,停止爆破..." ) running = False for t in threads: t.join(timeout=1.0 ) progress_thread.join(timeout=0.5 ) elapsed = time.time() - start_time print ("\n" + "=" * 60 ) print ("💡 爆破完成!" ) print ("-" * 60 ) print (f" 总共处理字符串: {processed_count} " ) print (f" 发现有效字符串: {found_count} " ) print (f" 总运行时间: {elapsed:.2 f} 秒" ) print (f" 平均速度: {processed_count / elapsed:.2 f} 字符串/秒" ) print ("=" * 60 ) if found_count > 0 : print ("\n💡 提示: 您可以使用这些字符串来测试MD5比较漏洞" ) else : print ("\n⚠️ 未找到有效字符串,建议:" ) print (" - 增加字符串长度范围" ) print (" - 增加运行时间" ) print (" - 扩展字符集(如添加大写字母)" )if __name__ == "__main__" : main()