10 KiB
euid, ruid, suid
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? au ungependa kupata ufikiaji wa toleo jipya la PEASS au kupakua HackTricks kwa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua Familia ya PEASS, mkusanyiko wetu wa kipekee wa NFTs
- Pata swag rasmi ya PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuate kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwenye repo ya hacktricks na repo ya hacktricks-cloud.
Vitambulisho vya Utambuzi wa Mtumiaji
ruid
: Kitambulisho cha mtumiaji halisi kinawakilisha mtumiaji ambaye alianzisha mchakato.euid
: Inajulikana kama kitambulisho cha mtumiaji kinachofaa, inawakilisha kitambulisho cha mtumiaji kinachotumiwa na mfumo kuthibitisha mamlaka ya mchakato. Kwa ujumla,euid
inafanana naruid
, isipokuwa katika hali kama utekelezaji wa faili ya SetUID, ambapoeuid
inachukua kitambulisho cha mmiliki wa faili, hivyo kutoa ruhusa maalum za uendeshaji.suid
: Kitambulisho hiki cha mtumiaji kilichohifadhiwa ni muhimu wakati mchakato wenye mamlaka ya juu (kawaida unakimbia kama root) unahitaji kwa muda kutoa mamlaka yake ya juu ili kutekeleza kazi fulani, kisha baadaye kurudisha hadhi yake ya awali iliyoinuliwa.
Taarifa muhimu
Mchakato usiofanya kazi chini ya root unaweza kubadilisha tu euid
yake ili ifanane na ruid
, euid
, au suid
ya sasa.
Kuelewa Kazi za set*uid
setuid
: Kinyume na dhana za awali,setuid
kimsingi hubadilishaeuid
badala yaruid
. Hasa, kwa michakato yenye mamlaka, inalinganisharuid
,euid
, nasuid
na mtumiaji aliyetajwa, mara nyingi root, kwa ufanisi kufanya vitambulisho hivi kuwa thabiti kutokana nasuid
inayobadilisha. Maelezo zaidi yanaweza kupatikana kwenye ukurasa wa man wa setuid.setreuid
nasetresuid
: Hizi ni kazi zinazoruhusu marekebisho ya kina yaruid
,euid
, nasuid
. Walakini, uwezo wao unategemea kiwango cha mamlaka ya mchakato. Kwa michakato isiyokuwa ya root, marekebisho yanazuiliwa kwa thamani za sasa zaruid
,euid
, nasuid
. Kwa upande mwingine, michakato ya root au ile yenye uwezo waCAP_SETUID
inaweza kutoa thamani za kiholela kwa vitambulisho hivi. Taarifa zaidi inaweza kupatikana kwenye ukurasa wa man wa setresuid na ukurasa wa man wa setreuid.
Hizi ni huduma zilizoundwa sio kama kifaa cha usalama lakini kusaidia mchakato wa uendeshaji uliokusudiwa, kama wakati programu inachukua kitambulisho cha mtumiaji mwingine kwa kubadilisha kitambulisho chake cha mtumiaji kinachofaa.
Ni muhimu kutambua kwamba wakati setuid
inaweza kuwa chaguo la kawaida kwa kuinua mamlaka hadi root (kwa kuwa inalinganisha vitambulisho vyote na root), kutofautisha kati ya huduma hizi ni muhimu kwa kuelewa na kudhibiti tabia za vitambulisho vya mtumiaji katika hali tofauti.
Mbinu za Utekelezaji wa Programu katika Linux
Wito wa Mfumo wa execve
- Uwezo:
execve
inaanzisha programu, iliyopangwa na hoja ya kwanza. Inachukua hoja mbili za safu,argv
kwa hoja naenvp
kwa mazingira. - Tabia: Inahifadhi nafasi ya kumbukumbu ya mwito lakini inasasisha safu ya steki, rundo, na data. Kanuni ya programu inabadilishwa na programu mpya.
- Uhifadhi wa Kitambulisho cha Mtumiaji:
ruid
,euid
, na vitambulisho vya kikundi vya ziada vinabaki bila kubadilika.euid
inaweza kuwa na mabadiliko madogo ikiwa programu mpya ina biti ya SetUID iliyowekwa.suid
inasasishwa kutokaeuid
baada ya utekelezaji.- Nyaraka: Maelezo ya kina yanaweza kupatikana kwenye ukurasa wa man wa
execve
.
Kazi ya system
- Uwezo: Tofauti na
execve
,system
inaunda mchakato wa watoto kwa kutumiafork
na inatekeleza amri ndani ya mchakato huo wa watoto kwa kutumiaexecl
. - Utekelezaji wa Amri: Inatekeleza amri kupitia
sh
naexecl("/bin/sh", "sh", "-c", amri, (char *) NULL);
. - Tabia: Kwa kuwa
execl
ni aina yaexecve
, inafanya kazi kwa njia sawa lakini katika muktadha wa mchakato mpya wa watoto. - Nyaraka: Maelezo zaidi yanaweza kupatikana kwenye ukurasa wa man wa
system
.
Tabia ya bash
na sh
na SUID
bash
:- Ina chaguo la
-p
linaloathiri jinsieuid
naruid
zinavyoshughulikiwa. - Bila
-p
,bash
inawekaeuid
kuwaruid
ikiwa awali zinatofautiana. - Na
-p
,euid
ya awali inahifadhiwa. - Maelezo zaidi yanaweza kupatikana kwenye ukurasa wa man wa
bash
. sh
:- Haina mfumo kama
-p
katikabash
. - Tabia inayohusiana na vitambulisho vya mtumiaji haijatajwa wazi, isipokuwa chini ya chaguo la
-i
, ikisisitiza uhifadhi wa usawa waeuid
naruid
. - Taarifa zaidi inapatikana kwenye ukurasa wa man wa
sh
.
Mbinu hizi, tofauti katika uendeshaji wao, zinatoa mbalimbali ya chaguzi za kutekeleza na kubadilisha kati ya programu, na nuances maalum katika jinsi vitambulisho vya mtumiaji vinavyosimamiwa na kuhifadhiwa.
Kujaribu Tabia za Vitambulisho vya Mtumiaji katika Utekelezaji
Mifano imechukuliwa kutoka https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jail, angalia kwa maelezo zaidi
Kesi
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
system("id");
return 0;
}
Ukuzaji na Ruhusa:
oxdf@hacky$ gcc a.c -o /mnt/nfsshare/a;
oxdf@hacky$ chmod 4755 /mnt/nfsshare/a
bash-4.2$ $ ./a
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
Uchambuzi:
ruid
naeuid
huanza kama 99 (hakuna mtu) na 1000 (frank) mtawalia.setuid
inaweka wote kuwa 1000.system
inatekeleza/bin/bash -c id
kutokana na symlink kutoka sh kwenda bash.bash
, bila-p
, inabadilishaeuid
ili kulingana naruid
, hivyo wote wawili kuwa 99 (hakuna mtu).
Kesi 2: Kutumia setreuid na system
Msimbo wa C:
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setreuid(1000, 1000);
system("id");
return 0;
}
Ukuzaji na Ruhusa:
oxdf@hacky$ gcc b.c -o /mnt/nfsshare/b; chmod 4755 /mnt/nfsshare/b
Utekelezaji na Matokeo:
bash-4.2$ $ ./b
uid=1000(frank) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
Uchambuzi:
setreuid
inaweka ruid na euid kuwa 1000.system
inaita bash, ambayo inadumisha vitambulisho vya mtumiaji kutokana na usawa wao, na kwa hiyo inafanya kazi kama frank.
Kesi ya 3: Kutumia setuid na execve
Lengo: Kuchunguza mwingiliano kati ya setuid na execve.
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
execve("/usr/bin/id", NULL, NULL);
return 0;
}
Utekelezaji na Matokeo:
bash-4.2$ $ ./c
uid=99(nobody) gid=99(nobody) euid=1000(frank) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
Uchambuzi:
ruid
inabaki kuwa 99, lakini euid imewekwa kuwa 1000, kulingana na athari ya setuid.
Mfano wa Msimbo wa C 2 (Kuita Bash):
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
execve("/bin/bash", NULL, NULL);
return 0;
}
Utekelezaji na Matokeo:
bash-4.2$ $ ./d
bash-4.2$ $ id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
Uchambuzi:
- Ingawa
euid
imewekwa kuwa 1000 nasetuid
,bash
inarejesha euid kuwaruid
(99) kutokana na kutokuwepo kwa-p
.
Mfano wa Kanuni ya C 3 (Kutumia bash -p):
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
char *const paramList[10] = {"/bin/bash", "-p", NULL};
setuid(1000);
execve(paramList[0], paramList, NULL);
return 0;
}
Utekelezaji na Matokeo:
bash-4.2$ $ ./e
bash-4.2$ $ id
uid=99(nobody) gid=99(nobody) euid=100
Marejeo
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!
- Je, unafanya kazi katika kampuni ya usalama wa mtandao? Je, ungependa kuona kampuni yako ikionekana katika HackTricks? Au ungependa kupata ufikiaji wa toleo jipya zaidi la PEASS au kupakua HackTricks kwa muundo wa PDF? Angalia MPANGO WA KUJIUNGA!
- Gundua The PEASS Family, mkusanyiko wetu wa kipekee wa NFTs
- Pata swag rasmi ya PEASS & HackTricks
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au nifuatilie kwenye Twitter 🐦@carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwenye repo ya hacktricks na hacktricks-cloud.