The VM for the CTF challenge is located at,162/


IMF is a intelligence agency that you must hack to get all flags and ultimately root. The flags start off easy and get harder as you progress. Each flag contains a hint to the next flag. I hope you enjoy this VM and learn something.



I started off with an nmap scan for to get a lay of open ports:

nmap -p 1-65535 -T4 -A -v

Nothing too interesting, except port 80/tcp open.

On the “Contact Us” page we’re able to see a couple employee emails:

Roger S. Michaels – Director

Alexander B. Keith – Deputy Director

Elizabeth R. Stone – Chief of Staff

We find the first flag in the source of the contact.php page:

<!– flag1{YWxsdGhlZmlsZXM=} –>

Decoding the string, we get the contents of flag1:
echo YWxsdGhlZmlsZXM= | base64 --decode

Flag1: allthefiles

Using Flag1 as a reference to Flag2, I start looking at all the files from source, and a particular bunch catch my eye, which also look like Base64.


Appending the strings together, and decoding:
echo ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ== | base64 --decode

Which reveals Flag2:


Flag2: imfadministrator

Browsing to bring us to a login console:

Since source seems to be a common theme for this CTF, I check source, and see a nice comment:

Admittedly after trying many brute-force combinations for all of the local emails (with and without the domain), I took a hint on this flag. You don’t know what you don’t know, but I learned something new. Apparently in the PHP strcmp function, it will  Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
Furthermore, attempting to compare a string to an array will return NULL, and in this case will allow a login bypass, and spit out the flag.

So, using burp and changing the POST data for the password field from


Shoutout to reedphish for their write-up on this flag, and helping me learn something new (

Flag3: continueTOcms

As the flag suggests, I click on the IMF CMS link and continue to CMS.

By the looks of the URL structure, my first inclination would be for a possible SQL injection:

Since this is post-auth, I will use sqlmap with my new cookie, and attempt to enumerate the databases:
sudo sqlmap -u '' --cookie 'PHPSESSID=je70kk8bmq1fb8n6kh8oger6k5' --dbs

This confirms my suspicions of injection as a vector, and shows the available databases:

Since the admin database is the most interesting looking, we will dump it with the following command:
sudo sqlmap -u '' --cookie 'PHPSESSID=je70kk8bmq1fb8n6kh8oger6k5' --dbs --dump admin

This produces a new image we haven’t seen before:

Scanning the QR code, reveals flag4{dXBsb2Fkcjk0Mi5waHA=}
Flag4: uploadr942.php

Browsing to our new upload page, we’re presented with an option to upload a file:

My first theory is to upload a php webshell, but attempting to upload php, exe, and txt files, results in “Error: Invalid file type”. After trying many different file types, I was able to upload image files. My initial thoughts next brought me to find a way to insert a php cmd shell in the image, as I learned how to do this by tainting log files in OSCP. This is where I started falling flat and getting stuck, so I got a little push from another write-up. Kudos to the first person to figure this out, although you can upload any image type, you’re only able to use the php cmd shell with gif’s. So I inserted the php cmd shell in the .gif file, and uploaded it.

An interesting note, if you inspect the element after a successful upload, there is a unique hash in the comments.

In other write-ups they were able to deduce that the image is uploaded to /imfadministrator/uploads/HASH.extension

So if I navigate to:

I can see the header of the gif file. And more importantly can send commands to the shell, for example:

Will give me a directory listing. And I can cat out the flag in this directory:

Flag5: agentservices