kali-linux-docker
Esta imagen Docker de Kali Linux proporciona una instalación base mínima de la última versión de la Distribución Rolling de Kali Linux. No se añaden herramientas a esta imagen, por lo que necesitarás instalarlas tú mismo. Para más detalles sobre los metapaquetes de Kali Linux, visita https://www.kali.org/news/kali-linux-metapackages/
Docker Hub: https://hub.docker.com/r/nu11secur1ty/kali-linux-docker
Debido a que se pasa --squash al demonio de Docker, si las características experimentales no están activadas en tu demonio, el script build.sh fallará.
En Kali, esto se hace mediante /etc/docker/daemon.json con el siguiente contenido:
{
"experimental": true
}
Nota: Esto es solo un requisito para nosotros en Offensive Security para reducir el tamaño de la imagen cuando subimos una nueva imagen a Docker Hub.
Si estás construyendo para uso personal, puedes eliminar la opción --squash en build.sh
Tue May 21 13:59:06 EDT 2019
Obviamente, para poner esto en funcionamiento, necesitas instalar Docker. Para Docker en OSX puedes usar brew, mientras que para la mayoría de otras distribuciones, puedes instalarlo usando tu gestor de paquetes local. Una vez instalado y configurado, solo es cuestión de descargar nuestra imagen desde el repositorio de Docker:
nu11secur1ty:~ # docker pull nu11secur1ty/kali-linux-docker
nu11secur1ty:~ # docker run -t -i nu11secur1ty/kali-linux-docker /bin/bash
root@7e2a35940eff:/# apt update
root@7e2a35940eff:/# apt dist-update
root@7e2a35940eff:/# apt update && apt install metasploit-framework
root@7e2a35940eff:/# apt update && apt install git
root@7e2a35940eff:/# apt update && apt install vim
root@7e2a35940eff:/# service postgresql start
root@7e2a35940eff:/# ss -ant
root@7e2a35940eff:/# msfdb init
root@7e2a35940eff:/# msfconsole
git clone https://github.com/nu11secur1ty/sqliv2.git
cd sqliv2
. uso enlace:sqliv2
. Obtener:
git clone https://github.com/nu11secur1ty/nu11secur1ty.git
enlace:nu11secur1ty
Si quieres construir tus propias imágenes de Kali en lugar de usar las predefinidas, lo hemos hecho fácil con el siguiente script alojado en Kali Linux Docker en Github. Estas imágenes se construyen mejor en un sistema Linux o cualquier otro SO que pueda usar debootstrap.
#!/bin/bash
# Install dependencies (debootstrap)
sudo apt-get install debootstrap
# Fetch the latest Kali debootstrap script from git
curl "https://gitlab.com/kalilinux/packages/debootstrap.git;a=blob_plain;f=scripts/kali;hb=HEAD" > kali-debootstrap &&\
sudo debootstrap kali ./kali-root http://http.kali.org/kali ./kali-debootstrap &&\
# Import the Kali image into Docker
sudo tar -C kali-root -c . | sudo docker import - kalilinux/kali &&\
sudo rm -rf ./kali-root &&\
# Test the Kali Docker Image
docker run -t -i kalilinux/kali cat /etc/debian_version &&\
echo "Build OK" || echo "Build failed!"


Existe un comando docker exec que se puede usar para conectarse a un contenedor que ya está en ejecución.
docker exec -it <nombre del contenedor> /bin/bash para obtener un shell bash en el contenedordocker exec -it <nombre del contenedor> <comando> para ejecutar cualquier comando que especifiques en el contenedor.La forma adecuada de ejecutar un comando en un contenedor es: docker-compose run <nombre del contenedor> <comando>. Por ejemplo, para obtener un shell en tu contenedor web podrías ejecutar docker-compose run web /bin/bash
Para ejecutar una serie de comandos, debes envolverlos en un solo comando usando un shell. Por ejemplo: docker-compose run <nombre en yml> sh -c '<comando 1> && <comando 2> && <comando 3>'
En algunos casos, es posible que desees ejecutar un contenedor que no esté definido por un archivo docker-compose.yml, por ejemplo, para probar una nueva configuración de contenedor. Usa docker run para iniciar un nuevo contenedor con una imagen determinada: docker run -it <nombre de imagen> <comando>
El comando docker run acepta opciones de línea de comandos para especificar montajes de volúmenes, variables de entorno, el directorio de trabajo y más.
Obtener un shell en un contenedor de construcción para ejecutar cualquier operación es el enfoque más simple. Simplemente deseas acceder al contenedor cli que definimos en el archivo compose. El comando docker-compose -f build.yml run cli iniciará una instancia de la imagen phase2/devtools-build y ejecutará un shell bash para ti. Desde allí eres libre de usar drush, grunt o lo que tu pequeño corazón desee.
Otro concepto en el mundo Docker es iniciar un contenedor para ejecutar un solo comando y permitir que el contenedor se detenga cuando el comando se complete. Esto es excelente si ejecutas comandos con poca frecuencia, o no deseas tener otro contenedor ejecutándose constantemente. Ejecutar tus comandos en contenedores de esta manera también es adecuado para comandos que no generan archivos en el sistema de archivos o, si lo hacen, escriben esos archivos en volúmenes montados en el contenedor.
El contenedor drush definido en el archivo de ejemplo build.yml es un contenedor diseñado específicamente para ejecutar drush en un solo directorio de trabajo tomando solo los comandos como argumentos. Este enfoque nos permite proporcionar un mecanismo rápido y fácil para ejecutar cualquier comando drush, como sqlc, cache-rebuild y otros, en tu sitio Drupal de manera rápida y sencilla.
También hay otros ejemplos de un contenedor de comando grunt similar a drush y un contenedor de comando aún más específico para ejecutar un solo comando, drush make, para construir el sitio a partir de un archivo make/dependencias.
La carpeta webapp en el host se montará en la raíz de Apache del contenedor
docker system prune
docker system prune -a
Usa el comando docker images con la bandera -a para localizar el ID de las imágenes que deseas eliminar. Esto te mostrará cada imagen, incluyendo las capas intermedias. Cuando hayas localizado las imágenes que deseas eliminar, puedes pasar su ID o etiqueta a docker rmi:
docker images -a
docker rmi Image Image
Las imágenes de Docker constan de múltiples capas. Las imágenes huérfanas son capas que no tienen relación con ninguna imagen etiquetada. Ya no sirven para nada y consumen espacio en disco. Se pueden localizar agregando la bandera de filtro, -f con un valor de dangling=true al comando docker images. Cuando estés seguro de que deseas eliminarlas, puedes usar el comando docker images purge:
NOTA
If you build an image without tagging it, the image will appear on the list of dangling images because it has no association with a tagged image. You can avoid this situation by providing a tag when you build, and you can retroactively tag an images with the docker tag command.
docker images -f dangling=true
docker images purge
Puedes encontrar todas las imágenes que coincidan con un patrón usando una combinación de docker images y grep. Una vez que estés satisfecho, puedes eliminarlas usando awk para pasar los IDs a docker rmi. Ten en cuenta que estas utilidades no son proporcionadas por Docker y no están necesariamente disponibles en todos los sistemas:
docker images -a | grep "pattern"
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Todas las imágenes Docker en un sistema se pueden listar agregando -a al comando docker images. Una vez que estés seguro de que deseas eliminarlas todas, puedes agregar la bandera -q para pasar el ID de la imagen a docker rmi:
docker images -a
docker rmi $(docker images -a -q)
Si sabes al crear un contenedor que no querrás conservarlo una vez que hayas terminado, puedes ejecutar docker run --rm para eliminarlo automáticamente cuando salga.
docker run --rm image_name
Puedes localizar contenedores usando docker ps -a y filtrarlos por su estado: created, restarting, running, paused, o exited. Para revisar la lista de contenedores detenidos, usa la bandera -f para filtrar según el estado. Cuando hayas verificado que deseas eliminar esos contenedores, usa -q para pasar los IDs al comando docker rm.
docker ps -a -f status=exited
docker rm $(docker ps -a -f status=exited -q)
Los filtros de Docker se pueden combinar repitiendo la bandera de filtro con un valor adicional. Esto resulta en una lista de contenedores que cumplen cualquiera de las condiciones. Por ejemplo, si deseas eliminar todos los contenedores marcados como Created (un estado que puede resultar cuando ejecutas un contenedor con un comando no válido) o Exited, puedes usar dos filtros:
docker ps -a -f status=exited -f status=created
docker rm $(docker ps -a -f status=exited -f status=created -q)
Puedes encontrar todos los contenedores que coincidan con un patrón usando una combinación de docker ps y grep. Cuando estés satisfecho de tener la lista que deseas eliminar, puedes usar awk y xargs para proporcionar el ID a docker rmi. Ten en cuenta que estas utilidades no son proporcionadas por Docker y no están necesariamente disponibles en todos los sistemas:
docker ps -a | grep "pattern”
docker ps -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Puedes revisar los contenedores en tu sistema con docker ps. Agregar la bandera -a mostrará todos los contenedores. Cuando estés seguro de que deseas eliminarlos, puedes agregar la bandera -q para proporcionar los IDs a los comandos docker stop y docker rm:
docker ps -a
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Eliminar uno o más volúmenes específicos - Docker 1.9 y posteriores
Usa el comando docker volume ls para localizar el nombre o los nombres de los volúmenes que deseas eliminar. Luego puedes eliminar uno o más volúmenes con el comando docker volume rm:
docker volume ls
docker volume rm volume_name volume_name
Dado que el propósito de los volúmenes es existir independientemente de los contenedores, cuando se elimina un contenedor, un volumen no se elimina automáticamente al mismo tiempo. Cuando un volumen existe y ya no está conectado a ningún contenedor, se llama volumen huérfano. Para localizarlos y confirmar que deseas eliminarlos, puedes usar el comando docker volume ls con un filtro para limitar los resultados a volúmenes huérfanos. Cuando estés satisfecho con la lista, puedes eliminarlos todos con docker volume prune:
docker volume ls -f dangling=true
docker volume prune
Si creaste un volumen sin nombre, se puede eliminar al mismo tiempo que el contenedor con la bandera -v. Ten en cuenta que esto solo funciona con volúmenes sin nombre. Cuando el contenedor se elimina correctamente, se muestra su ID. Nota que no se hace referencia a la eliminación del volumen. Si no tiene nombre, se elimina silenciosamente del sistema. Si tiene nombre, permanece silenciosamente presente.
docker rm -v container_name
Esta guía cubre algunos de los comandos comunes utilizados para eliminar imágenes, contenedores y volúmenes con Docker. Hay muchas otras combinaciones y banderas que se pueden usar con cada uno. Para una guía completa de lo disponible, consulta la documentación de Docker sobre docker system prune, docker rmi, docker rm y docker volume rm. Si hay tareas de limpieza comunes que te gustaría ver en la guía, por favor pregunta o haz sugerencias en los comentarios.

