## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SYNACKTIV-GPOPARSER
# gpoParser
**gpoParser** β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ΅ΠΊΡΡ Π³ΡΡΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ (GPO) Π² ΡΡΠ΅Π΄Π΅ Active Directory. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠΎΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΡΡΡΠ΄ΠΎΡΠΌΠΊΠΈΠΌ, ΡΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π²ΡΡΠ²Π»ΡΡΡ ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π»Π°ΡΠ΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° leHack 2025 ΠΈ DEFCON 33.
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° `gssapi` ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ `libkrb5-dev`; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `sudo apt install libkrb5-dev` (ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ²)
root@kitploit:~
pipx install git+https://github.com/synacktiv/gpoParser
# ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
root@kitploit:~
$ gpoParser -h
usage: gpoParser [-h] {local,remote,display,query,enrich} ...
GPO Analysis Tool
positional arguments:
{local,remote,display,query,enrich}
Choose mode
local Parse GPOs locally
remote Parse GPOs via remote LDAP/SYSVOL
display Display parsed GPO contents
query Query GPO parser results in order to display affected computers
enrich Enrich BloodHound with new edges
options:
-h, --help show this help message and exit
## ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ GPO Π² ΠΎΠ½Π»Π°ΠΉΠ½- ΠΈΠ»ΠΈ ΠΎΡΠ»Π°ΠΉΠ½-ΡΠ΅ΠΆΠΈΠΌΠ΅
**ΠΠ½Π»Π°ΠΉΠ½** : ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ LDAP Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ GPO ΠΈ ΠΈΡ
Π°ΡΡΠΈΠ±ΡΡΠ°Ρ
(ΡΠ»Π°Π³ΠΈ, gPLink, gPOptions ΠΈ Π΄ΡΡΠ³ΠΈΠ΅). Π’Π°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠ΅ SYSVOL Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ GPO.
root@kitploit:~
$ gpoParser remote -h
usage: gpoParser remote [-h] [-s SERVER] [-d DOMAIN] [-u USER] [-p PASSWORD] [-H HASH] [-k] [-o OUTPUT]
options:
-h, --help show this help message and exit
-s, --server SERVER LDAP server IP or FQDN (ex: ldap://192.168.57.5 or ldaps://dc.corp.local)
-d, --domain DOMAIN Domain name tied to the user
-u, --user USER Username
-p, --password PASSWORD
Password
-H, --hash HASH NTLM authentication, format is [LM:]NT
-k, --kerberos Use Kerberos authentication
-o, --output OUTPUT Output filename and location (default ./cache_gpoParser_<timestamp>.json)
$ gpoParser remote -u bob -p password -d corp -s 192.168.57.5
Retrieving \CORP.LOCAL\Policies\{008B0634-C0B9-443A-A06A-E2BAD875E27F}\Machine/Microsoft/Windows NT/SecEdit/GptTmpl.inf
Retrieving \CORP.LOCAL\Policies\{008B0634-C0B9-443A-A06A-E2BAD875E27F}\Machine/Preferences/Groups/Groups.xml
Retrieving \CORP.LOCAL\Policies\{008B0634-C0B9-443A-A06A-E2BAD875E27F}\Machine/Preferences/Registry/Registry.xml
[...]
Information saved to cache, now use display / query features
**ΠΡΠ»Π°ΠΉΠ½** : ΡΡΠ΅Π±ΡΠ΅ΡΡΡ (ΡΠ°ΡΡΠΈΡΠ½Π°Ρ) ΠΊΠΎΠΏΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° LDAP ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΏΠΊΠΈ Policies ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΏΠΊΠΈ SYSVOL. Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° LDAP ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ:
* ldeep
* ADExplorerSnapshot β Π²ΡΡ
ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ `Objects` (NDJSON)
root@kitploit:~
$ gpoParser local -h
usage: gpoParser local [-h] [-f {ldeep,adexplorer}] [-o OUTPUT] sysvol_folder ldap_folder
positional arguments:
sysvol_folder SYSVOL folder containing the policies
ldap_folder Folder with LDAP dump in ldeep format
options:
-h, --help show this help message and exit
-f {ldeep,adexplorer}, --format {ldeep,adexplorer}
JSON files input format (default ldeep)
-o OUTPUT, --output OUTPUT
Output filename and location (default ./cache_gpoParser_<timestamp>.json)
$ mkdir sysvol && cd sysvol && echo -e 'prompt\nrecurse\nmget *' | smbclient -W CORP -U bob%password //192.168.57.5/SYSVOL
$ mkdir ldap && ldeep ldap -u bob -p password -d corp.local -s 192.168.57.5 all ldap/corp
$ gpoParser local sysvol/ ldap/
Information saved to cache, now use display / query features
## ΠΡΠΎΡΠΌΠΎΡΡ
ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ GPO, Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ
ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΠΈ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ GPO ΠΈΠ»ΠΈ GUID.
root@kitploit:~
$ gpoParser display -h
usage: gpoParser display [-h] [-g GPO] [-c CACHE]
options:
-h, --help show this help message and exit
-g GPO, --gpo GPO Filter by GPO name or GUID
-c CACHE, --cache CACHE
Cache file location (default: ./cache_gpoParser_<timestamp>.json)
$ gpoParser display
Cache file found, using it
{6F3821B3-89B2-496D-82A5-58092D3EA588}: AddAdmin
Computer configuration
Groups
The following principals are added to BUILTIN\Administrators
CORP\admin
{ADC96BD4-86D3-4516-BCF2-F7BDD5A76366}: AddRDP
Computer configuration
Groups
The following principals are added to BUILTIN\Remote Desktop Users
CORP\bob
[...]
$ gpoParser display -g work
Cache file found, using it
{474D47E2-2B77-4E37-9744-A3CF6AB04449}: Workstation admins
Computer configuration
Groups
The following principals are added to BUILTIN\Administrators
CORP\Admin - All Workstations
## ΠΠ°ΠΏΡΠΎΡ
ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ GPO ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ GPO ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌ.
root@kitploit:~
$ gpoParser query -h
usage: gpoParser query [-h] [-g GPO] [-C COMPUTER] [-c CACHE]
options:
-h, --help show this help message and exit
-g GPO, --gpo GPO Filter by GPO name or GUID
-C COMPUTER, --computer COMPUTER
Computer name or distinguishedName to filter on
-c CACHE, --cache CACHE
Cache file location (default: ./cache_gpoParser_<timestamp>.json)
$ gpoParser query
Cache file found, using it
{6F3821B3-89B2-496D-82A5-58092D3EA588}: AddAdmin
This GPO affects the following computers:
CN=SRV55,OU=PROD,OU=Servers,DC=CORP,DC=LOCAL
CN=SRV54,OU=PROD,OU=Servers,DC=CORP,DC=LOCAL
CN=SRV53,OU=PROD,OU=Servers,DC=CORP,DC=LOCAL
CN=SRV52,OU=PROD,OU=Servers,DC=CORP,DC=LOCAL
{6AC1786C-016F-11D2-945F-00C04FB984F9}: Default Domain Controllers Policy
This GPO affects the following computers:
CN=DC01,OU=Domain Controllers,DC=CORP,DC=LOCAL
{31B2F340-016D-11D2-945F-00C04FB984F9}: Default Domain Policy
This GPO affects the following computers:
CN=SRV51,OU=SUBSUB,OU=SUB,DC=CORP,DC=LOCAL
CN=SRV49,OU=SUB,DC=CORP,DC=LOCAL
CN=SRV50,OU=SUB,DC=CORP,DC=LOCAL
CN=SRV55,OU=PROD,OU=Servers,DC=CORP,DC=LOCAL
[...]
$ gpoParser query -C wks
Cache file found, using it
CN=WKS01,OU=ADMIN,OU=WORKSTATIONS,DC=CORP,DC=LOCAL
{31B2F340-016D-11D2-945F-00C04FB984F9}: Default Domain Policy
Computer configuration
Registry
The following registry key changes have been made
Action: Create
Path: MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash
Value: 4,1
The following registry key changes have been made
Action: Update
Hive: HKEY_LOCAL_MACHINE
Path: SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
Name: EnableMDNS
Value: 00000000
## ΠΠ±ΠΎΠ³Π°ΡΠ΅Π½ΠΈΠ΅ BloodHound
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ GPO Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΡΠ±Π΅Ρ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ **AdminTo** , **CanRDP** ΠΈ **CanPSRemote** , Π²ΡΡΠ²Π»ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π»Π°ΡΠ΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ BloodHound ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ. Π ΡΠ±ΡΠ° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΏΡΡΡΠΌ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
Neo4j.
root@kitploit:~
$ gpoParser enrich -h
usage: gpoParser enrich [-h] [-u USER] [-p PASSWORD] [-s SERVER] [-c CACHE]
options:
-h, --help show this help message and exit
-u USER, --user USER Username for neo4j authentication (default: neo4j)
-p PASSWORD, --password PASSWORD
Password for neo4j authentication (default: bloodhoundcommunityedition)
-s SERVER, --server SERVER
Neo4j server URI (default: bolt://localhost:7687)
-c CACHE, --cache CACHE
Cache file location (default: ./cache_gpoParser_<timestamp>.json)
## ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
ΠΡΠ»Π°ΠΉΠ½-ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠ°ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ/ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ², ΡΠΈΠ»ΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, WMI-ΡΠΈΠ»ΡΡΡΡ ΠΈ ΡΠ°ΡΠ³Π΅ΡΠΈΠ½Π³ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (BloodHound, PowerView, GPOHound). **gpoParser** Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ±ΠΎΡΡΠΈΠΊΠΈ Π΄Π°Π½Π½ΡΡ
.