Add mssql_syscredentials module#1305
Open
Dfte wants to merge 2 commits into
Open
Conversation
Dfte
requested review from
Marshall-Hallenbeck,
NeffIsBack,
mpgn and
zblurx
as code owners
July 7, 2026 12:44
Collaborator
|
Thanks for the PR! |
Member
|
Yep definitely looks pretty cool! Ima have to read into that stuff! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Multiple MSSQL functionnalities rely on syscredentials which are identities (username and passwords) stored in a encrypted way, inside specific MSSQL databases. These identities are used for example, both for linked servers usage, agent jobs or proxy accounts.
These credentials are stored in two places:
Both these databases cannot be queried unless relying on a DAC (Dedicated Admin Connection) access which, by default, can only be used locally (hence the need of eploying a PowerShell script).
These credentials are ciphered, so it's possible for us to retrieve the credentials allowing for lateral movement, privesc and so on:
All of that is described in two blogpostsfrom:
Antti Rantasaari: https://www.netspi.com/blog/technical-blog/adversary-simulation/decrypting-mssql-credential-passwords/
Scott Sutherland: https://www.netspi.com/blog/technical-blog/network-pentesting/hijacking-sql-server-credentials-with-agent-jobs-for-domain-privilege-escalation/
And the following PowerShell scripts made by the same persons:
https://github.com/NetSPI/Powershell-Modules
Type of change
Insert an "x" inside the brackets for relevant items (do not delete options)
Setup guide for the review
A simple MSSQL database is required. Linked servers logins can be created using the following SQL queries:
EXEC sp_addlinkedserver @server = N'DC22', @srvproduct = N'', @provider = N'SQLNCLI', @datasrc = N'192.168.1.70'; EXEC sp_addlinkedsrvlogin @rmtsrvname = N'DC22', @useself = N'false', @locallogin = N'WHITEFLAG\Administrator', @rmtuser = N'WHITEFLAG\Administrator', @rmtpassword = N'DasPasswort@WF';As for proxy account, jobs etc relying on syscredentials, the following query can populate the appropriate DB:
CREATE CREDENTIAL [WHITEFLAG] WITH IDENTITY = 'WHITEFLAG\test', SECRET = N'DasPasswort@WF'; GOFor SMTP sender accounts, use the following:
Screenshots (if appropriate):
Sucessful retrieval of credentials:
Checklist:
Insert an "x" inside the brackets for completed and relevant items (do not delete options)
poetry run ruff check ., use--fixto automatically fix what it can)tests/e2e_commands.txtfile if necessary (new modules or features are required to be added to the e2e tests)Important
This module will have to be adapted once #1268 is merged because of the MSSQLEXEC class not having the get_file/put_file functions anymore.