This is my first time joining IBOH and I’ve heard a lot of good feedbacks among ctf’ers before this. Most of the challenges were surprisingly created by students at APU, and despite that, they are of really high quality. I really enjoyed them, especially the forensics challenge, even though there are a couple I didn’t manage to solve during the competition.
Web
In the echoes of the system
First there will be a web page that accept an input, and it will be passed into a parameter feedback
once sent.
After trying out ls
as one of the input. It is somehow accepted as a unix argument to list all of the directories and files in the current web server directory.
Noticed that there is flag.txt
in the output, therefore, all you need to do is read it by using cat command :).
But there is a problem though cat
, flag
, rm
, and grep
is a blacklisted command so you need to bypass it.
Here is a well known payload to bypass it c"at"+*
, I used asterisk because it will eventually read all the files in the directory so no flag
syntax will be included and blocked :)
Warmup
For warmup, understanding this block of code will eventually get you the flag.
1 | <!DOCTYPE HTML> |
What happen is, first you need to include the source
GET parameter and eventually there will be php source code printed into the web page.
1 | if (isset($_GET['source'])) { |
That’s the first step now, it wants you to include warmup
GET parameter and ensure that the value of the warmup
parameter is warmupisessential
.
1 | $string1 = $_GET['warmup']; |
But here is the catch though,
1 | $string3 = preg_replace( |
This block of code removes the string warmupisessential
from the warmup
parameter. To exploit this, you can do the following:
Construct the payload like this:
w
+ warmupisessential + armupisessential
The code will remove the warmupisessential
in the middle, but when combined, it will still result in the correct payload:
1 | http://98.82.201.85:7004/warmup.php?warmup=wwarmupisessentialarmupisessential |
flag IBOH24{5e83215e5db52738f7699a3c5d94702c}
Kelvin Diner
At first glance, I thought this web page is vulnerable to IDOR attack. Using id
parameter.
But then on id
value 2 on administrator profile, if I’m not mistaken it says something like iboh is not idor
or something idk I totally forgot.
So that means we are not in the right path, so lets try other exploitation techniques.
As expected, there is another endpoint which is food.php
that has a menu_item
parameter that is vulnerable to local file inclusion attack.
I’ve tried php wrapper, but it doesn’t work.
So reading payload all the things github repo, turns out you can get a remote command execution via pearcmd
, which is a framework for php.
1 | menu/food.php?menu_item=/usr/local/lib/php/pearcmd.php&+-c+/tmp/exec.php+-d+man_dir=echo(system($_GET['c'])); +-s+ |
1 | menu/food.php?menu_item=/tmp/exec.php&c=ls |
Now all you need to do is just find the flag
Forensic
New Hire
For this challenge we are presented with a kali folder and a couple of xml files, no clue what this is during the competition, but then after reading @warlocksmurf’s writeups it turns out to be an output from AD Enumeration tool.
Here is the structure
So what I did was first taking a look at groups.xml
file
1 | <Groups ... cpassword="FKhE/Beywcp8ZLLxH6LszmcuRiXceWaeEXvSJ5jKyJjqJ9vAidZiHVebDcE6n+Wi" ... </Groups> |
This part right here caught my attention so I decided to google it, then I come across an article Unwrapping GPP: Exposing the cPassword Attack Vector using Active (HTB Machine).
Turns out that cPassword is a credentials that admin uses to create policies for GPP and somehow the key to decrypt cPassword
was released accidently.
Here is a tool written to decrypt it.
Second part of the flag retrieved!
Now the first part of the flag, you need to further analyze the recon
folder that has 20240815030319_users.json
information in it. Upon further investigation there is a base64 strings attached in it.
There you go!, combine both of the flags together