Files
admin 2d8c1ea8f9 chore: 批量新增各类工具脚本与配置文件
1. 新增音频录制、下载、上传相关脚本
2. 新增数据库操作、API调用工具
3. 新增Excel数据处理脚本
4. 新增弱密码检测脚本
2026-06-14 17:47:15 +08:00

207 lines
5.1 KiB
Python

# %%
import pymysql
import pandas as pd
import snowflake
import random
# %%
# 创建数据库连接
connection = pymysql.connect(
host='100.64.0.36',
user='root',
password='@HXYD1109mysql',
database='school_server',
charset='utf8'
)
# 创建游标对象
cursor = connection.cursor()
sql="select id,stu_name from student where team_id=19"
cursor.execute(sql)
result=cursor.fetchall()
# %%
def create_table(cursor,result):
data = []
for i in result:
list_list = list(i)
des=cursor.description # 获取表详情,字段名,长度,属性等
t = ",".join([item[0] for item in des])
table_head = t.split(',') # # 查询表列名 用,分割
dict_result = dict(zip(table_head, list_list)) # 打包为元组的列表 再转换为字典
data.append(dict_result) # 将字典添加到list_result中
return data
# %%
table = create_table(cursor,result)
# %%
# %%
sql1 = "select user_name from account"
cursor.execute(sql1)
result=cursor.fetchall()
table_app = create_table(cursor,result)
# %%
# %%
from requests import get,post
import pandas as pd
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
import threading
# %%
# 常用弱密码列表
WEAK_PASSWORDS = [
"123456a",
"123456",
"admin123",
"password",
"admin@123",
"root123",
"12345678",
"123456789",
"888888",
"666666",
"123123",
"111111",
"qwerty",
"abc123",
"1q2w3e",
"1qaz2wsx",
"a123456",
"Aa123456",
"@123456",
"Abcd1234",
"Abcd@123",
"admin",
"123321",
"000000",
"1234",
"12345",
"test123",
"pass123",
"1234567",
"1234567890",
]
BASE_URL = "http://band.hxzhxy.cn"
# 先用一个已知弱密码账号验证接口是否通畅
print("=" * 50)
print("验证接口是否通畅...")
test_param = {
"username": "zhongwei",
"password": "123456a",
"client_id": "client",
"grant_type": "password",
"client_secret": "123456",
}
try:
test_resp = get(url=f"{BASE_URL}/oauth/token", params=test_param, timeout=10).json()
if "access_token" in test_resp:
print("接口通畅,已获取测试 token")
else:
print(f"接口返回: {test_resp}")
except Exception as e:
print(f"接口请求异常: {e}")
# %%
# 线程安全的检测结果
weak_accounts = []
total_attempts = [0]
lock = threading.Lock()
def try_account_password(account_idx, username):
"""尝试单个账号的所有弱密码,返回找到的弱密码或 None"""
for pwd in WEAK_PASSWORDS:
param = {
"username": username,
"password": pwd,
"client_id": "client",
"grant_type": "password",
"client_secret": "123456",
}
with lock:
total_attempts[0] += 1
attempt = total_attempts[0]
try:
resp = get(url=f"{BASE_URL}/oauth/token", params=param, timeout=10)
data = resp.json()
if "access_token" in data:
print(f"[弱密码] 账号#{account_idx}: {username} | 密码: {pwd} | token: {data['access_token'][:20]}...")
return {
"username": username,
"password": pwd,
"token": data["access_token"],
}
except Exception as e:
print(f" [异常] #{account_idx} {username} / {pwd} -> {e}")
return None
print("=" * 50)
print(f"开始检测 {len(table_app)} 个账号的弱密码...")
print(f"弱密码列表 ({len(WEAK_PASSWORDS)} 个): {WEAK_PASSWORDS}")
print(f"线程数: 3")
print("-" * 50)
start_time = time.time()
completed = [0]
with ThreadPoolExecutor(max_workers=3) as executor:
futures = {}
for i, account in enumerate(table_app, 1):
username = account['user_name']
future = executor.submit(try_account_password, i, username)
futures[future] = i
for future in as_completed(futures):
result = future.result()
with lock:
completed[0] += 1
if completed[0] % 10 == 0:
elapsed = time.time() - start_time
print(f"[进度] 已检测 {completed[0]}/{len(table_app)} | 用时 {elapsed:.1f}s | 发现弱密码: {len(weak_accounts)} 个")
if result:
with lock:
weak_accounts.append(result)
elapsed_total = time.time() - start_time
# %%
# 输出检测结果
print("=" * 50)
print("检测完成!")
print(f"累计尝试 {total_attempts[0]} 次请求")
print(f"耗时: {elapsed_total:.1f} 秒")
print(f"发现 {len(weak_accounts)} 个弱密码账号:")
print("=" * 50)
if weak_accounts:
df_weak = pd.DataFrame(weak_accounts)
# token 太长,截断显示
df_weak["token_preview"] = df_weak["token"].str[:30] + "..."
df_display = df_weak[["username", "password", "token_preview"]]
print(df_display.to_string(index=False))
# 可选:导出到 Excel
# df_weak.to_excel("weak_password_accounts.xlsx", index=False)
# print("\n结果已导出到 weak_password_accounts.xlsx")
else:
print("未发现弱密码账号")