Canales de Comunicación - parte 1 HTTP no cifrado

Los canales de comunicación tienen sus componentes claves dentro de

Ejercicio

Cambiar al branch que posee los métodos no implementados

$ git checkout unencrypted-http

Creación de listener con los flags necesarias para realizar la conexión con el agente

$ curl localhost:5000/listeners/ -d '{"type": "unenc-http", "bind_host": "127.0.0.1", "bind_port": 8080, "target_host": "127.0.0.1", "target_port": 8080, "sym_key": "c29tZSByYW5kb20ga2V5IQ=="}' -H'Content-Type: application/json'

Recolectar el tráfico necesario para analizar la conexión entre el agente y el listener

$ sudo tcpdump -A -s 0 'tcp port 8080 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -i lo

Agente pre compilado

$ ./agent/agent

Librerías a implementar

Listener

./malon_lp/malonlp/listener/listener/unenc_listener.py

class UnencryptedHttpListener(Listener):
    def __init__(self, api_url: str, host: str, port: int):
        handler = ApiHandler(api_url)
        handler = DummyAuthHandler(handler)

        self._handler = handler
        self._host = host
        self._port = port
    
    @classmethod
    def new(cls, api_url: str, host: str, port: int, _sym_key: bytes) -> 'Listener':
        return cls(api_url, host, port)
    
    @classmethod
    def type_name(cls) -> str:
        pass
    
    def run(self):
        pass

Handler

Clase base de manejo de mensajes autenticados por un

./malon_lp/malonlp/listener/handler/dummy_auth.py

class DummyAuthHandler(Handler):
    def __init__(self, handler: AuthHandler):
        self._handler = handler

    def handle_msg(self, msg: bytes, client_id: Optional[str] = None) -> bytes:
        pass

Librerías a utilizar

Flask

Flask es un framework minimalista escrito en Python que permite crear aplicaciones web rápidamente y con un mínimo número de líneas de código.

Usaremos este micro framework para poder exponer los recursos de nuestra Command & Control y poder definir la lógica que es implementada en cada uno de ellos

from flask import Flask

app = Flask(__name__)
from models import Listener

@app.route("/lister", mehtods=["POST"])
def hello_world():
    list =Lister.get(type=request.json()['type'])
    list.setConfig(reqpuest.jsont()['config']
    list.run()
    return "success"

Última actualización