Add parse sub command to perform stealthy offline AD CS enumeration based on local registry data #247
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.
This adds a new
certipy parse
sub command which can be used to offline parse the content of the local registry certificate template cache as captured by either TrustedSec'sreq_query
BOF or a.reg
export as produced by the nativeregedit.exe
utility.It is based on The Registry Rundown research by Outflank's Cedric Van Bockhaven and Max Grim as presented at Troopers 24.
The implementation tries to minimize code duplication by implementing the existing LDAP interfaces using the data from the registry. As such modification to the generic vulnerability detection logic in
find.py
is mostly avoided.The changes have been tested against Ludus' AD CS role.
First a regular LDAP enumeration was performed with:
This was then compared to the data obtained by parsing the output of:
With a command like:
Where the published certificate templates were looked up with:
Similarly, the corresponding registry branch was exported from a client machine using the native
regedit.exe
utility and subsequently parsed with:Results were compared with the data obtained via LDAP after normalizing the JSON output with:
The only observed differences concern some template metadata fields (creation/modification date) and a few settings related to issuance policies.
@zimedev the changes should also be compatible with your certipy-merged repository.