dploot 2.7.2__tar.gz → 2.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dploot-2.7.2 → dploot-2.7.4}/PKG-INFO +2 -2
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/masterkeys.py +8 -10
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/smb.py +3 -2
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/target.py +2 -2
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/certificates.py +2 -1
- {dploot-2.7.2 → dploot-2.7.4}/pyproject.toml +2 -2
- {dploot-2.7.2 → dploot-2.7.4}/LICENSE +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/README.md +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/__init__.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/__init__.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/backupkey.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/browser.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/certificates.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/credentials.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinecertificates.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinecredentials.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinemasterkeys.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinetriage.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinevaults.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/mobaxterm.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/rdg.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/sccm.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/triage.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/vaults.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/action/wifi.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/entry.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/__init__.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/crypto.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/dpapi.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/utils.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/wmi.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/__init__.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/backupkey.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/browser.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/credentials.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/masterkeys.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/mobaxterm.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/rdg.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/sccm.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/vaults.py +0 -0
- {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/wifi.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dploot
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.4
|
|
4
4
|
Summary: DPAPI looting remotely in Python
|
|
5
5
|
Home-page: https://github.com/zblurx/dploot
|
|
6
6
|
License: MIT
|
|
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.9
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
19
|
Classifier: Topic :: Security
|
|
20
|
-
Requires-Dist: cryptography (>=40.0.1
|
|
20
|
+
Requires-Dist: cryptography (>=40.0.1)
|
|
21
21
|
Requires-Dist: impacket (>=0.10.0)
|
|
22
22
|
Requires-Dist: lxml (==4.9.3)
|
|
23
23
|
Requires-Dist: pyasn1 (>=0.4.8,<0.5.0)
|
|
@@ -77,7 +77,9 @@ def entry(options: argparse.Namespace) -> None:
|
|
|
77
77
|
a.run()
|
|
78
78
|
|
|
79
79
|
def parse_masterkeys_options(options: argparse.Namespace, target: Target) -> Tuple[bytes,Dict[str,str],Dict[str,str]]:
|
|
80
|
-
pvkbytes =
|
|
80
|
+
pvkbytes = None
|
|
81
|
+
passwords = {}
|
|
82
|
+
nthashes = {}
|
|
81
83
|
if hasattr(options,'pvk') and options.pvk is not None:
|
|
82
84
|
try:
|
|
83
85
|
pvkbytes = open(options.pvk, 'rb').read()
|
|
@@ -98,16 +100,12 @@ def parse_masterkeys_options(options: argparse.Namespace, target: Target) -> Tup
|
|
|
98
100
|
except Exception as e:
|
|
99
101
|
logging.error(str(e))
|
|
100
102
|
sys.exit(1)
|
|
103
|
+
if target.username:
|
|
104
|
+
if target.password != '':
|
|
105
|
+
passwords[target.username] = target.password
|
|
101
106
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
passwords = dict()
|
|
105
|
-
passwords[target.username] = target.password
|
|
106
|
-
|
|
107
|
-
if target.nthash != '':
|
|
108
|
-
if nthashes is None:
|
|
109
|
-
nthashes = dict()
|
|
110
|
-
nthashes[target.username] = target.nthash.lower()
|
|
107
|
+
if target.nthash != '':
|
|
108
|
+
nthashes[target.username] = target.nthash.lower()
|
|
111
109
|
|
|
112
110
|
if nthashes is not None:
|
|
113
111
|
nthashes = {k.lower():v.lower() for k, v in nthashes.items()}
|
|
@@ -71,9 +71,9 @@ class DPLootSMBConnection:
|
|
|
71
71
|
if "STATUS_NOT_SUPPORTED" in str(e):
|
|
72
72
|
no_ntlm = True
|
|
73
73
|
pass
|
|
74
|
-
hostname = self.smb_session.
|
|
74
|
+
hostname = self.smb_session.getServerDNSHostName() if not no_ntlm else self.target.address
|
|
75
75
|
self.smb_session.close()
|
|
76
|
-
self.target.address = hostname
|
|
76
|
+
self.target.address = hostname
|
|
77
77
|
logging.debug("Connecting to %s" % self.target.address)
|
|
78
78
|
if not self.create_conn_obj(self.target.address):
|
|
79
79
|
return None
|
|
@@ -88,6 +88,7 @@ class DPLootSMBConnection:
|
|
|
88
88
|
kdcHost=self.target.kdcHost,
|
|
89
89
|
useCache=self.target.use_kcache,
|
|
90
90
|
)
|
|
91
|
+
self.target.username = self.smb_session.getCredentials()[0]
|
|
91
92
|
else:
|
|
92
93
|
logging.debug("Connecting to %s" % self.target.address)
|
|
93
94
|
if not self.create_conn_obj():
|
|
@@ -53,7 +53,7 @@ class Target:
|
|
|
53
53
|
options.dc_ip = options.target
|
|
54
54
|
|
|
55
55
|
self.domain = domain
|
|
56
|
-
self.username = username
|
|
56
|
+
self.username = username if username is not None else ""
|
|
57
57
|
self.password = password
|
|
58
58
|
self.address = options.target
|
|
59
59
|
self.lmhash = lmhash
|
|
@@ -68,7 +68,7 @@ class Target:
|
|
|
68
68
|
|
|
69
69
|
@staticmethod
|
|
70
70
|
def create(domain: str = None,
|
|
71
|
-
username: str =
|
|
71
|
+
username: str = "",
|
|
72
72
|
password: str = None,
|
|
73
73
|
target: str = None,
|
|
74
74
|
hashes: str = None,
|
|
@@ -210,6 +210,7 @@ class CertificatesTriage:
|
|
|
210
210
|
logging.debug("Found match between %s certificate and %s private key !" % (name, pkey[0]))
|
|
211
211
|
key = load_der_private_key(pkey[1].export_key('DER'), password=None)
|
|
212
212
|
pfx = self.create_pfx(key=key,cert=cert)
|
|
213
|
+
# TODO CAN BE NULL self.get_id_from_certificate(certificate=cert)[1]
|
|
213
214
|
username = self.get_id_from_certificate(certificate=cert)[1].replace('@','_')
|
|
214
215
|
clientauth = False
|
|
215
216
|
for i in cert.extensions.get_extension_for_oid(oid=ExtensionOID.EXTENDED_KEY_USAGE).value:
|
|
@@ -255,7 +256,7 @@ class CertificatesTriage:
|
|
|
255
256
|
except Exception:
|
|
256
257
|
pass
|
|
257
258
|
|
|
258
|
-
return
|
|
259
|
+
return "", "SAN not found"
|
|
259
260
|
|
|
260
261
|
@property
|
|
261
262
|
def users(self) -> List[str]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "dploot"
|
|
3
|
-
version = "2.7.
|
|
3
|
+
version = "2.7.4"
|
|
4
4
|
description = "DPAPI looting remotely in Python"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
homepage = "https://github.com/zblurx/dploot"
|
|
@@ -27,7 +27,7 @@ dploot = "dploot.entry:main"
|
|
|
27
27
|
[tool.poetry.dependencies]
|
|
28
28
|
python = "^3.7"
|
|
29
29
|
impacket = ">=0.10.0"
|
|
30
|
-
cryptography = "
|
|
30
|
+
cryptography = ">=40.0.1"
|
|
31
31
|
pyasn1 = "^0.4.8"
|
|
32
32
|
lxml = "4.9.3"
|
|
33
33
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|