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.
Files changed (41) hide show
  1. {dploot-2.7.2 → dploot-2.7.4}/PKG-INFO +2 -2
  2. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/masterkeys.py +8 -10
  3. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/smb.py +3 -2
  4. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/target.py +2 -2
  5. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/certificates.py +2 -1
  6. {dploot-2.7.2 → dploot-2.7.4}/pyproject.toml +2 -2
  7. {dploot-2.7.2 → dploot-2.7.4}/LICENSE +0 -0
  8. {dploot-2.7.2 → dploot-2.7.4}/README.md +0 -0
  9. {dploot-2.7.2 → dploot-2.7.4}/dploot/__init__.py +0 -0
  10. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/__init__.py +0 -0
  11. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/backupkey.py +0 -0
  12. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/browser.py +0 -0
  13. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/certificates.py +0 -0
  14. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/credentials.py +0 -0
  15. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinecertificates.py +0 -0
  16. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinecredentials.py +0 -0
  17. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinemasterkeys.py +0 -0
  18. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinetriage.py +0 -0
  19. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/machinevaults.py +0 -0
  20. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/mobaxterm.py +0 -0
  21. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/rdg.py +0 -0
  22. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/sccm.py +0 -0
  23. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/triage.py +0 -0
  24. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/vaults.py +0 -0
  25. {dploot-2.7.2 → dploot-2.7.4}/dploot/action/wifi.py +0 -0
  26. {dploot-2.7.2 → dploot-2.7.4}/dploot/entry.py +0 -0
  27. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/__init__.py +0 -0
  28. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/crypto.py +0 -0
  29. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/dpapi.py +0 -0
  30. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/utils.py +0 -0
  31. {dploot-2.7.2 → dploot-2.7.4}/dploot/lib/wmi.py +0 -0
  32. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/__init__.py +0 -0
  33. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/backupkey.py +0 -0
  34. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/browser.py +0 -0
  35. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/credentials.py +0 -0
  36. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/masterkeys.py +0 -0
  37. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/mobaxterm.py +0 -0
  38. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/rdg.py +0 -0
  39. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/sccm.py +0 -0
  40. {dploot-2.7.2 → dploot-2.7.4}/dploot/triage/vaults.py +0 -0
  41. {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.2
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,<41.0.0)
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 = passwords = nthashes = None
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
- if target.password != '':
103
- if passwords is None:
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.getServerName() if not no_ntlm else self.target.address
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 + "." + self.target.domain
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 = None,
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 None, None
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.2"
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 = "^40.0.1"
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