euid, ruid, suid
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
μ¬μ©μ μλ³ λ³μ
ruid: μ€μ μ¬μ©μ IDλ νλ‘μΈμ€λ₯Ό μμν μ¬μ©μλ₯Ό λνλ λλ€.euid: μ ν¨ μ¬μ©μ IDλ‘ μλ €μ Έ μμΌλ©°, μμ€ν μ΄ νλ‘μΈμ€ κΆνμ νμΈνλ λ° μ¬μ©νλ μ¬μ©μ μ μμ λνλ λλ€. μΌλ°μ μΌλ‘euidλruidμ μΌμΉνμ§λ§, SetUID λ°μ΄λ리 μ€νκ³Ό κ°μ κ²½μ°μλeuidκ° νμΌ μμ μμ μ μμ μ·¨νμ¬ νΉμ μμ κΆνμ λΆμ¬ν©λλ€.suid: μ΄ μ μ₯λ μ¬μ©μ IDλ λμ κΆνμ νλ‘μΈμ€(μΌλ°μ μΌλ‘ rootλ‘ μ€ν)κ° νΉμ μμ μ μννκΈ° μν΄ μΌμμ μΌλ‘ κΆνμ ν¬κΈ°ν΄μΌ ν λ μ€μνλ©°, μ΄ν λ€μ μ΄κΈ° μμΉλ μνλ₯Ό ν볡ν©λλ€.
μ€μ μ°Έκ³ μ¬ν
rootλ‘ μ€νλμ§ μλ νλ‘μΈμ€λ νμ¬ ruid, euid λλ suidμ μΌμΉνλλ‘ euidλ₯Ό μμ ν μ μμ΅λλ€.
set*uid ν¨μ μ΄ν΄νκΈ°
setuid: μ΄κΈ° κ°μ κ³Όλ λ¬λ¦¬,setuidλ μ£Όλ‘ruidκ° μλeuidλ₯Ό μμ ν©λλ€. νΉν, κΆνμ΄ μλ νλ‘μΈμ€μ κ²½μ°, μ§μ λ μ¬μ©μ(μ’ μ’ root)μ ν¨κ»ruid,euid,suidλ₯Ό μ λ ¬νμ¬ μ΄λ¬ν IDλ₯Ό κ°νν©λλ€. μμΈν λ΄μ©μ setuid man pageμμ νμΈν μ μμ΅λλ€.setreuidλ°setresuid: μ΄λ¬ν ν¨μλruid,euid,suidμ λ―ΈμΈ μ‘°μ μ νμ©ν©λλ€. κ·Έλ¬λ κ·Έ κΈ°λ₯μ νλ‘μΈμ€μ κΆν μμ€μ λ°λΌ λ¬λΌμ§λλ€. λΉ-root νλ‘μΈμ€μ κ²½μ°, μμ μ νμ¬ruid,euid,suidμ κ°μΌλ‘ μ νλ©λλ€. λ°λ©΄, root νλ‘μΈμ€λCAP_SETUIDκΆνμ΄ μλ νλ‘μΈμ€λ μ΄λ¬ν IDμ μμμ κ°μ ν λΉν μ μμ΅λλ€. λ λ§μ μ 보λ setresuid man pageμ setreuid man pageμμ νμΈν μ μμ΅λλ€.
μ΄λ¬ν κΈ°λ₯μ 보μ λ©μ»€λμ¦μ΄ μλλΌ νλ‘κ·Έλ¨μ΄ λ€λ₯Έ μ¬μ©μμ μ μμ μ±ννκΈ° μν΄ μ ν¨ μ¬μ©μ IDλ₯Ό λ³κ²½νλ κ²κ³Ό κ°μ μλλ μμ νλ¦μ μ΄μ§νκΈ° μν΄ μ€κ³λμμ΅λλ€.
νΉν, setuidλ rootλ‘μ κΆν μμΉμ μν μΌλ°μ μΈ λ°©λ²μΌ μ μμ§λ§(λͺ¨λ IDλ₯Ό rootλ‘ μ λ ¬νλ―λ‘), μ΄λ¬ν ν¨μ κ°μ μ°¨μ΄λ₯Ό μ΄ν΄νκ³ λ€μν μλ리μ€μμ μ¬μ©μ ID λμμ μ‘°μνλ κ²μ΄ μ€μν©λλ€.
리λ μ€μμ νλ‘κ·Έλ¨ μ€ν λ©μ»€λμ¦
execve μμ€ν
νΈμΆ
- κΈ°λ₯:
execveλ 첫 λ²μ§Έ μΈμμ μν΄ κ²°μ λ νλ‘κ·Έλ¨μ μμν©λλ€. λ κ°μ λ°°μ΄ μΈμ, μΈμμ©argvμ νκ²½μ©envpλ₯Ό μ¬μ©ν©λλ€. - λμ: νΈμΆμμ λ©λͺ¨λ¦¬ 곡κ°μ μ μ§νμ§λ§ μ€ν, ν λ° λ°μ΄ν° μΈκ·Έλ¨ΌνΈλ₯Ό μλ‘ κ³ μΉ©λλ€. νλ‘κ·Έλ¨μ μ½λλ μ νλ‘κ·Έλ¨μΌλ‘ λ체λ©λλ€.
- μ¬μ©μ ID 보쑴:
ruid,euidλ° μΆκ° κ·Έλ£Ή IDλ λ³κ²½λμ§ μμ΅λλ€.- μ νλ‘κ·Έλ¨μ SetUID λΉνΈκ° μ€μ λ κ²½μ°
euidμ λ―ΈμΈν λ³νκ° μμ μ μμ΅λλ€. - μ€ν ν
suidλeuidμμ μ λ°μ΄νΈλ©λλ€. - λ¬Έμ: μμΈν μ 보λ
execveman pageμμ νμΈν μ μμ΅λλ€.
system ν¨μ
- κΈ°λ₯:
execveμ λ¬λ¦¬systemμforkλ₯Ό μ¬μ©νμ¬ μμ νλ‘μΈμ€λ₯Ό μμ±νκ³ ν΄λΉ μμ νλ‘μΈμ€ λ΄μμ λͺ λ Ήμ μ€νν©λλ€. - λͺ
λ Ή μ€ν:
shλ₯Ό ν΅ν΄ λͺ λ Ήμ μ€ννλ©°,execl("/bin/sh", "sh", "-c", command, (char *) NULL);λ₯Ό μ¬μ©ν©λλ€. - λμ:
execlμexecveμ ν ννλ‘, μλ‘μ΄ μμ νλ‘μΈμ€μ λ§₯λ½μμ μ μ¬νκ² μλν©λλ€. - λ¬Έμ: μΆκ° μ 보λ
systemman pageμμ νμΈν μ μμ΅λλ€.
SUIDμ ν¨κ»νλ bash λ° shμ λμ
bash:euidμruidμ μ²λ¦¬ λ°©μμ μν₯μ λ―ΈμΉλ-pμ΅μ μ΄ μμ΅λλ€.-pκ° μμΌλ©΄,bashλeuidκ°ruidμ λ€λ₯Ό κ²½μ°euidλ₯Όruidλ‘ μ€μ ν©λλ€.-pκ° μμΌλ©΄, μ΄κΈ°euidκ° λ³΄μ‘΄λ©λλ€.- λ λ§μ μΈλΆμ 보λ
bashman pageμμ νμΈν μ μμ΅λλ€. sh:bashμ-pμ μ μ¬ν λ©μ»€λμ¦μ΄ μμ΅λλ€.- μ¬μ©μ IDμ κ΄λ ¨λ λμμ λͺ
μμ μΌλ‘ μΈκΈλμ§ μμΌλ©°,
-iμ΅μ νμμeuidμruidμ λλ±μ±μ κ°μ‘°ν©λλ€. - μΆκ° μ 보λ
shman pageμμ νμΈν μ μμ΅λλ€.
μ΄λ¬ν λ©μ»€λμ¦μ μλ λ°©μμ΄ λ€λ₯΄λ©°, νλ‘κ·Έλ¨μ μ€ννκ³ μ ννλ λ° λ€μν μ΅μ μ μ 곡νλ©°, μ¬μ©μ IDκ° κ΄λ¦¬λκ³ λ³΄μ‘΄λλ λ°©μμ νΉμ ν λμμ€κ° μμ΅λλ€.
μ€νμμ μ¬μ©μ ID λμ ν μ€νΈ
μμ λ https://0xdf.gitlab.io/2022/05/31/setuid-rabbithole.html#testing-on-jailμμ κ°μ ΈμμΌλ©°, μΆκ° μ 보λ₯Ό νμΈνμΈμ.
μ¬λ‘ 1: systemκ³Ό ν¨κ» setuid μ¬μ©
λͺ©ν: systemκ³Ό bashλ₯Ό shλ‘ μ‘°ν©νμ λ setuidμ ν¨κ³Όλ₯Ό μ΄ν΄ν©λλ€.
C μ½λ:
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
system("id");
return 0;
}
μ»΄νμΌ λ° κΆν:
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
λΆμ:
ruidμeuidλ κ°κ° 99 (nobody)μ 1000 (frank)λ‘ μμν©λλ€.setuidλ λ λ€ 1000μΌλ‘ λ§μΆ₯λλ€.systemμ shμμ bashλ‘μ μ¬λ³Όλ¦ λ§ν¬λ‘ μΈν΄/bin/bash -c idλ₯Ό μ€νν©λλ€.bashλ-pμμ΄euidλ₯Όruidμ μΌμΉμν€λ―λ‘ λ λ€ 99 (nobody)κ° λ©λλ€.
μΌμ΄μ€ 2: systemκ³Ό ν¨κ» setreuid μ¬μ©
C μ½λ:
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setreuid(1000, 1000);
system("id");
return 0;
}
μ»΄νμΌ λ° κΆν:
oxdf@hacky$ gcc b.c -o /mnt/nfsshare/b; chmod 4755 /mnt/nfsshare/b
μ€ν λ° κ²°κ³Ό:
bash-4.2$ $ ./b
uid=1000(frank) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
λΆμ:
setreuidλ ruidμ euidλ₯Ό λͺ¨λ 1000μΌλ‘ μ€μ ν©λλ€.systemμ bashλ₯Ό νΈμΆνλ©°, μ¬μ©μ IDμ λλ±μ±μΌλ‘ μΈν΄ μ΄λ₯Ό μ μ§νμ¬ μ¬μ€μ frankλ‘ μλν©λλ€.
μ¬λ‘ 3: execveμ ν¨κ» setuid μ¬μ©
λͺ©ν: setuidμ execve κ°μ μνΈμμ© νμ.
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
execve("/usr/bin/id", NULL, NULL);
return 0;
}
μ€ν λ° κ²°κ³Ό:
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
λΆμ:
ruidλ 99λ‘ μ μ§λμ§λ§, euidλ setuidμ ν¨κ³Όμ λ°λΌ 1000μΌλ‘ μ€μ λ©λλ€.
C μ½λ μμ 2 (Bash νΈμΆ):
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
int main(void) {
setuid(1000);
execve("/bin/bash", NULL, NULL);
return 0;
}
μ€ν λ° κ²°κ³Ό:
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
λΆμ:
euidκ°setuidμ μν΄ 1000μΌλ‘ μ€μ λμμ§λ§,bashλ-pκ° μκΈ° λλ¬Έμruid(99)λ‘euidλ₯Ό μ¬μ€μ ν©λλ€.
C μ½λ μμ 3 (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;
}
μ€ν λ° κ²°κ³Ό:
bash-4.2$ $ ./e
bash-4.2$ $ id
uid=99(nobody) gid=99(nobody) euid=100
References
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


