Skip to main content

Hack The Box - Invite Challenge

Hack The Box is an online platform allowing you to test your penetration testing skills and exchange ideas and methodologies with other members of similar interests. It contains several challenges that are constantly updated. Some of them simulating real world scenarios and some of them leaning more towards a CTF style of challenge. As an individual, you can complete a simple challenge to prove your skills and then create an account, allowing you to connect to our private network (HTB Labs) where several machines await for you to hack them. By hacking machines you get points that help you advance in the Hall of Fame.

           I have started to solve the challenges one by one.
                                       Website Link: https://www.hackthebox.eu

                  To take Challenges you must register for the website to access their network. But to Register you need to complete a challenge only then you can register. I know right :) So to register yourself you have to complete the first challenge which is to hack the invite registration procedure.
The challenge is available https://www.hackthebox.eu/invite. So Let's start.


HACK THE INVITE CHALLENGE:






              So The first Page that shows up is a black themed page which asks to enter the invite code. which we do not have obviously. So I start digging the code for any hint by the inspect element option provided by the Google Chrome browser by default. A URL of a JavaScript file is with a name inviteapi.min.js can be seen in a script tag.

URL seen by inspect element
               Opening this file presents a short function in which operations are performed. There I spotted a makeInviteCode which probably be included in the main invite page. So I opened a console tab in browser on the main page and wrote makeInviteCode. The option suggested a function named makeInviteCode(). Running it returned a JSON object.


 This object contains the following fields:
1. data
2. enctype
       data contains an arbitrary string and enctype field describes which algorithm it is encrypted with which says "BASE64".

NOTE:  It is worth mentioning here that Base64 is an encoding technique. Not an encryption technique. 

           So I copied the string and used the builtin linux tool to decode this string with this command 

                                                 echo <arbitrary-string> | base64 -d

which decoded to the following string:

                 "In order to generate the invite code, make a POST request to /api/invite/generate"

           So now we know that sending a POST request to /api/invite/generate will generate the invite code for us. A POST request can be seen in the code on the Sign Up button. By modifying the URL in the action field we can infact send a POST request to that URL. So changing the URL to https://www.hackthebox.eu/api/invite/generate in the browser I hit the Sign Up button on the web page. It presented a pop that I need to enter something in the text field. Entering garbage data and trying again opened a page with a JSON object with two fields:

1. Code
2. Format

 The code contains the data in Base64

NOTE: There is a very high chance that a string ending with and "=" character is encoded with Base64

           So again Decoded it with Base64 which yielded a string separated with 4 dashes which looks like a licence key/code. So, Tried this code by putting it in the invite code text field on the main page accepted the code and opened a registration form which indicates that the challenge has been completed as we have successfully "HACKED" the invite procedure.


Comments

Popular posts from this blog

Running long background processes with double fork magic

Note: In the following post child process is the process created after first fork() and grand child process is the process created after second fork().    In one of my projects recently I had to run a shell command as a background process. The system was performance intensive, so I had to run a child process and continue execution on the parent process.            We were using Python on Ubuntu so initially it seemed very easy. I thought of just using the subprocess library available for python. I started a background process with subprocess.Popen() and not call a Popen.wait() for it because I had to run the shell command in the background. PROBLEM:            Initially I thought it worked but when I checked the process tree. I noticed that the child processes completed  and entered a < defunct> state were not releasing memory.  SOLUTION:           After ...

Calculating 32 bit port masks through Python

Recently I had to work with openvswitch to apply drop some VIP traffic on some particular IPs. The problem was that those particular IPs had port ranges and the job was to only block those particular IP addresses with a specific port range. Openvswitch does not allows to specify port ranges like numbers, so if i were to add a rule for port range e.g 7 to 14 I cannot specify it like 7 - 14. Instead, I must specify the first number and wildcard the port numbers until the least significant 1 of the number changes to 0. For example: Number            Binary           Number of trailing 0s            Covered Range               Port Mask      7                    0111                              0    ...