blob: 2ff9e4b56bbd2becf4db9be2445cdcb1441e07d7 [file]
import pytest
from base64 import b64encode
from app.utility.base_service import BaseService
from app.objects.c_agent import Agent
from app.objects.secondclass.c_link import Link
from app.objects.c_ability import AbilitySchema
from app.objects.secondclass.c_executor import ExecutorSchema
from app.obfuscators.base64_basic import Obfuscation
@pytest.fixture
def b64basic_obfuscator():
def _generate_obfuscator(obfuscator_agent):
return Obfuscation(obfuscator_agent)
return _generate_obfuscator
@pytest.fixture
def test_windows_agent(event_loop):
agent = Agent(paw='123', sleep_min=2, sleep_max=8, watchdog=0, executors=['psh'], platform='windows')
event_loop.run_until_complete(BaseService.get_service('data_svc').store(agent))
return agent
@pytest.fixture
def test_windows_executor(test_windows_agent):
return ExecutorSchema().load(dict(timeout=60, platform=test_windows_agent.platform, name='psh', command='ls'))
@pytest.fixture
def test_windows_ability(test_windows_executor, event_loop):
ability = AbilitySchema().load(dict(ability_id='123',
tactic='discovery',
technique_id='auto-generated',
technique_name='auto-generated',
name='Manual Command',
description='test windows ability',
executors=[ExecutorSchema().dump(test_windows_executor)]))
event_loop.run_until_complete(BaseService.get_service('data_svc').store(ability))
return ability
@pytest.fixture
def finished_windows_link(test_windows_executor, test_windows_agent, test_windows_ability):
return {
'command': str(b64encode(test_windows_executor.command.encode()), 'utf-8'),
'paw': test_windows_agent.paw,
'ability': test_windows_ability,
'executor': test_windows_executor,
'host': test_windows_agent.host,
'deadman': False,
'used': [],
'id': '789',
'relationships': [],
'status': 0,
'output': 'test_dir'
}
class TestBase64BasicObfuscator:
def test_b64basic_obfuscator(self, b64basic_obfuscator, test_agent, test_windows_agent, finished_link, finished_windows_link):
# sh
linux_obfuscator = b64basic_obfuscator(test_agent)
sh_link = Link.load(finished_link)
expected_encoded = 'eval "$(echo bHM= | base64 --decode)"'
decoded = linux_obfuscator.run(sh_link)
assert decoded == expected_encoded
# psh
windows_obfuscator = b64basic_obfuscator(test_windows_agent)
psh_link = Link.load(finished_windows_link)
expected_encoded = 'powershell -Enc bABzAA=='
decoded = windows_obfuscator.run(psh_link)
assert decoded == expected_encoded