dissect.cobaltstrike 1.2.1.dev8__tar.gz → 1.2.1.dev9__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.
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/PKG-INFO +1 -1
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/_version.py +2 -2
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/beacon.py +1 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c2profile.lark +5 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c2profile.py +10 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_c2profile.py +22 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.github/workflows/dissect-ci.yml +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.gitignore +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.lfs-assets-id +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.pre-commit-config.yaml +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.readthedocs.yml +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/LICENSE +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/README.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/codecov.yml +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/__init__.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/artifact.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c2.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c_c2.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/client.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/pcap.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/pe.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/utils.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/version.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/xordecode.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/Makefile +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/c2profile-grammar.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/codespell-ignore-words.txt +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/conf.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/examples.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/beacon-client.png +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/teamserver-echoclient.png +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/teamserver_ls.png +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/vt-cobaltstrike-43-zip.png +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/index.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/installation.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/license.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/scripts/checksum8-accesslogs.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/scripts/dump_beacon_keys.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/scripts/example_client.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/scripts/index.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/c2_def.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/cs_def.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/index.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/pe_def.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-artifact.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-client.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-dump.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-pcap.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-xordecode.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/c2profile-dump.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tutorials/decrypt_cobaltstrike_pcaps.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tutorials/index.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tutorials/minimal_beacon_client.rst +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/pyproject.toml +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/checksum8-accesslogs.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/dump_beacon_keys.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/example_client.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/conftest.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_beacon.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_c2.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_client.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_pe.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_utils.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_version.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tests/test_xordecode.py +0 -0
- {dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: dissect.cobaltstrike
|
|
3
|
-
Version: 1.2.1.
|
|
3
|
+
Version: 1.2.1.dev9
|
|
4
4
|
Summary: a Python library for dissecting Cobalt Strike related data
|
|
5
5
|
Project-URL: Homepage, https://github.com/fox-it/dissect.cobaltstrike
|
|
6
6
|
Project-URL: Documentation, https://dissect-cobaltstrike.readthedocs.io/
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/_version.py
RENAMED
|
@@ -12,5 +12,5 @@ __version__: str
|
|
|
12
12
|
__version_tuple__: VERSION_TUPLE
|
|
13
13
|
version_tuple: VERSION_TUPLE
|
|
14
14
|
|
|
15
|
-
__version__ = version = '1.2.1.
|
|
16
|
-
__version_tuple__ = version_tuple = (1, 2, 1, '
|
|
15
|
+
__version__ = version = '1.2.1.dev9'
|
|
16
|
+
__version_tuple__ = version_tuple = (1, 2, 1, 'dev9')
|
|
@@ -11,6 +11,7 @@ start: value*
|
|
|
11
11
|
| "process-inject" "{" process_inject_options* "}" -> process_inject
|
|
12
12
|
| "post-ex" "{" postex_options* "}" -> post_ex
|
|
13
13
|
| "dns-beacon" "{" dns_beacon_options* "}" -> dns_beacon
|
|
14
|
+
| "http-beacon" "{" http_beacon_options* "}" -> http_beacon
|
|
14
15
|
|
|
15
16
|
OPTION: "sample_name"
|
|
16
17
|
| "data_jitter"
|
|
@@ -214,6 +215,10 @@ dns_beacon_options: "set" "dns_idle" string ";" -> dns_idle
|
|
|
214
215
|
| "set" "ns_response" string ";" -> ns_response
|
|
215
216
|
| "#" "dns_resolver" string ";" -> comment_dns_resolver
|
|
216
217
|
|
|
218
|
+
http_beacon_options: "set" "library" string ";" -> library // introduced in Cobalt Strike 4.9
|
|
219
|
+
| "set" "data_required" string ";" -> data_required // introduced in Cobalt Strike 4.10
|
|
220
|
+
| "set" "data_required_length" string ";" -> data_required_length // introduced in Cobalt Strike 4.10
|
|
221
|
+
|
|
217
222
|
header: string
|
|
218
223
|
string: STRING
|
|
219
224
|
variant: string
|
|
@@ -309,6 +309,12 @@ class DnsBeaconBlock(ConfigBlock):
|
|
|
309
309
|
__name__ = "dns_beacon"
|
|
310
310
|
|
|
311
311
|
|
|
312
|
+
class HttpBeaconBlock(ConfigBlock):
|
|
313
|
+
"""`.http-beacon` block"""
|
|
314
|
+
|
|
315
|
+
__name__ = "http_beacon"
|
|
316
|
+
|
|
317
|
+
|
|
312
318
|
class ExecuteOptionsBlock(ConfigBlock):
|
|
313
319
|
"""`.process-inject.execute` block"""
|
|
314
320
|
|
|
@@ -446,6 +452,7 @@ class C2Profile(ConfigBlock):
|
|
|
446
452
|
http_post_client = HttpOptionsBlock()
|
|
447
453
|
proc_inj = ProcessInjectBlock()
|
|
448
454
|
dns_beacon = DnsBeaconBlock()
|
|
455
|
+
http_beacon = HttpBeaconBlock()
|
|
449
456
|
# http_get_server = HttpOptionsBlock()
|
|
450
457
|
|
|
451
458
|
for setting, value in config.settings_by_index.items():
|
|
@@ -668,6 +675,8 @@ class C2Profile(ConfigBlock):
|
|
|
668
675
|
proc_inj.set_option("bof_allocator", value)
|
|
669
676
|
elif setting == BeaconSetting.SETTING_DATA_STORE_SIZE:
|
|
670
677
|
stage.set_option("data_store_size", value)
|
|
678
|
+
elif setting == BeaconSetting.SETTING_HTTP_DATA_REQUIRED and value:
|
|
679
|
+
http_beacon.set_option("data_required", "true")
|
|
671
680
|
elif setting == BeaconSetting.SETTING_BEACON_GATE and value:
|
|
672
681
|
block = BeaconGateBlock.from_beacon_gate_option_strings(value)
|
|
673
682
|
stage.set_config_block("beacon_gate", block)
|
|
@@ -681,6 +690,7 @@ class C2Profile(ConfigBlock):
|
|
|
681
690
|
profile.set_non_empty_config_block("stage", stage)
|
|
682
691
|
profile.set_non_empty_config_block("process_inject", proc_inj)
|
|
683
692
|
profile.set_non_empty_config_block("dns_beacon", dns_beacon)
|
|
693
|
+
profile.set_non_empty_config_block("http_beacon", http_beacon)
|
|
684
694
|
return profile
|
|
685
695
|
|
|
686
696
|
def __str__(self) -> str:
|
|
@@ -395,3 +395,25 @@ def test_c2profile_beacon_gate():
|
|
|
395
395
|
bconfig = beacon.BeaconConfig(data)
|
|
396
396
|
profile = c2profile.C2Profile.from_beacon_config(bconfig)
|
|
397
397
|
assert "stage.beacon_gate" not in profile.properties
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
@pytest.mark.parametrize(
|
|
401
|
+
("http_data_required",),
|
|
402
|
+
[
|
|
403
|
+
(True,),
|
|
404
|
+
(False,),
|
|
405
|
+
],
|
|
406
|
+
)
|
|
407
|
+
def test_c2profile_http_data_required(http_data_required: bool):
|
|
408
|
+
data = beacon.Setting(
|
|
409
|
+
index=beacon.BeaconSetting.SETTING_HTTP_DATA_REQUIRED,
|
|
410
|
+
type=beacon.SettingsType.TYPE_SHORT,
|
|
411
|
+
length=0x2,
|
|
412
|
+
value=beacon.cs_struct.uint16(http_data_required).dumps(),
|
|
413
|
+
).dumps()
|
|
414
|
+
bconfig = beacon.BeaconConfig(data)
|
|
415
|
+
profile = c2profile.C2Profile.from_beacon_config(bconfig)
|
|
416
|
+
if not http_data_required:
|
|
417
|
+
assert "http-beacon.data_required" not in profile.properties
|
|
418
|
+
else:
|
|
419
|
+
assert profile.properties["http-beacon.data_required"] == ["true"]
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/.github/workflows/dissect-ci.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/__init__.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/artifact.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c2.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/c_c2.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/client.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/pcap.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/pe.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/utils.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/dissect/cobaltstrike/version.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/c2profile-grammar.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/codespell-ignore-words.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/beacon-client.png
RENAMED
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/images/teamserver_ls.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/scripts/example_client.rst
RENAMED
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/c2_def.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/cs_def.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/index.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/structures/pe_def.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-artifact.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-client.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-dump.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-pcap.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/beacon-xordecode.rst
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tools/c2profile-dump.rst
RENAMED
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/docs/tutorials/index.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/checksum8-accesslogs.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/dump_beacon_keys.py
RENAMED
|
File without changes
|
{dissect_cobaltstrike-1.2.1.dev8 → dissect_cobaltstrike-1.2.1.dev9}/scripts/example_client.py
RENAMED
|
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
|