BurpCollaborator Server Privado

Instalaci贸n

Para la instalaci贸n de un servidor burp collaborator privado requerimos de comprar un dominio.

Luego de comprar el dominio empezaremos por instalar cerbot.

apt-get install certbot

Nota: Para toda esta configuraci贸n recomiendo usar el usuario root.

Ahora, ejecutaremos certbot para la creacion de los certificados SSL.

certbot certonly --manual --preferred-challenges=dns -d "*.collaborator-domain" -d "collaborator-domain"

Cuando ejecutemos esto, certbot nos solicitara crear dos registros _acme-challenge de tipo TXT con unos valores espec铆ficos, para ello recomiendo usar el servicio DNS de su proveedor de dominio de esta manera sera mucho mas sencillo configurar estos registros TXT.

Luego de ello trataremos los certificados con los siguientes comandos.

openssl pkcs8 -topk8 -inform PEM -outform PEM -in /etc/letsencrypt/live/collaborator-domain/privkey.pem -out /root/burp/keys/wildcard_.collaborator-domain.pkcs8 -nocrypt
cp /etc/letsencrypt/live/collaborator-domain/fullchain.pem /root/burp/keys/wildcard_.collaborator-domain.crt
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/ { if (++n > 1) print }' /etc/letsencrypt/live/collaborator-domain/fullchain.pem > /root/burp/keys/intermediate.crt

Ahora ingresamos a la ruta /root/burp/ y creamos el archivo de configuracion del burpsuite myconfig.config.

{
    "serverDomain": "collaborator-domain",
    "workerThreads": 10,
    "interactionLimits": {
        "http": 8192,
        "smtp": 8192
    },
    "eventCapture": {
        "localAddress": ["IP-LOCAL"],
        "publicAddress": ["IP-PUBLICA"],
        "http": {
            "ports": 80
        },
        "https": {
            "ports": 443
        },
        "smtp": {
            "ports": [25, 587]
        },
        "smtps": {
            "ports": 465
        },
        "ssl": {
            "certificateFiles" : [
            "/root/burp/keys/wildcard_.collaborator-domain.key.pkcs8",
            "/root/burp/keys/wildcard_.collaborator-domain.crt",
            "/root/burp/keys/intermediate.crt" ]
        }
    },
    "metrics": {
        "path": "xxxxxxxxx",
        "addressWhitelist": ["0.0.0.0/0"]
    },
    "dns": {
        "interfaces": [{
                "name": "ns1.collaborator-domain",
                "localAddress": "IP-LOCAL",
                "publicAddress": "IP-PUBLICA"
            }],
        "ports": 53
    },
    "logLevel": "INFO",
    "customDnsRecords" : [
        {
            "label" : "_acme-challenge",
            "type" : "TXT",
            "record" : "VALOR",
            "ttl" : 60
        },
        {
            "label" : "_acme-challenge",
            "type" : "TXT",
            "record" : "VALOR",
            "ttl" : 60
        }
    ]
}

Asi mismo, en este momento es recomendable configurar el servidor DNS en nuestro proveedor de dominio, este sera de la siguiente manera, agregaremos 2 servidores dns de la forma.

ns1.collaborator-domain    IP-PUBLICA
ns2.collaborator-domain    IP-PUBLICA

Ya que el tiempo para actualizar el cambio de servidor DNS del proveedor de dominio a uno privado es entre 5 minutos a 24 horas. Puede que esto tome entre 1 a 2 horas en promedio, a veces menos a veces mas.

Tambi茅n necesitamos tener instalado el java, si no lo tenemos lo instalamos con el comando

apt install openjdk-17-jdk

Descargamos el burpsuitepro para realizar la configuracion del burpcollaborator.

Asi mismo creamos el servicio burp con el siguiente comando

nano /etc/systemd/system/burp.service
[Unit]
Description=Burp Collaborator
After=network.target

[Service]
ExecStart=/usr/bin/java -Xms50m -Xmx300m -XX:GCTimeRatio=19 -jar burpsuite_pro.jar --collaborator-server --collaborator-config=myconfig.config
Restart=always
User=root
Group=root
Environment=PATH=/usr/bin:/bin:/usr/local/bin
WorkingDirectory=/root/burp

[Install]
WantedBy=multi-user.target

Reiniciamos los servicios y cargamos el servicio burp.

systemctl daemon-reload
systemctl enable burp.service
systemctl start burp.service

Asi mismo, tambien habilitamos los puertos desde las iptables.

iptables -I INPUT 5 -p udp --dport 53 -m state --state NEW -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -m state --state NEW -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 25 -m state --state NEW -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 587 -m state --state NEW -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 465 -m state --state NEW -j ACCEPT

Ahora si accedemos al dominio deberiamos ver una pagina como la siguiente.

De esta manera deberiamos poder cargar el burpsuite collaborator desde la configuracion de nuestro cliente de burpsuite.

Luego con el Run health check podemos validar que todo funciona correctamente.

Nota: Si los servicios no se exponen a internet es posible que tengas que configurar tus reglas de NAT de tu proveedor, o las politicas de red del servicio cloud.

Polling Location

Con el Polling Location, podemos configurar un puerto especifico para obtener los resultados de burpcollaborator de manera independiente, con la siguiente configuraci贸n.

"polling": {
    "localAddress": "127.0.0.1",
    "publicAddress": "10.20.0.159",
    "http": {
        "port": 9090
    },
    "https": {
        "port": 9443
    },
    "ssl": {
        "certificateFiles": [
        "keys/burpcollaborator.example.com.key.pkcs8",
        "keys/burpcollaborator.example.com.crt",
        "keys/intermediate.crt" ]
    }
},

Debemos poner en ssl, la misma configuraci贸n de certificados realizados en la instalaci贸n de burpcollaborator anterior. As铆 mismo, podemos especificar en localAddress y publicAddress.

Nota: No es estrictamente obligatorio insertar una publicAddress, podemos eliminar esta linea para manejar directamente el polling de manera local.

Luego, podemos realizar las pruebas de Run health ckeck para que nos devuelva la ejecuci贸n correcta.

Nota: No olvidar crear la regla de iptables para que permita las conexiones de entrada, as铆 como como tambi茅n en caso de manejarse en cloud configurar las pol铆ticas de seguridad para los puertos 9090 y 9443.

Configuraci贸n privada de Polling Location

Ya que tenemos un servidor privado de burpcollaborator, nos topamos con un problema y es que cualquiera que tenga nuestro dominio tiene acceso a usar este servicio. Si configuramos un puerto para el polling esto pareciera una proteccion pero no lo es, ya que un simple escaneo podr铆a revelar el puerto de polling y de esa manera tener acceso completo al collaborator.

Puede que existan muchas opciones para solucionar esto, pero en este caso explicare la que a mi me funciono.

Empezaremos por configurar el polling en el archivo de configuraci贸n de burpsuite, para esto desactivaremos la ip publica, y solo lo manejaremos con localhost.

"polling": {
    "localAddress": "127.0.0.1",
    "http": {
        "port": 9090
    },
    "https": {
        "port": 9443
    },
    "ssl": {
        "certificateFiles": [
        "keys/burpcollaborator.example.com.key.pkcs8",
        "keys/burpcollaborator.example.com.crt",
        "keys/intermediate.crt" ]
    }
},

Como el cliente de burpsuite requiere acceder al servicio de polling que se encuentra en nuestro servidor, lo que haremos sera traernos el puerto 9443 a nuestra computadora con el cliente de burpsuite esto se hara mediante un local port forwarding.

ssh user@ip -L 9443:127.0.0.1:9443

Luego de ello, ya que tenemos nuestro dominio del collaborator server, editaremos nuestro archivo hosts (ya sea en linux o windows) con la siguiente fila.

127.0.0.1    poll.collaborator-domain

Esto es posible ya que nuestro certificado SSL creado funciona para el dominio principal y todos sus subdominios.

Ahora, podemos validar que el local port forwarding funciona al acceder a nuestra ruta de metricas, para ello recordemos que en una parte de la configuraci贸n de burpsuite tenemos el siguiente texto.

"metrics": {
    "path": "xxxxxxxxx",
    "addressWhitelist": ["0.0.0.0"]
},

Entonces podemos acceder a las metricas con la siguiente url.

https://poll.collaborator-domain:9443/xxxxxxxxx/metrics

Ahora por ultimo, configuramos en burpsuite con la direccion del servicio de polling.

Validamos con el health que todo esta funcionando perfectamente.

Nota: Si piensas traerte el puerto 9090 que es el polling en HTTP (sin SSL) por algun problema que puedas tener con los certificados SSL, debes activar la opcion Poll over unencrypted HTTP.

Last updated