nemesis545's blog

nov 18, 2022

Como montar un kali como un contenedor

En este pequeño articulo demostraremos como montar un simple contenedor de kali para poder tener una base rapida de herramientas para practicar actividades de pentest o redteam.

Nota: se recomienda usar podman, pero tambien incluyo instrucciones para docker.

Requisitos:

  • Podman o Docker instalados.
  • podman-compose o docker-compose instalados.
  • imagen contenedor kali descargada.

Instalación Podman y/o Docker

Asumiendo que usaremos distribución de linux basada en debian usaremos el administrador de paquetes para instalar.

$ sudo apt update && sudo apt install podman podman-compose
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Descarga de imagen de contenedor kali

Docker:

$ sudo docker pull kalilinux/kali-rolling

Podman:

$ podman pull docker.io/kalilinux/kali-rolling

Configuración del entorno

Es necesario crear la carpeta de nuestro entorno de trabajo, con el fin de almacenar el home de nuestro usuario de contenedor y las configuraciones que queramos tener en nuestro contenedor:

kali_home
|
|-- root/ #folder home
|
|-- Dockerfile # configuracion de construcción de nueva imagen local
|
|-- docker-compose.yml # configuracion de lanzamiento "orquestación" de nuestro contenedor
$ mkdir kali_home/root -p
$ cd kali_home
$ touch Dockerfile && touch docker-compose.yml

el siguiente es un ejemplo del contenido de los archivos (importante, reemplazar el hash por el que corresponda a la contraseña deseada y por favor personalizar según las necesidades que tengan). Dockerfile

FROM kali-rolling
RUN apt update && apt dist-upgrade -y --yes
RUN apt install sudo bash-completion ssh kali-linux-headless -qq -y --yes
RUN useradd -rm -d /home/kali -s /bin/bash -g root -G sudo kali -p '$6$n.B0T07TzRyTGZw6$raoeh9lX/Q.yYeZyd/dkn.ay699yLG47gcCLWU8qnjXTc8jhCXjd9VqvrX5XBpcCZnhEJvJ3OUTiqyUtqL4/M.'
RUN groupadd kali
RUN usermod -a -G kali kali
EXPOSE 22

docker-compose.yml

version: "3.9"

services:
  kali:
    build: .
    restart: unless-stopped
    command: bash -c "service ssh start && tail -f /var/log/alternatives.log"
    cap_add:
      - NET_RAW
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0

    volumes:
      - ./root:/home/kali
    ports:
      - "22:22"
    networks:
      - pentnet

networks:
  pentnet:
    driver: bridge
    enable_ipv6: true
    ipam:
      config:
        - subnet: 172.18.1.0/24
          gateway: 172.18.1.1

Para arrancar el contenedor primero se necesita construir la imagen local:

$ sudo docker-compose build 
$ podman-compose build

luego de construirlo podremos iniciar por primera vez con "up -d" o si ya están con el contenedor creado "start"

$ sudo docker-compose up -d 
$ podman-compose up -d 
para volver a levantar luego de apagar o reinciar despues de un "up -d"
$ sudo docker-compose start
$ podman-compose start

Resultado

Tendremos desplegado un contenedor con servicio ssh listo para conectarnos y empezar trabajar.

PODMAN:

$ podman-compose ps
['podman', '--version', '']
using podman version: 4.3.0-dev
podman ps -a --filter label=io.podman.compose.project=kali_home
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS            PORTS                  NAMES
085ea307cf92  localhost/kali_home_kali:latest  bash -c service s...  39 seconds ago  Up 3 seconds ago  0.0.0.0:22->22/tcp  kali_home_kali_1
exit code: 0

DOCKER:

$ docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
kali_home-kali-1    "bash -c 'service ss…"   kali                running             0.0.0.0:22->22/tcp, :::22-22/tcp

Gracias!!!