Bypass FS protections: read-only / no-exec / Distroless
As jy belangstel in 'n hak loopbaan en die onhakbare hak - ons is aan die werf! (vloeiende Pools geskrewe en gesproke vereis).
Videos
In die volgende videos kan jy die tegnieke wat in hierdie bladsy genoem word, meer diepgaand verduidelik vind:
lees-slegs / geen-uitvoer scenario
Dit word al hoe meer algemeen om Linux-masjiene te vind wat gemonteer is met lees-slegs (ro) lêerstelselbeskerming, veral in houers. Dit is omdat dit maklik is om 'n houer met 'n ro lêerstelsel te hardloop deur readOnlyRootFilesystem: true
in die securitycontext
in te stel:
Nogtans, selfs as die lêerstelsel as ro gemonteer is, sal /dev/shm
steeds skryfbaar wees, so dit is vals dat ons niks op die skyf kan skryf nie. Hierdie vouer sal egter gemonteer word met geen-uitvoer beskerming, so as jy 'n binêre lêer hier aflaai, sal jy dit nie kan uitvoer nie.
Vanuit 'n rooi span perspektief, maak dit dit ingewikkeld om binêre lêers af te laai en uit te voer wat nie reeds in die stelsel is nie (soos agterdeure of enumereerders soos kubectl
).
Maklikste omseiling: Skripte
Let daarop dat ek van binêre lêers gepraat het, jy kan enige skrip uitvoer solank die tolk binne die masjien is, soos 'n skelmskrip as sh
teenwoordig is of 'n python skrip as python
geïnstalleer is.
Nogtans is dit nie net genoeg om jou binêre agterdeur of ander binêre gereedskap wat jy mag nodig hê, uit te voer nie.
Geheue Omseilings
As jy 'n binêre lêer wil uitvoer maar die lêerstelsel dit nie toelaat nie, is die beste manier om dit te doen deur dit vanaf die geheue uit te voer, aangesien die beskerming nie daarop van toepassing is nie.
FD + exec syscall omseiling
As jy kragtige skripskrywers binne die masjien het, soos Python, Perl, of Ruby kan jy die binêre aflaai om vanaf die geheue uit te voer, dit in 'n geheue lêerbeskrywer stoor (create_memfd
syscall), wat nie deur daardie beskerming beskerm gaan word nie, en dan 'n exec
syscall aanroep wat die fd as die lêer om uit te voer aandui.
Hiervoor kan jy maklik die projek fileless-elf-exec gebruik. Jy kan dit 'n binêre lêer gee en dit sal 'n skrip genereer in die aangeduide taal met die binêre saamgepers en b64 gekodeer met die instruksies om dit te ontsodeer en te dekompresseer in 'n fd wat geskep is deur die create_memfd
syscall te roep en 'n oproep na die exec syscall om dit uit te voer.
Dit werk nie in ander skripskryftale soos PHP of Node nie omdat hulle geen standaard manier het om rou syscalls vanaf 'n skrip te roep nie, so dit is nie moontlik om create_memfd
te roep om die geheue fd te skep om die binêre te stoor nie.
Verder, 'n gewone fd met 'n lêer in /dev/shm
skep sal nie werk nie, aangesien jy nie toegelaat sal word om dit uit te voer nie omdat die geen-uitvoer beskerming van toepassing sal wees.
DDexec / EverythingExec
DDexec / EverythingExec is 'n tegniek wat jou in staat stel om die geheue van jou eie proses te modifiseer deur sy /proc/self/mem
te oorskryf.
Daarom, deur die samestellingskode te beheer wat deur die proses uitgevoer word, kan jy 'n shellkode skryf en die proses "muteer" om enige willekeurige kode uit te voer.
DDexec / EverythingExec sal jou in staat stel om jou eie shellkode of enige binêre vanaf geheue te laai en uit te voer.
MemExec
Memexec is die natuurlike volgende stap van DDexec. Dit is 'n DDexec shellcode gedemoniseer, sodat elke keer as jy 'n verskillende binêre lêer wil hardloop hoef jy nie DDexec weer te begin nie, jy kan net memexec shellcode hardloop via die DDexec tegniek en dan met hierdie duiwel kommunikeer om nuwe binêre lêers te laai en hardloop.
Jy kan 'n voorbeeld vind van hoe om memexec te gebruik om binêre lêers van 'n PHP omgekeerde dop te hardloop in https://github.com/arget13/memexec/blob/main/a.php.
Memdlopen
Met 'n soortgelyke doel as DDexec, laat die memdlopen tegniek 'n makliker manier toe om binêre lêers in geheue te laai om hulle later uit te voer. Dit kan selfs toelaat om binêre lêers met afhanklikhede te laai.
Distroless Omgewing
Wat is distroless
Distroless houers bevat slegs die kaal minimum komponente wat nodig is om 'n spesifieke aansoek of diens te hardloop, soos biblioteke en hardloop afhanklikhede, maar sluit groter komponente uit soos 'n pakkettebestuurder, skul, of stelsel nutsmaatskappye.
Die doel van distroless houers is om die aanvalsvlak van houers te verminder deur onnodige komponente te elimineer en die aantal kwesbaarhede wat uitgebuit kan word te minimeer.
Omgekeerde Dop
In 'n distroless houer mag jy dalk nie eers sh
of bash
vind om 'n gewone dop te kry nie. Jy sal ook nie binêre lêers soos ls
, whoami
, id
... vind nie, alles wat jy gewoonlik in 'n stelsel hardloop.
Daarom sal jy nie in staat wees om 'n omgekeerde dop te kry of die stelsel te opnoem soos jy gewoonlik doen nie.
Maar as die gekompromitteerde houer byvoorbeeld 'n flask web hardloop, dan is Python geïnstalleer, en dus kan jy 'n Python omgekeerde dop kry. As dit node hardloop, kan jy 'n Node omgekeerde dop kry, en dieselfde met meeste enige skrips taal.
Deur die skrips taal te gebruik kan jy die stelsel opnoem deur die taal se vermoëns te gebruik.
As daar geen read-only/no-exec
beskerming is nie, kan jy jou omgekeerde dop misbruik om binêre lêers in die lêerstelsel te skryf en hulle uit te voer.
Maar in hierdie soort houers sal hierdie beskermings gewoonlik bestaan, maar jy kan die vorige geheue uitvoer tegnieke gebruik om hulle te omseil.
Jy kan voorbeelde vind van hoe om sekere RCE kwesbaarhede te misbruik om skrips taal omgekeerde dops te kry en binêre lêers van geheue uit te voer in https://github.com/carlospolop/DistrolessRCE.
As jy belangstel in 'n hackingsloopbaan en wil die onhackbare hack - ons is aan die werf! (vloeiende Pools geskrewe en gespreek benodig).
Last updated