Linux Privilege Escalation
Last updated
Last updated
Jifunze na zoezi la AWS Hacking: Jifunze na zoezi la GCP Hacking:
Anza kupata ufahamu wa OS inayoendesha
Ikiwa una ruhusa ya kuandika kwenye folda yoyote ndani ya kipengee cha PATH
unaweza kuiba baadhi ya maktaba au programu za kutekeleza:
Je, kuna taarifa za kuvutia, nywila au funguo za API katika mazingira ya mazingira?
Angalia toleo la kernel na kama kuna mbinu ya kudukua inayoweza kutumika kuinua mamlaka.
Kuchambua toleo zote za kernel zenye mapungufu kutoka kwenye wavuti hiyo unaweza kufanya:
Vyombo vinavyoweza kusaidia kutafuta mianya ya kernel ni:
Daima tafuta toleo la kernel kwenye Google, labda toleo lako la kernel limeandikwa kwenye baadhi ya mianya ya kernel na kisha utahakikisha kuwa mianya hiyo ni halali.
Ukarabati wa Mamlaka kwenye Linux - Kernel ya Linux <= 3.19.0-73.8
Kulingana na matoleo hatarishi ya sudo yanayoonekana katika:
Unaweza kuangalia kama toleo la sudo lina kasoro kwa kutumia grep hii.
Kutoka kwa @sickrov
Angalia sanduku la smasher2 la HTB kwa mfano wa jinsi hii udhaifu unaweza kutumiwa
ASLR (Address Space Layout Randomization) ni mbinu inayotumiwa katika ulinzi wa usalama wa mfumo wa uendeshaji kwa kubadilisha mahali ambapo sehemu muhimu za kumbukumbu zinawekwa.
Ikiwa uko ndani ya kontena ya docker unaweza kujaribu kutoroka kutoka humo:
Angalia nini kimeunganishwa na kimeunganishwa, wapi na kwa nini. Ikiwa kitu chochote hakijaunganishwa unaweza kujaribu kuunganisha na kuangalia taarifa za kibinafsi.
Panga programu muhimu
Pia, angalia ikiwa kuna compiler yoyote imewekwa. Hii ni muhimu ikiwa unahitaji kutumia baadhi ya kernel exploit kwani inapendekezwa kuikusanya kwenye mashine ambayo utaitumia (au kwenye moja kama hiyo)
Angalia toleo la pakiti na huduma zilizosakinishwa. Labda kuna toleo la zamani la Nagios (kwa mfano) ambalo linaweza kutumika kwa kufanya uwezekano wa kupata mamlaka zaidi... Inashauriwa kuangalia kwa mkono toleo la programu iliyosakinishwa ambayo inaonekana kuwa ya shaka zaidi.
Ikiwa una ufikiaji wa SSH kwenye mashine unaweza pia kutumia openVAS kuchunguza programu iliyopitwa na wakati na inayoweza kudhuriwa iliyosakinishwa kwenye mashine.
Taarifa kwamba amri hizi zitaonyesha habari nyingi ambazo kwa kiasi kikubwa hazitakuwa na maana, kwa hivyo inapendekezwa kutumia programu kama OpenVAS au sawa nayo itakayochunguza ikiwa toleo lolote la programu iliyosakinishwa linaweza kudhuriwa na mashambulizi yanayojulikana
Angalia mchakato gani unatekelezwa na uchunguze ikiwa mchakato wowote una mamlaka zaidi kuliko inavyopaswa (labda tomcat inatekelezwa na root?)
Baadhi ya huduma za seva huficha vyeti kwa maandishi wazi ndani ya kumbukumbu. Kawaida utahitaji mamlaka ya mzizi kusoma kumbukumbu ya michakato inayomilikiwa na watumiaji wengine, kwa hivyo hii kawaida ni muhimu zaidi wakati tayari umepata mamlaka ya mzizi na unataka kugundua vyeti zaidi. Hata hivyo, kumbuka kwamba kama mtumiaji wa kawaida unaweza kusoma kumbukumbu ya michakato unayomiliki.
Tambua kwamba siku hizi zaidi ya mashine haziruhusu ptrace kwa chaguo-msingi ambayo inamaanisha huwezi kudump michakato mingine inayomilikiwa na mtumiaji wako asiye na mamlaka.
Faili /proc/sys/kernel/yama/ptrace_scope inadhibiti upatikanaji wa ptrace:
kernel.yama.ptrace_scope = 0: michakato yote inaweza kufuatiliwa, mradi wawe na uid sawa. Hii ndiyo njia ya kawaida ya ptracing ilivyofanya kazi.
kernel.yama.ptrace_scope = 1: mchakato wa mzazi pekee unaweza kufuatiliwa.
kernel.yama.ptrace_scope = 2: Msimamizi pekee anaweza kutumia ptrace, kwani inahitaji uwezo wa CAP_SYS_PTRACE.
kernel.yama.ptrace_scope = 3: Hakuna michakato inayoweza kufuatiliwa na ptrace. Mara baada ya kuweka, ni lazima kuzima upya ili kuwezesha tena ptracing.
Ukiwa na ufikiaji wa kumbukumbu ya huduma ya FTP (kwa mfano) unaweza kupata Heap na kutafuta ndani ya vyeti vyake.
Kwa kitambulisho cha mchakato kilichopewa, ramani inaonyesha jinsi kumbukumbu inavyoainishwa ndani ya nafasi ya anwani ya kielelezo cha mchakato huo; pia inaonyesha ruhusa za kila eneo lililoainishwa. Faili bandia ya mem inaonyesha kumbukumbu za mchakato yenyewe. Kutoka kwa faili za ramani tunajua ni eneo gani la kumbukumbu linaloweza kusomwa na mapinduzi yao. Tunatumia habari hii kutafuta kwenye faili ya mem na kudondosha eneo zote zinazoweza kusomwa kwenye faili.
/dev/mem
hutoa ufikiaji kwa kumbukumbu ya kimwili ya mfumo, siyo kumbukumbu ya kawaida. Nafasi ya anwani za kumbukumbu ya kawaida ya kernel inaweza kupatikana kwa kutumia /dev/kmem. Kwa kawaida, /dev/mem
inaweza kusomwa tu na mtumiaji wa root na kikundi cha kmem.
Kudumpisha kumbukumbu ya mchakato unaweza kutumia:
Ukipata kwamba mchakato wa kuthibitisha unafanya kazi:
Unaweza kudondosha mchakato (angalia sehemu zilizotangulia kupata njia tofauti za kudondosha kumbukumbu ya mchakato) na kutafuta sifa ndani ya kumbukumbu:
Angalia kama kuna kazi ya kipangilio inayoweza kuwa na mapungufu. Labda unaweza kutumia script inayotekelezwa na root (vuln ya wildcard? unaweza kuhariri faili ambazo root anatumia? tumia viungo vya ishara? tengeneza faili maalum kwenye saraka ambayo root anatumia?).
Kwa mfano, ndani ya /etc/crontab unaweza kupata PATH: PATH=/home/user:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
(Tafadhali kumbuka jinsi mtumiaji "user" ana ruhusa za kuandika juu ya /home/user)
Ikiwa ndani ya crontab hii mtumiaji wa root anajaribu kutekeleza amri au script bila kuweka njia. Kwa mfano: * * * * root overwrite.sh Kisha, unaweza kupata shell ya root kwa kutumia:
Ikiwa script inatekelezwa na root ina "*" ndani ya amri, unaweza kutumia hii kufanya mambo yasiyotarajiwa (kama privesc). Mfano:
Ikiwa kichwa cha panya kinafuatiwa na njia kama /baadhi/ya/njia/* , sio dhaifu (hata ./* sio).
Soma ukurasa ufuatao kwa mbinu zaidi za kutumia kichwa cha panya:
Ikiwa unaweza kuhariri skripti ya cron inayotekelezwa na root, unaweza kupata kabisa kuingia kwa urahisi:
Ikiwa script inayotekelezwa na root inatumia directory ambapo una ufikiaji kamili, labda itakuwa na manufaa kufuta saraka hiyo na kuunda kiungo ishara cha saraka nyingine kuhudumia script inayodhibitiwa na wewe
Unaweza kufuatilia michakato kutafuta michakato inayotekelezwa kila baada ya dakika 1, 2 au 5. Labda unaweza kunufaika nayo na kupandisha mamlaka.
Kwa mfano, kufuatilia kila 0.1s kwa dakika 1, panga kwa amri zilizotekelezwa kidogo na futa amri ambazo zimetekelezwa zaidi, unaweza kufanya:
Inawezekana kuunda jukumu la cron kwa kuweka kurudi kiotomatiki baada ya maoni (bila herufi ya mstari mpya), na jukumu la cron litafanya kazi. Mfano (zingatia herufi ya kurudi kiotomatiki):
Angalia ikiwa unaweza kuandika faili yoyote ya .service
, ikiwa unaweza, unaweza kuibadilisha ili itekeleze mlango wako wa nyuma wakati huduma inapoanza, inapoanzishwa upya au inaposimamishwa (labda utahitaji kusubiri hadi mashine ibadilishwe).
Kwa mfano, unda mlango wako wa nyuma ndani ya faili ya .service na ExecStart=/tmp/script.sh
Kumbuka kwamba ikiwa una ruhusa ya kuandika juu ya binaries zinazotekelezwa na huduma, unaweza kuzibadilisha kwa milango ya nyuma ili wakati huduma zinapotekelezwa tena milango ya nyuma itatekelezwa.
Unaweza kuona PATH inayotumiwa na systemd kwa:
Ikiwa utagundua kwamba unaweza kuandika katika folda yoyote kwenye njia, huenda ukaweza kuinua mamlaka. Unahitaji kutafuta njia za kihusika zinazotumiwa kwenye faili za mipangilio ya huduma kama:
Kisha, tengeneza faili inayoweza kutekelezwa yenye jina sawa na njia ya kihierarkia ya binary ndani ya folda ya PATH ya systemd unayoweza kuandika, na wakati huduma inapoombwa kutekeleza hatua ya udhaifu (Anza, Acha, Pakia tena), backdoor yako itatekelezwa (watumiaji wasio na ruhusa kawaida hawawezi kuanza/kuacha huduma lakini angalia kama unaweza kutumia sudo -l
).
Jifunze zaidi kuhusu huduma kwa kutumia man systemd.service
.
Majira ni faili za kitengo za systemd ambazo jina lake linamalizika kwa **.timer**
ambazo huendesha faili au matukio ya **.service**
. Majira yanaweza kutumika kama mbadala wa cron kwani wana msaada wa kujengwa kwa matukio ya wakati wa kalenda na matukio ya wakati wa monotonic na wanaweza kukimbia kwa njia isiyo ya moja kwa moja.
Unaweza kuchambua majira yote kwa:
Ikiwa unaweza kuhariri timer unaweza kufanya iendelee kutekeleza baadhi ya vitu vilivyopo katika systemd.unit (kama vile .service
au .target
)
Katika hati ya maelezo unaweza kusoma ni nini Kitengo:
Kitengo cha kuamsha wakati huu wa kengele unapopita. Hoja ni jina la kitengo, ambalo sio ".timer". Ikiwa haielezwi, thamani hii inabadilika kiotomatiki kuwa huduma ambayo ina jina sawa na kitengo cha timer, isipokuwa kwa kufikia mwisho. (Tazama hapo juu.) Inapendekezwa kwamba jina la kitengo kinachoamilishwa na jina la kitengo cha timer viitwe kwa jina moja, isipokuwa kwa kufikia mwisho.
Kwa hivyo, ili kutumia ruhusa hii unahitaji:
Kupata kitengo cha systemd (kama .service
) ambacho kina utekelezaji wa faili inayoweza kuandikwa
Kupata kitengo cha systemd ambacho kina utekelezaji wa njia ya kihesabu na una ruhusa za kuandika kwenye NJIA ya systemd (kujifanya kuwa utekelezaji huo)
Jifunze zaidi kuhusu muda na man systemd.timer
.
Ili kuwezesha timer unahitaji ruhusa ya mzizi na kutekeleza:
Tafadhali kumbuka timer ina anzishwa kwa kuunda symlink kwake kwenye /etc/systemd/system/<WantedBy_section>.wants/<name>.timer
Unix Domain Sockets (UDS) huwezesha mawasiliano ya mchakato kwenye mashine sawa au tofauti ndani ya mifano ya mteja-seva. Hutumia faili za maelezo za Unix za kawaida kwa mawasiliano kati ya kompyuta na huanzishwa kupitia faili za .socket
.
Sockets zinaweza kusanidiwa kwa kutumia faili za .socket
.
Jifunze zaidi kuhusu sockets na man systemd.socket
. Ndani ya faili hii, vigezo kadhaa vya kuvutia vinaweza kusanidiwa:
ListenStream
, ListenDatagram
, ListenSequentialPacket
, ListenFIFO
, ListenSpecial
, ListenNetlink
, ListenMessageQueue
, ListenUSBFunction
: Chaguo hizi ni tofauti lakini muhtasari hutumiwa kuonyesha mahali itakaposikiliza soketi (njia ya faili ya soketi ya AF_UNIX, anwani ya IPv4/6 na/au nambari ya bandari ya kusikiliza, n.k.)
Accept
: Inachukua hoja ya boolean. Ikiwa kweli, kipengele cha huduma kinazalishwa kwa kila uunganisho unaoingia na soketi ya uunganisho pekee inapitishwa kwake. Ikiwa uwongo, soketi zote zinazosikiliza zenyewe zinapitishwa kwa kipengele cha huduma kilichoanzishwa, na kipengele kimoja cha huduma kinazalishwa kwa uunganisho wote. Thamani hii inapuuzwa kwa soketi za datagram na FIFO ambapo kipengele kimoja cha huduma kinalinganisha kwa hali yoyote trafiki yote inayoingia. Ina thamani ya uwongo. Kwa sababu za utendaji, inapendekezwa kuandika daemons mpya tu kwa njia inayofaa kwa Accept=no
.
ExecStartPre
, ExecStartPost
: Inachukua mistari moja au zaidi ya amri, ambayo inatekelezwa kabla au baada ya soketi za kusikiliza/FIFOs kuundwa na kufungwa, mtawalia. Token ya kwanza ya mstari wa amri lazima iwe jina la faili kamili, kisha ikifuatiwa na hoja za mchakato.
ExecStopPre
, ExecStopPost
: Amri za ziada ambazo zinatekelezwa kabla au baada ya soketi za kusikiliza/FIFOs kufungwa na kuondolewa, mtawalia.
Service
: Inabainisha jina la kipengele cha huduma cha kuamilisha kwenye trafiki inayoingia. Mipangilio hii inaruhusiwa tu kwa soketi zenye Accept=no. Kwa kawaida inarudi kwa huduma inayobeba jina sawa na soketi (na kiambishi kilichobadilishwa). Katika hali nyingi, haipaswi kuwa lazima kutumia chaguo hili.
Ikiwa unapata faili ya .socket
inayoweza kuandikwa, unaweza kuongeza mwanzoni mwa sehemu ya [Socket]
kitu kama: ExecStartPre=/home/kali/sys/backdoor
na mlango wa nyuma utatekelezwa kabla ya soketi kuundwa. Kwa hivyo, labda utahitaji kusubiri hadi mashine ibadilishwe.
Tafadhali kumbuka kuwa mfumo lazima utumie usanidi wa faili ya soketi au mlango wa nyuma hautatekelezwa
Ikiwa unatambua soketi inayoweza kuandikwa (sasa tunazungumzia juu ya Sockets za Unix na sio kuhusu faili za usanidi .socket
), basi unaweza kuwasiliana na soketi hiyo na labda kutumia udhaifu.
Mfano wa Utekaji:
Tafadhali elewa kwamba kunaweza kuwa na soketi zinazosikiliza maombi ya HTTP (Sinaongelei faili za .socket bali faili zinazofanya kazi kama soketi za unix). Unaweza kuchunguza hili kwa kutumia:
Socket ya Docker, mara nyingi hupatikana kwenye /var/run/docker.sock
, ni faili muhimu ambayo inapaswa kulindwa. Kwa chaguo-msingi, inaweza kuandikwa na mtumiaji wa root
na wanachama wa kikundi cha docker
. Kuwa na ufikiaji wa kuandika kwa socket hii kunaweza kusababisha ongezeko la mamlaka. Hapa kuna maelezo ya jinsi hii inaweza kufanywa na njia mbadala ikiwa CLI ya Docker haipatikani.
Ikiwa una ufikiaji wa kuandika kwa socket ya Docker, unaweza kuongeza mamlaka kwa kutumia amri zifuatazo:
Hizi amri zinaruhusu kukimbia kontena na ufikiaji wa kiwango cha mizizi kwa mfumo wa faili wa mwenyeji.
Katika hali ambapo Docker CLI haipatikani, soketi ya Docker inaweza bado kuhaririwa kwa kutumia API ya Docker na amri za curl
.
Orodhesha Picha za Docker: Pata orodha ya picha zilizopo.
Unda Kontena: Tuma ombi la kuunda kontena ambayo inamnasa saraka kuu ya mfumo wa mwenyeji.
Anza kontena ulilounda:
Ambatisha kwa Kontena: Tumia socat
kuweka uhusiano na kontena, kuruhusu utekelezaji wa amri ndani yake.
Baada ya kuweka uhusiano wa socat
, unaweza kutekeleza amri moja kwa moja ndani ya kontena na ufikiaji wa kiwango cha mizizi kwa mfumo wa faili wa mwenyeji.
Angalia njia zaidi za kuvunja kutoka kwa docker au kuitumia kuongeza viwango vya ruhusa katika:
Ikiwa unagundua kwamba unaweza kutumia amri ya ctr
soma ukurasa ufuatao kwani unaweza kuitumia kwa kufanya viwango vya ruhusa:
Ikiwa unagundua kwamba unaweza kutumia amri ya runc
soma ukurasa ufuatao kwani unaweza kuitumia kwa kufanya viwango vya ruhusa:
D-Bus ni mfumo wa Mawasiliano kati ya Michakato (IPC) wa kisasa unaowezesha programu kuingiliana na kushiriki data kwa ufanisi. Iliyoundwa kwa kuzingatia mfumo wa Linux wa kisasa, inatoa mfumo imara kwa aina tofauti za mawasiliano ya programu.
Mfumo huu ni mpana, ukisaidia IPC ya msingi inayoboresha kubadilishana data kati ya michakato, ikikumbusha soketi za eneo la UNIX zilizoboreshwa. Zaidi ya hayo, inasaidia kutangaza matukio au ishara, ikisaidia ushirikiano laini kati ya sehemu za mfumo. Kwa mfano, ishara kutoka kwa daemon ya Bluetooth kuhusu simu ya kuingia inaweza kusababisha mpiga muziki kuzima, ikiboresha uzoefu wa mtumiaji. Aidha, D-Bus inasaidia mfumo wa vitu vya mbali, ikisimplifisha maombi ya huduma na mwaliko wa njia kati ya programu, ikipunguza mchakato ambao kihistoria ulikuwa mgumu.
D-Bus inafanya kazi kwa mfano wa kuruhusu/kukataa, ikisimamia ruhusa za ujumbe (wito wa njia, kutuma ishara, n.k.) kulingana na athari jumla ya sheria za sera zinazolingana. Sera hizi hufafanua mwingiliano na basi, ikiruhusu kwa uwezekano wa kupandisha viwango vya ruhusa kupitia unyanyasaji wa ruhusa hizi.
Mfano wa sera kama hiyo katika /etc/dbus-1/system.d/wpa_supplicant.conf
unatolewa, ukielezea ruhusa kwa mtumiaji wa mizizi kumiliki, kutuma kwa, na kupokea ujumbe kutoka fi.w1.wpa_supplicant1
.
Sera bila mtumiaji au kikundi kilichotajwa inatumika kwa kila mtu, wakati sera za muktadha "default" zinatumika kwa wote wasiofunikwa na sera maalum zingine.
Jifunze jinsi ya kuhesabu na kutumia mawasiliano ya D-Bus hapa:
Ni ya kuvutia sana kuhesabu mtandao na kugundua nafasi ya mashine.
Daima angalia huduma za mtandao zinazoendesha kwenye mashine ambayo haukuweza kuingiliana nayo kabla ya kufikia:
Angalia kama unaweza kuchunguza trafiki. Ikiwa unaweza, unaweza kupata baadhi ya siri za kuingia.
Angalia wewe ni nani, una mamlaka gani, ni watumiaji gani wako kwenye mifumo, ni yupi anaweza kuingia na yupi ana mamlaka ya root:
Angalia kama wewe ni mwanachama wa kikundi fulani kinachoweza kukupatia mamlaka ya mzizi:
Angalia kama kuna kitu cha kuvutia kilichopo ndani ya ubao wa kuchorea (ikiwezekana)
Ikiwa unajua nywila yoyote ya mazingira jaribu kuingia kama kila mtumiaji kwa kutumia nywila hiyo.
Ikiwa unagundua kuwa unaweza kuandika ndani ya folda fulani ya $PATH unaweza kuinua mamlaka kwa kuunda mlango wa nyuma ndani ya folda inayoweza kuandikwa kwa jina la amri fulani ambayo itatekelezwa na mtumiaji tofauti (kimsingi root) na ambayo haipakuliwi kutoka kwenye folda iliyopo kabla ya folda yako inayoweza kuandikwa kwenye $PATH.
Unaweza kuruhusiwa kutekeleza amri fulani kwa kutumia sudo au wanaweza kuwa na biti ya suid. Angalia kwa kutumia:
Baadhi ya amri zisizotarajiwa kuruhusu kusoma na/au kuandika faili au hata kutekeleza amri. Kwa mfano:
Usanidi wa Sudo unaweza kuruhusu mtumiaji kutekeleza amri fulani kwa mamlaka ya mtumiaji mwingine bila kujua neno la siri.
Katika mfano huu mtumiaji demo
anaweza kukimbia vim
kama root
, sasa ni rahisi kupata shell kwa kuongeza ufunguo wa ssh kwenye saraka ya root au kwa kuita sh
.
Mwongozo huu inaruhusu mtumiaji kuweka mazingira ya mazingira wakati wa kutekeleza kitu:
Mfano huu, ukitegemea kifaa cha HTB Admirer, ulikuwa mnyonge kwa PYTHONPATH hijacking ili kupakia maktaba ya python ya kupendelea wakati wa kutekeleza script kama root:
Ruka ili usome faili zingine au tumia symlinks. Kwa mfano katika faili ya sudoers: hacker10 ALL= (root) /bin/less /var/log/*
Ikiwa wildcard inatumika (*), ni rahisi zaidi:
Ikiwa ruhusa ya sudo imetolewa kwa amri moja bila kutoa njia: hacker10 ALL= (root) less unaweza kutumia udhaifu huo kwa kubadilisha PATH variable
Tekniki hii inaweza kutumika pia ikiwa binary ya suid inaendesha amri nyingine bila kutaja njia yake (hakikisha daima unachunguza na strings maudhui ya binary ya SUID isiyoeleweka).
Ikiwa binary ya suid inaendesha amri nyingine ikieleza njia, basi, unaweza kujaribu kutumia kazi iliyoitwa kama amri ambayo faili ya suid inaita.
Kwa mfano, ikiwa binary ya suid inaita /usr/sbin/service apache2 start unapaswa kujaribu kuunda kazi na kuiegesha:
Mazingira ya LD_PRELOAD hutumika kutaja maktaba moja au zaidi zinazoshirikishwa (.so files) zitakazopakiwa na loader kabla ya zingine zote, ikiwa ni pamoja na maktaba ya C ya kawaida (libc.so
). Mchakato huu unajulikana kama kushirikisha maktaba kabla.
Hata hivyo, ili kudumisha usalama wa mfumo na kuzuia kipengele hiki kuchukuliwa faida, hasa na utekelezaji wa suid/sgid executables, mfumo unatekeleza masharti fulani:
Loader hauzingatii LD_PRELOAD kwa executables ambapo kitambulisho halisi cha mtumiaji (ruid) hakilingani na kitambulisho cha mtumiaji kilichopo (euid).
Kwa executables zenye suid/sgid, maktaba zinazopakiwa ni zile zilizo kwenye njia za kawaida ambazo pia ni suid/sgid.
Kupandisha mamlaka kunaweza kutokea ikiwa una uwezo wa kutekeleza amri kwa kutumia sudo
na matokeo ya sudo -l
yanajumuisha kauli env_keep+=LD_PRELOAD. Mipangilio hii inaruhusu mazingira ya LD_PRELOAD kudumu na kutambuliwa hata wakati amri zinatekelezwa kwa kutumia sudo
, ikiongoza kwa utekelezaji wa nambari ya aina yoyote na mamlaka yaliyopandishwa.
Hifadhi kama /tmp/pe.c
Kisha sakinisha kutumia:
Hatimaye, ongeza mamlaka kukimbia
Kama mshambuliaji anadhibiti LD_LIBRARY_PATH env variable kwa sababu anadhibiti njia ambapo maktaba zitatafutwa, privesc sawa inaweza kutumiwa vibaya.
Uponapo kutana na binary yenye ruhusa za SUID ambayo inaonekana isiyo ya kawaida, ni mazoea mazuri kuhakikisha kama inapakia faili za .so ipasavyo. Hii inaweza kuthibitishwa kwa kukimbia amri ifuatayo:
Kwa mfano, kukutana na kosa kama "open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (Hakuna faili au saraka kama hiyo)" inaashiria uwezekano wa kutumia.
Kutumia hili, mtu angeendelea kwa kuunda faili ya C, sema "/path/to/.config/libcalc.c", yenye msimbo ufuatao:
Msimbo huu, mara baada ya kuchakatwa na kutekelezwa, lengo lake ni kukuza mamlaka kwa kubadilisha ruhusa za faili na kutekeleza kifaa na mamlaka yaliyopandishwa.
Chakata faili ya C hapo juu kuwa faili ya kitu kilichoshirikishwa (.so) kwa:
Sasa tumeona binary ya SUID ikiload maktaba kutoka kwenye folda ambapo tunaweza kuandika, tujenge maktaba hiyo kwenye folda hiyo na jina linalohitajika:
Ikiwa unapata kosa kama hilo
Hii inamaanisha kwamba maktaba uliyoitengeneza inahitaji kuwa na kazi inayoitwa a_function_name
.
Mradi huu unakusanya kazi halali za Unix binaries ambazo zinaweza kutumiwa vibaya kuvunja mabwawa yaliyozuiwa, kukuza au kudumisha mamlaka zilizo juu, kuhamisha faili, kuzalisha bind na reverse shells, na kurahisisha kazi zingine za baada ya uvamizi.
gdb -nx -ex '!sh' -ex quit sudo mysql -e '! /bin/sh' strace -o /dev/null /bin/sh sudo awk 'BEGIN {system("/bin/sh")}'
Katika hali ambapo una upatikanaji wa sudo lakini sio nenosiri, unaweza kukuza mamlaka kwa kungojea utekelezaji wa amri ya sudo na kisha kuteka kikao cha token.
Mahitaji ya kukuza mamlaka:
Tayari una shell kama mtumiaji "sampleuser"
"sampleuser" ame tumia sudo
kutekeleza kitu katika dakika 15 zilizopita (kwa kawaida hiyo ni muda wa token ya sudo inayoturuhusu kutumia sudo
bila kuingiza nenosiri lolote)
cat /proc/sys/kernel/yama/ptrace_scope
ni 0
gdb
inapatikana (unaweza kuweza kuipakia)
(Unaweza kuwezesha kwa muda ptrace_scope
kwa echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
au kudumisha kwa kubadilisha /etc/sysctl.d/10-ptrace.conf
na kuweka kernel.yama.ptrace_scope = 0
)
Uvamizi wa kwanza (exploit.sh
) utaunda binary activate_sudo_token
katika /tmp. Unaweza kutumia hiyo kuiwezesha token ya sudo katika kikao chako (hutapata moja kwa moja kabisa shell ya mizizi, fanya sudo su
):
Exploit ya pili (exploit_v2.sh
) itaunda sh shell katika /tmp iliyomilikiwa na root na setuid
Exploit ya tatu (exploit_v3.sh
) ita unda faili ya sudoers ambayo inafanya vitambulisho vya sudo kuwa vya milele na kuruhusu watumiaji wote kutumia sudo
Faili /etc/sudoers
na faili ndani ya /etc/sudoers.d
huzingatia ni nani anaweza kutumia sudo
na jinsi gani. Faili hizi kwa chaguo-msingi zinaweza kusomwa tu na mtumiaji root na kikundi cha root.
Ikiwa unaweza kusoma faili hii unaweza kuwa na uwezo wa kupata habari za kuvutia, na ikiwa unaweza kuandika faili yoyote utaweza kupandisha vyeo.
Ikiwa unaweza kuandika unaweza kutumia ruhusa hii
Njia nyingine ya kutumia vibali hivi:
Kuna njia mbadala za faili ya sudo
kama vile doas
kwa OpenBSD, kumbuka kuangalia mazingira yake katika /etc/doas.conf
Ikiwa unajua kwamba mtumiaji kawaida hujihusisha na mashine na kutumia sudo
kuongeza mamlaka na umepata shell ndani ya muktadha huo wa mtumiaji, unaweza kuunda faili mpya ya sudo ambayo itatekeleza nambari yako kama root na kisha amri ya mtumiaji. Kisha, badilisha $PATH ya muktadha wa mtumiaji (kwa mfano kwa kuongeza njia mpya katika .bash_profile) ili wakati mtumiaji anatekeleza sudo, faili yako ya sudo itatekelezwa.
Au kutekeleza kitu kama:
Faili /etc/ld.so.conf
inaonyesha mahali ambapo faili za mipangilio iliyopakiwa zinatoka. Kawaida, faili hii ina njia ifuatayo: include /etc/ld.so.conf.d/*.conf
Hii inamaanisha kuwa faili za mipangilio kutoka /etc/ld.so.conf.d/*.conf
zitasomwa. Faili hizi za mipangilio zinaweza kuelekeza kwenye folda nyingine ambapo maktaba zitatafutwa. Kwa mfano, yaliyomo kwenye /etc/ld.so.conf.d/libc.conf
ni /usr/local/lib
. Hii inamaanisha kuwa mfumo utatafuta maktaba ndani ya /usr/local/lib
.
Ikiwa kwa sababu fulani mtumiaji ana ruhusa ya kuandika kwenye mojawapo ya njia zilizotajwa: /etc/ld.so.conf
, /etc/ld.so.conf.d/
, faili yoyote ndani ya /etc/ld.so.conf.d/
au folda yoyote ndani ya faili ya mipangilio ndani ya /etc/ld.so.conf.d/*.conf
anaweza kuwa na uwezo wa kukuza mamlaka.
Angalia jinsi ya kutumia udhaifu huu wa usanidi vibaya kwenye ukurasa ufuatao:
Kwa kuchapisha lib ndani ya /var/tmp/flag15/
itatumika na programu mahali hapa kama ilivyoelezwa katika variable ya RPATH
.
Kisha tengeneza maktaba mbaya katika /var/tmp
kwa gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6
Uwezo wa Linux hutoa sehemu ya mizizi inayopatikana kwa mchakato. Hii kimsingi huvunja mizizi ya uwezo kuwa sehemu ndogo na za kipekee. Kila moja ya sehemu hizi inaweza kutolewa kwa mchakato kivyake. Kwa njia hii seti kamili ya uwezo inapunguzwa, ikipunguza hatari za unyonyaji. Soma ukurasa ufuatao kujifunza zaidi kuhusu uwezo na jinsi ya kutumia vibaya:
Katika saraka, biti ya "utekelezaji" inamaanisha kuwa mtumiaji anayehusika anaweza "cd" kuingia kwenye saraka. Biti ya "soma" inamaanisha mtumiaji anaweza kuorodhesha faili, na biti ya "andika" inamaanisha mtumiaji anaweza kufuta na kuunda faili mpya.
Toa mtumiaji "kali" vibali vya kusoma na kuandika kwenye faili:
Pata faili zenye ACLs maalum kutoka kwenye mfumo:
Katika toleo za zamani unaweza kuiba vikao vya kabati vya mtumiaji mwingine (root). Katika toleo jipya zaidi utaweza kuunganisha kwenye vikao vya skrini tu vya mtumiaji wako mwenyewe. Hata hivyo, unaweza kupata habari za kuvutia ndani ya kikao.
Orodhesha vikao vya skrini
Ambatisha kwenye kikao
Hii ilikuwa tatizo na toleo za zamani za tmux. Sikufanikiwa kuteka kikao cha tmux (v2.1) kilichoundwa na root kama mtumiaji asiye na mamlaka.
Orodhesha vikao vya tmux
Ambatisha kwenye kikao
Angalia Valentine box kutoka HTB kama mfano.
PasswordAuthentication: Inabainisha ikiwa uthibitisho wa nywila unaruhusiwa. Chaguo msingi ni hapana
.
PubkeyAuthentication: Inabainisha ikiwa uthibitisho wa ufunguo wa umma unaruhusiwa. Chaguo msingi ni ndiyo
.
PermitEmptyPasswords: Wakati uthibitisho wa nywila unaruhusiwa, inabainisha ikiwa server inaruhusu kuingia kwenye akaunti zenye herufi za nywila tupu. Chaguo msingi ni hapana
.
Inabainisha ikiwa root anaweza kuingia kwa kutumia ssh, chaguo msingi ni hapana
. Inawezekana kuwa na thamani zifuatazo:
ndiyo
: root anaweza kuingia kwa kutumia nywila na ufunguo wa kibinafsi
bila-nywila
au zuia-nywila
: root anaweza kuingia tu kwa kutumia ufunguo wa kibinafsi
amri-zilizolazimishwa-pekee
: Root anaweza kuingia tu kwa kutumia ufunguo wa kibinafsi na ikiwa chaguo la amri limetajwa
hapana
: hapana
Inabainisha faili zinazohifadhi ufunguo wa umma ambao unaweza kutumika kwa uthibitisho wa mtumiaji. Inaweza kuwa na alama kama %h
, ambayo itabadilishwa na saraka ya nyumbani. Unaweza kuonyesha njia kamili (kuanzia /
) au njia za ndani kutoka kwa nyumbani kwa mtumiaji. Kwa mfano:
Hiyo mipangilio itaonyesha kwamba ukijaribu kuingia kwa funguo ya kibinafsi ya mtumiaji "jina la jaribio" ssh italinganisha funguo ya umma ya funguo lako na zile zilizoko katika /home/jina la jaribio/.ssh/authorized_keys
na /home/jina la jaribio/access
Kusonga mbele kwa wakala wa SSH inakuruhusu kutumia funguo zako za SSH za ndani badala ya kuacha funguo (bila nywila!) zikikaa kwenye server yako. Kwa hivyo, utaweza kuruka kupitia ssh kwenda kwa mwenyeji na kutoka hapo kuruka kwenda kwa mwenyeji mwingine ukitumia funguo iliyoko kwenye mwenyeji wako wa awali.
Unahitaji kuweka chaguo hili katika $HOME/.ssh.config
kama hivi:
Tambua kwamba ikiwa Host
ni *
kila wakati mtumiaji anapohamia kwenye mashine tofauti, mwenyeji huyo ataweza kupata ufikiaji wa funguo (ambao ni suala la usalama).
Faili /etc/ssh_config
inaweza kubadilisha hii chaguo na kuruhusu au kukataa usanidi huu.
Faili /etc/sshd_config
inaweza kuruhusu au kukataa ssh-agent forwarding kwa neno la msimbo AllowAgentForwarding
(chaguo la msingi ni kuruhusu).
Ikiwa utagundua kuwa Forward Agent imeboreshwa katika mazingira, soma ukurasa ufuatao kwani unaweza kutumia hii kwa kujipandisha hadhi:
Faili /etc/profile
na faili chini ya /etc/profile.d/
ni hati ambazo hutekelezwa wakati mtumiaji anapoendesha kabia mpya. Kwa hivyo, ikiwa unaweza kuandika au kuhariri yoyote kati yao unaweza kujipandisha hadhi.
Kulingana na OS faili za /etc/passwd
na /etc/shadow
zinaweza kutumia jina tofauti au kunaweza kuwa na nakala rudufu. Kwa hivyo inashauriwa kuzipata zote na kuangalia kama unaweza kuzisoma ili uone kama kuna hashes ndani ya faili hizo:
Katika baadhi ya matukio unaweza kupata hash za nywila ndani ya faili ya /etc/passwd
(au sawa)
Kwanza, tengeneza nenosiri kwa kutumia moja ya amri zifuatazo.
Kisha ongeza mtumiaji hacker
na ongeza nywila iliyozalishwa.
Kwa mfano: hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash
Sasa unaweza kutumia amri ya su
na hacker:hacker
Kwa hiari, unaweza kutumia mistari ifuatayo kuongeza mtumiaji bandia bila nenosiri. ONYO: unaweza kudhoofisha usalama wa sasa wa mashine.
NOTE: Katika majukwaa ya BSD /etc/passwd
iko katika /etc/pwd.db
na /etc/master.passwd
, pia /etc/shadow
imepewa jina la /etc/spwd.db
.
Unapaswa kuangalia ikiwa unaweza kuandika kwenye faili nyeti. Kwa mfano, je, unaweza kuandika kwenye faili ya mazingira ya huduma?
Kwa mfano, ikiwa mashine inaendesha seva ya tomcat na unaweza kurekebisha faili ya usanidi wa huduma ya Tomcat ndani ya /etc/systemd/, basi unaweza kurekebisha mistari:
Vichupo vifuatavyo vinaweza kuwa na nakala rudufu au habari za kuvutia: /tmp, /var/tmp, /var/backups, /var/mail, /var/spool/mail, /etc/exports, /root (Labda huenda usiweze kusoma la mwisho lakini jaribu)
Ikiwa unajua mahali ambapo skripti ya python itatekelezwa na unaweza kuandika ndani ya folda hiyo au unaweza kurekebisha maktaba za python, unaweza kurekebisha maktaba ya OS na kuifanya kuwa na mlango wa nyuma (ikiwa unaweza kuandika mahali ambapo skripti ya python itatekelezwa, nakili na ubandike maktaba ya os.py).
Ku kuweka mlango wa nyuma kwenye maktaba, weka mwishoni mwa maktaba ya os.py mstari ufuatao (badilisha IP na PORT):
Udhaifu katika logrotate
huruhusu watumiaji wenye ruhusa za kuandika kwenye faili ya log au folda zake za mzazi kupata mamlaka ya juu. Hii ni kwa sababu logrotate
, mara nyingi ikifanya kazi kama root, inaweza kudanganywa kutekeleza faili za kiholela, hasa katika folda kama /etc/bash_completion.d/. Ni muhimu kuchunguza ruhusa si tu katika /var/log bali pia katika folda yoyote ambapo mzunguko wa logi unatumika.
Udhaifu huu unaathiri logrotate
toleo 3.18.0
na vinyume vyake
Ikiwa, kwa sababu yoyote, mtumiaji anaweza kuandika skrini ya ifcf-<chochote>
kwa /etc/sysconfig/network-scripts au anaweza kurekebisha ile iliyopo, basi mfumo wako umeshambuliwa.
Skrini za mtandao, ifcg-eth0 kwa mfano hutumiwa kwa ajili ya uhusiano wa mtandao. Zinaonekana kama faili za .INI. Walakini, zinasakinishwa kiotomatiki kwenye Linux na Meneja wa Mtandao (dispatcher.d).
Kwa mfano wangu, sifa ya NAME=
katika skrini hizi za mtandao haishughulikiwi kwa usahihi. Ikiwa una nafasi nyeupe/blank katika jina mfumo unajaribu kutekeleza sehemu baada ya nafasi nyeupe/blank. Hii inamaanisha kwamba kila kitu baada ya nafasi nyeupe ya kwanza kinatekelezwa kama root.
Kwa mfano: /etc/sysconfig/network-scripts/ifcfg-1337
Directory /etc/init.d
ni nyumbani kwa maandishi ya System V init (SysVinit), mfumo wa usimamizi wa huduma wa Linux wa kisasa. Inajumuisha maandishi ya kuanza
, kukomesha
, kuanzisha tena
, na mara nyingine kupakia upya
huduma. Hizi zinaweza kutekelezwa moja kwa moja au kupitia viungo vya alama za ishara zilizopatikana katika /etc/rc?.d/
. Njia mbadala katika mifumo ya Redhat ni /etc/rc.d/init.d
.
Kwa upande mwingine, /etc/init
inahusishwa na Upstart, mfumo mpya zaidi wa usimamizi wa huduma ulioanzishwa na Ubuntu, ukitumia faili za usanidi kwa kazi za usimamizi wa huduma. Licha ya mpito kwenda Upstart, maandishi ya SysVinit bado hutumiwa pamoja na miundo ya Upstart kutokana na safu ya utangamano katika Upstart.
systemd inatokea kama meneja wa kuanzisha na huduma wa kisasa, ukitoa vipengele vya juu kama vile kuanza kwa daemon kwa ombi, usimamizi wa automount, na picha za hali ya mfumo. Inapanga faili katika /usr/lib/systemd/
kwa pakiti za usambazaji na /etc/systemd/system/
kwa marekebisho ya msimamizi, ikipunguza mchakato wa usimamizi wa mfumo.
Unaweza kupata orodha nzuri ya kernel zenye mapungufu na baadhi ya mashambulizi yaliyoundwa tayari hapa: na . Mitandao mingine ambapo unaweza kupata baadhi ya mashambulizi yaliyoundwa tayari: ,
(itekelezwe NDANI ya mhanga, huchunguza mianya kwa kernel 2.x tu)
Hakikisha kila wakati kuna . Linpeas huchunguza hizo kwa kuangalia parameter --inspect
ndani ya mstari wa amri ya mchakato.
Pia angalia mamlaka yako kwenye binaries za michakato, labda unaweza kubadilisha faili ya mtu mwingine.
Unaweza kutumia zana kama kufuatilia michakato. Hii inaweza kuwa na manufaa sana kwa kutambua michakato dhaifu inayoendeshwa mara kwa mara au wakati seti fulani ya mahitaji inakidhiwa.
ProcDump ni ubunifu wa Linux wa zana ya kawaida ya ProcDump kutoka kwa seti ya zana za Sysinternals kwa Windows. Pata katika
(root) - _Unaweza kuondoa mahitaji ya root kwa mkono na kudump mchakato unaomilikiwa na wewe
Skripti A.5 kutoka (root inahitajika)
Chombo itakuiba vibali vya maandishi wazi kutoka kumbukumbu na kutoka kwa faili fulani maarufu. Inahitaji mamlaka ya mzizi kufanya kazi vizuri.
Kipengele | Jina la Mchakato |
---|
Unaweza pia kutumia (hii itachunguza na kuorodhesha kila mchakato unaoanza).
Tafadhali kumbuka kwamba ikiwa una ruhusa za kuandika juu ya soketi ya docker kwa sababu uko ndani ya kikundi cha docker
una . Ikiwa .
Baadhi ya toleo za Linux ziliathiriwa na mdudu ambao huruhusu watumiaji wenye UID > INT_MAX kuongeza mamlaka. Maelezo zaidi: , na .
Tumia kwa: systemd-run -t /bin/bash
Ikiwa hujali kufanya kelele nyingi na programu za su
na timeout
zipo kwenye kompyuta, unaweza kujaribu kuvunja nguvu mtumiaji kwa kutumia .
pamoja na kiparameta -a
pia jaribu kuvunja nguvu watumiaji.
Hatua za Kukabiliana:
ni orodha iliyochaguliwa ya Unix binaries ambazo zinaweza kutumiwa na mshambuliaji kukiuka vizuizi vya usalama wa ndani. ni sawa lakini kwa hali ambapo unaweza kuingiza tu hoja katika amri.
Ikiwa unaweza kupata sudo -l
unaweza kutumia zana kuangalia ikiwa inagundua jinsi ya kutumia sheria yoyote ya sudo.
Ikiwa mahitaji yote haya yanakidhiwa, unaweza kukuza mamlaka kwa kutumia:
Ikiwa una ruhusa za kuandika kwenye folda au kwenye faili yoyote iliyoundwa ndani ya folda unaweza kutumia binary ku unda token ya sudo kwa mtumiaji na PID. Kwa mfano, ikiwa unaweza kubadilisha faili /var/run/sudo/ts/sampleuser na una shell kama mtumiaji huyo na PID 1234, unaweza kupata mamlaka ya sudo bila kuhitaji kujua nenosiri kwa kufanya:
Tafadhali kumbuka kwamba ikiwa mtumiaji anatumia kabati tofauti (si bash) utahitaji kuhariri faili nyingine kuongeza njia mpya. Kwa mfano inahariri ~/.bashrc
, ~/.zshrc
, ~/.bash_profile
. Unaweza kupata mfano mwingine katika
Orodha za Kudhibiti Upatikanaji (ACLs) zinaonyesha safu ya pili ya vibali vya hiari, vinavyoweza kupuuza vibali vya jadi vya ugo/rwx. Vibali hivi huongeza udhibiti juu ya ufikiaji wa faili au saraka kwa kuruhusu au kukataa haki kwa watumiaji maalum ambao si wamiliki au sehemu ya kikundi. Kiwango hiki cha ufafanuzi hutoa usimamizi sahihi zaidi wa ufikiaji. Maelezo zaidi yanaweza kupatikana .
Vipengele vyote vya SSL na SSH vilivyozalishwa kwenye mifumo inayotegemea Debian (Ubuntu, Kubuntu, nk) kati ya Septemba 2006 na Mei 13, 2008 vinaweza kuathiriwa na kosa hili. Kosa hili husababishwa wakati wa kujenga ufunguo mpya wa ssh kwenye mifumo hiyo, kwani ni mchanganyiko wa 32,768 pekee uliowezekana. Hii inamaanisha kuwa uwezekano wote unaweza kuhesabiwa na ukiwa na ufunguo wa umma wa ssh unaweza kutafuta ufunguo wa kibinafsi unaofanana. Unaweza kupata uwezekano uliohesabiwa hapa:
Soma nambari ya , inatafuta faili kadhaa zinazoweza kuwa na nywila. Zana nyingine ya kuvutia unayoweza kutumia kufanya hivyo ni: ambayo ni programu huru inayotumiwa kufufua nywila nyingi zilizohifadhiwa kwenye kompyuta ya eneo kwa Windows, Linux & Mac.
Ikiwa unaweza kusoma kumbukumbu, unaweza kupata habari za kuvutia/siri ndani yake. Kumbukumbu inavyokuwa ya ajabu, ndivyo itakavyokuwa ya kuvutia zaidi (labda). Pia, baadhi ya kumbukumbu za ukaguzi zilizo mbaya (zilizowekewa mlango wa nyuma?) zinaweza kukuruhusu kurekodi nywila ndani ya kumbukumbu za ukaguzi kama ilivyoelezwa katika chapisho hili: .
Ili kusoma logs ya kikundi itakuwa ya manufaa sana.
Pia unapaswa kuangalia faili zinazo kuwa na neno "password" katika jina yake au ndani ya maudhui, na pia angalia IPs na barua pepe ndani ya magogo, au hash regexps. Sitataja hapa jinsi ya kufanya hivi vyote lakini ikiwa una nia unaweza kuangalia ukaguzi wa mwisho ambao hufanya.
Maelezo zaidi kuhusu udhaifu huu yanaweza kupatikana kwenye ukurasa huu: .
Unaweza kutumia udhaifu huu na .
Udhaifu huu ni sawa sana na (magogo ya nginx), kwa hivyo unapogundua unaweza kubadilisha magogo, chunguza ni nani anayesimamia magogo hayo na angalia ikiwa unaweza kupandisha mamlaka kwa kubadilisha magogo kwa viungo vya alama.
Kumbukumbu ya Udhaifu:
LinEnum: (-t option) Enumy: Unix Privesc Check: Linux Priv Checker: BeeRoot: Kernelpop: Enumerate kernel vulns ins linux and MAC Mestaploit: multi/recon/local_exploit_suggester Linux Exploit Suggester: EvilAbigail (physical access): Recopilation of more scripts:
\
\
\
\
\
\
\
\
Jifunze & zoezi Udukuzi wa AWS: Jifunze & zoezi Udukuzi wa GCP:
Angalia !
Jiunge na 💬 au kikundi cha au tufuate kwenye Twitter 🐦 .
Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa na github repos.
Nywila ya GDM (Kali Desktop, Debian Desktop) | gdm-password |
Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
LightDM (Ubuntu Desktop) | lightdm |
VSFTPd (Mawasiliano ya FTP ya Moja kwa Moja) | vsftpd |
Apache2 (Vikao vya Msingi vya HTTP vya Moja kwa Moja) | apache2 |
OpenSSH (Vikao vya SSH vya Moja kwa Moja - Matumizi ya Sudo) | sshd: |