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
|
import requests
import subprocess
import re
# 以下是一些随机生成的 MD5 值及其对应的密码。每个密码都是由数字、字母和特殊字符组成的。
# MD5 值的首位字符涵盖了从 '0' 到 'f' 的范围,确保了每个哈希的首位字符在十六进制范围内。
# 用于测试或验证密码和哈希值的映射。
passwords=[
("0f7e44a922df352c05c5f73cb40ba115","1234567891"),
("1abdec9e557dd71f742a5cfd35fb85f5","25849"),
("267ffd6c931f0115b331c412a43d45dd","23wesdxc@#"),
("3c0a498c552c843646b8fd12fe00b2db","44112886d1d1476"),
("47ee17f970ac4cb5dd5c38508f43b3c7","1q9hitn358"),
("57b7fa6522a60d4864bdaeb9291e3915","258741"),
("663fd3c5144fd10bd5ca6611a9a5b92d","3077"),
("7af9ef04b0871d247cebd4a4ab4aa8a5","3WRs3jO576"),
("8af6d54b19ab50824a31ed26e972b7be","200701203"),
("9a75d47ca2c81e4301c642c30df54263","2kewl4u"),
("af937209a0b274e6048a23909cf0a78b","1a1a3c7g"),
("b1758e9b7f39391aa4c39b456da20c16","1neosmartstatestado"),
("c843481f52d8eeb5c03a8cbbf48355d7","118294"),
("dd5ac53efc3789d835bdb58ee684e7bc","1ct5WiN113"),
("e6edfc340d0003d6538f2e4cac7af97c","13a82aK395"),
("f5bb0c8de146c67b44babbf4e6584cc0","123123123")
]
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
}
aboba = []
print(f"{'Hash Start':^15}{'Hash':^35}{'Login':^15}{'Password':^20}")
for hsh, pw in passwords:
try:
login, password = pw[:2], pw[2:]
print(f"{hsh[0]:^15}{hsh:^35}{login:^15}{password:^20}")
data = {
'username': login,
'password': password,
}
response = requests.post('http://52.59.124.14:5008/', headers=headers, data=data)
aboba.append((hsh[0], hsh, login, password, response.cookies['PHPSESSID']))
except:
pass
# 字符集和解码函数
alph = "abcdefghijklmnopqrstuvwxyz0123456789_-"
def ck_decode(ck):
decoded = [alph.find(i) for i in ck]
# 去除掉第一个数字,即 idx 部分
return ' '.join(map(lambda x: f'{x} {x} {0} {37} ', decoded[:30])) # 从第一个数字开始输出
# 用于存储提取的 seed 值的列表
seeds = []
for idx, hsh, lg, pw, ck in aboba:
decoded_ck = ck_decode(ck)
command = ["./php_mt_seed"] + decoded_ck.split() # 创建命令
print("[+] Executing command:", " ".join(command)) # 打印将要执行的命令
# 捕获命令的输出
result = subprocess.run(command, capture_output=True, text=True)
# 正则表达式匹配十进制数字(忽略十六进制部分)
match = re.search(r"seed = 0x[0-9a-fA-F]+ = (\d+)", result.stdout)
if match:
seed_value = match.group(1) # 获取十进制的 seed 数字
print(f"[+] Found seed value: {seed_value}")
seeds.append(seed_value) # 将提取到的 seed 值加入列表
# 用于存储解码后的原始值
original_values = []
for seed in seeds:
# 将十进制数字转换为十六进制字符串
hex_value = hex(int(seed))[2:]
# 如果十六进制字符串长度是奇数,补充一个前导零
if len(hex_value) % 2 != 0:
hex_value = "0" + hex_value
# 将十六进制字符串转换为字节数据
binary_data = bytes.fromhex(hex_value)
# 解码字节数据恢复原始值
original_value = binary_data.decode('utf-8', errors='ignore') # 加上 errors='ignore' 防止无法解码的字节报错
original_values.append(original_value)
# 拼接所有的原始值为一个字符串
result_string = "".join(original_values)
print("[+] Flag:", result_string)
|