Archiv der Kategorie: Virtualisierung

Inter Container Communication

Problem

Running services in container enrironments often leads to the need enabling access from one conteiner to another. This is quiet easy, if we are runnung all containers in the same docker net. If the containers running in different networks, we have to access the other container by connecting the exposed port on the host.
Since we are running in a container localhost is refering to the container itself. In the first it seems simple to connect to IP or hostname of the host in its LAN, but this is not very flexible. If the host gets another IP oder the container moves to another system, the config allways has to be adopted.

Possible Solution

While instancing the container, we create an entry in the docker internal address solution to refere to the host.

docker run -d \
  --restart: always \
  --add-host host.docker.internal:host-gateway \
  alpine:latest

Or within
“`docker-compose.yaml“` …

...
services:
  my_host:
    restart: always
    image: alpine:latest
    extra_hosts:
      - host.docker.internal:host-gateway
...

Pentesting Lab

Using Images from vulnhub.com in KVM (LibVirt) to create a Lab

Since most images on vulnhub are based on VMWare or VirtualBox, we have to convert the images into a proper format.

For now we will focus on VirtualBox Images (OVA) and convert them to qcow2 for Qemu.

Download an Image

As an example I will use the Breach 1 Image from https://www.vulnhub.com/entry/breach-1,152/ and download it.

wget https://download.vulnhub.com/breach/Breach-1.0.zip

As you can read in the description, this is a 7zip archive. So we have du decompress it and install 7z before.

# using Debian based system
sudo apt install p7zip-full
7z x Breach-1.0.zip

OVA is a Tarball

One thing to know is that an OVA is a Tarball. So let’s extract the Tarball.

tar -xvf 'Breach 1.0.ova'
Breach 1.0.ovf
Breach 1.0.mf
Breach_1.0-disk1.vmdk
Breach_1.0-file1.iso
Breach_1.0-file2.iso

Converting the disk (usually the vmdk file) into qcow2

# look for a disk image
ls -alh
total 5.7G
drwxr-xr-x 4 root root 4.0K Jun  5 21:16  .
drwx--x--x 4 root root 4.0K Jun  5 20:41  ..
-rw-r--r-- 1   64   64 1.4G Jun 13  2016  Breach_1.0-disk1.vmdk
-rw-r--r-- 1   64   64  32M Jun 13  2016  Breach_1.0-file1.iso
-rw-r--r-- 1   64   64 579M Jun 13  2016  Breach_1.0-file2.iso
-rw-r--r-- 1   64   64  271 Jun 13  2016 'Breach 1.0.mf'
-rw-r--r-- 1   64   64 7.5K Jun 13  2016 'Breach 1.0.ovf'
-rw-r--r-- 1 root root 1.9G Jun 14  2016  Breach-1.0.zip
-rw-r--r-- 1 root root 2.0G Jun 13  2016  breach.ova

# now we can convert the virtual machine disk image (vmdk) to create our qcow2 image
qemu-img convert -O qcow2 Breach_1.0-disk1.vmdk breach.qcow2

Now we can use breach.qcow2 as disk for out virtual machine.

Mounting the disk to the host to make changes the filesystem

This comes handy, if the image uses a fixed network setup, that does not fit your needs.

In the first we need to load kernel modules. Only necessary once.

sudo modprobe nbd max_part=8

Now we have to connect the image an mount the proper partition.

# connect the image to the device
sudo qemu-nbd --connect=/dev/nbd0 /var/lib/libvirt/images/VM.qcow2

# check the partitions to find the root partition
fdisk /dev/nbd0 -l
Disk /dev/nbd0: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000312f0

Device      Boot    Start      End  Sectors  Size Id Type
/dev/nbd0p1 *        2048 39845887 39843840   19G 83 Linux
/dev/nbd0p2      39847934 41940991  2093058 1022M  5 Extended
/dev/nbd0p5      39847936 41940991  2093056 1022M 82 Linux swap / Solaris

# create a directory as a mount point
mkdir /tmp/mnt

# mount the first partition
sudo mount /dev/nbd0p1 /tmp/mnt/

# finaly reverse it to clean up and to unblock the image
umount /tmp/mnt && rmdir /tmp/mnt
qemu-nbd --disconnect /dev/nbd0