Skip to content
This repository has been archived by the owner on Dec 6, 2023. It is now read-only.

Specific port for each MSSQL target #679

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

SAERXCIT
Copy link

Hi !

This PR adds to MSSQL the possibility to specify a port for each target, instead of using the same port for all taken from the --port argument.

This is especially useful when extracting MSSQL instances from the domain's SPNs, which often use random, non-consistent ports. After this PR, CME can be used to quickly¹ check which MSSQL instances are up and responding, and which can be for instance accessed by a low-privileged user.

For MSSQL, targets can now be specified in the form <target>:<port>. If <port> is not supplied, CME will fallback on the port provided by the --port argument, the current behaviour.

Cheers!

¹: One issue subsists: CME relies on the impacket implementation of MSSQL, which does not allow specifying a SYN timeout. As such, CME will wait for a long time for a SYN/ACK before timing out, which can happen if the port is firewalled off or if the host does not exist anymore. Until the impacket project is active again to submit a PR, one can use this small patch on their local impacket library to set the MSSQL connect timeout to 2 seconds (for instance) to fasten CME:

diff --git a/impacket/tds.py b/impacket/tds.py
index b1b21250..90fdfe94 100644
--- a/impacket/tds.py
+++ b/impacket/tds.py
@@ -532,6 +532,7 @@ class MSSQL:
         sock = socket.socket(af, socktype, proto)
         
         try:
+            sock.settimeout(2)
             sock.connect(sa)
         except Exception:
             #import traceback

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant