Link Search Menu Expand Document

People Rater

Challenge URL: https://hackyholidays.h1ctf.com/people-rater

Methodology

This was a plain looking page that had buttons which upon clicking, pops an alert box containing Grinch’s ratings of people. 😮

Tea Avery is “Awful”. I wonder why…

Well, sitting around clicking random bootstrap buttons is not my style, so let’s dive into the page source! The following JavaScript was found on this page:

$('.thelist').on("click", "a", function(){
    $.getJSON('/people-rater/entry?id=' + $(this).attr('data-id'), function(resp){
        alert( resp.rating );
    }).fail(function(){
        alert('Request failed');
    });
});

This is a jQuery event handler that sends a JSON-formatted GET request to /people-rater/entry?id=<DATA-ID> where <DATA-ID> is an attribute from the button that was clicked.

Inspecting the buttons using my Chrome browser’s developer tools, I see that the Tea Avery button has an attribute data-id=eyJpZCI6Mn0=.

This data-id looks to be encoded in base-64 format, so I went ahead and decode it:

$ echo "eyJpZCI6Mn0=" | base64 -d; echo

{"id":2}

Seems like the first button - Tea Avery, has an id of 2. Who is 1 then? Only one way to find out:

$ echo '{"id":1}' | base64

eyJpZCI6MX0K

To find out who is numero uno, I sent a GET request to /people-rater/entry?id=eyJpZCI6MX0K:

Flag: flag{b705fb11-fb55-442f-847f-0931be82ed9a}

Thoughts 🥇

This was pretty straightforward as long as one can read simple JavaScript and understand what the buttons’ event handler was doing. Also, being able to recognize the base-64 encoded data-id attribute would be key in solving this challenge.