PrintNightmare, thrice! | Nov 9, 2022
Introduction
Welcome to my another writeup! In this TryHackMe PrintNightmare, thrice! room, you'll learn: PrintNightmare forensics via WireShark, Brim, Process Monitor and more! Without further ado, let's dive in.
- Overall difficulty for me (From 1-10 stars): ★★★★★☆☆☆☆☆
Background
The nightmare continues.. Search the artifacts on the endpoint, again, to determine if the employee used any of the Windows Printer Spooler vulnerabilities to elevate their privileges.
Difficulty: Medium
Scenario: After discovering the PrintNightmare attack the security team pushed an emergency patch to all the endpoints. The PrintNightmare exploit used previously no longer works. All is well. Unfortunately, the same 2 employees discovered yet another exploit that can possibly work on a fully patched endpoint to elevate their privileges.
Task: Inspect the artifacts on the endpoint to detect the PrintNightmare exploit used.
Task 1 - Detection
Question 1 - What remote address did the employee navigate to?
In this Desktop, we can see there is a pcap (Packet Capture) file and a Process Monitor log file:

We can use Brim for better view:


In the Windows Networking Activity query, we can there are some weird SMB connection:

Looks like the 20.188.56.147 is the attacker!
- Answer:
20.188.56.147
Question 2 - Per the PCAP, which user returns a STATUS_LOGON_FAILURE error?
To solve this, I'll open pcap file via WireShark:

Since STATUS_LOGON_FAILURE is a SMB login failed error, we can filter SMB connections:
smb2.nt_status == 0xc000006d

Let's follow the TCP stream!


That looks like the username!
- Answer:
THM-PRINTNIGHT0\rjones
Question 3 - Which user successfully connects to an SMB share?
Again, let's filter STATUS_SUCCESS!
smb2.nt_status == 0x00000000

In the first Session Setup Response, we can see there is a Session Id header, which contains the account name, domain, host:

- Answer:
THM-PRINTNIGHT0/gentilguest
Question 4 - What is the first remote SMB share the endpoint connected to? What was the first filename? What was the second? (format: answer,answer,answer)
Now, back to Brim, we can use _path=~smb* OR _path=dce_rpc | sort ts filter to find the first share that gentilguest connected to:

First remote SMB share: \\printnightmare.gentilkiwi.com\IPC$
Then, we see \PIPE\srvsvc and \pipe\spoolss are the first and second filename:

- Answer:
\\printnightmare.gentilkiwi.com\IPC$,srvsvc,spoolss
Question 5 - From which remote SMB share was malicious DLL obtained? What was the path to the remote folder for the first DLL? How about the second? (format: answer,answer,answer)
In here, we can use this filter:
_path=~smb* OR _path=dce_rpc AND name=*.dll | sort ts
This filter will find all the .dll in SMB path:

We can see that the mimispool.dll looks very sussy, it sounds like mimikatz.
- Answer:
\\printnightmare.gentilkiwi.com\print$,x64\3\mimispool.dll,W32X86\3\mimispool.dll
Question 6 - What was the first location the malicious DLL was downloaded to on the endpoint? What was the second?
Now, we can use the FullEventLogView to solve this:
Go to "Advanced Options" to set the event days upto 999 days:



In here, we can use the Find (Ctrl + F) to find the mimispool.dll:


- Answer:
C:\Windows\System32\spool\drivers\x64\3,C:\Windows\System32\spool\drivers\W32X86\3
Question 7 - What is the folder that has the name of the remote printer server the user connected to? (provide the full folder path)
After I fumbling around, I found that there is a weird HKLM register:

Since we found all the malicious DLLs are in C:\Windows\System32\spool\, let's explore that directory:


Found it!
- Answer:
C:\Windows\System32\spool\SERVERS\printnightmare.gentilkiwi.com
Question 8 - What is the name of the printer the DLL added?
While I was finding the full path of the malicious DLLs, I also found this:

This is a printer name!
- Answer:
Kiwi Legit Printer
Question 9 - What was the process ID for the elevated command prompt? What was its parent process? (format: answer,answer)
In this question, we can use ProcMon (Process Monitor) to find the elevated command prompt:

To find the command prompt, we can use the "Filter" (Ctrl + L):

Let's filter cmd.exe!


As you can see, all of the cmd.exe process PID is 5408. Let's dig deeper to this:

It's parent PID is 2640.
Let's filter that PID!



It's the spoolsv.exe!
- Answer:
5408,spoolsv.exe
Question 10 - What command did the user perform to elevate privileges?
Since we know 5408 is the cmd.exe process PID, we can throw it to FullEventLogView!

Found it!
- Answer:
net localgroup administrators rjones /add
Conclusion
What we've learned:
- PrintNightmare Forensics via WireShark, Brim, Process Monitor