독개

권한상승

by #독개#

리눅스 특수권한

1) SetUID (권한수치: 4000)

   - 소유자의 권한이 있어야만 실행 할 수 있는 파일의 경우, 그 권한을 일시적으로 파일을 실행하는 일반 사용자에게 부여

   - (ex : /usr/bin/passwd)

2) SetGUI (권한수치: 2000)

   - 소유그룹의 권한이 있어야만 실행 할 수 있는 파일의 경우, 그 권한을 일시적으로 파일을 실행하는 일반 사용자에게 부여

3) Sticky Bit (권한수치: 1000)

   - 공유 디렉토리로 사용하고자 할 때 사용 (ex : /tmp)

   - Sticky Bit가 설정된 디렉토리에 파일을 생성하면 오직 소유자와 root에게만 해당 파일에 대한 삭제 및 변경의 권한이 있다.






 -특수 권한 파일검색





프로세스 권한

1) RUID (Real user ID) : 프로세스를 실행하는 실행전 사용자의 UID

2) EUID (Effective user ID) : 프로세스를 실행할 자격이 있는지 여부볼때 체크하는 권한

3) SUID (Saved user ID) : 변경 전의 EUID는 SUID에 저장됨 이후 복구될때 SUID->EUID


실행원리

▣ /etc/passwd 이용 <- setuid가 root로 걸려있음.

    - setuid는 EUID 값만을 변경(잠시빌림)

    - passwd 실행 중 root의 권한으로 다른 일을 실행시킬 수 있음


예전에는 EUID만 0(root) 이어도 root권한의 bash 쉘을 열수가 있엇다.

그런데 이제는 보안패치가 되어서, EUID & RUID가 모두 0(root)이어야 root권한의 bash쉘을 열수가 있다.

그래서 setuid로 EUID : 0으로 만든 상태에서 내부명령어(syscall)을 사용하여 RUID : 0 으로 만들어준 상태에서 bash 쉘을 열어준다.

간략히 말하면 그냥 setuid 설정 파일안에 ruid = 0 으로 한번 바꿔주고 쉘떨어트려라 라는뜻


권한변경 syscall

1. setuid : 프로세스의 ruid, euid, suid를 변경.

 ex) setuid(500);

☞ 단 호출자가 root가 아닌 경우 대부분 ruid, euid 둘 다 바뀌지 않음.

☞ root가 아닌 일반계정 주제에 어떻게 권한을 줄 수 있겠니.... 라고 생각하자


2. seteuid : 프로세스의 euid를 변경.

ex) seteuid(500);


3. setreuid : 프로세스의 ruid, euid를 변경.

ex) setreuid(500, 500);

☞ setuid와 다른 점은 suid를 변경하지 않는다는 것.


4. getuid : 프로세스의 Real UID를 반환.

ex) int uid = getuid(); 


5. geteuid : 프로세스의 Effective UID를 반환.

ex) int euid = geteuid();


#include <stdio.h>

int main()

{

setuid(0);

system("/bin/bash");

}


'🧛‍♂️ 해킹 > 시스템해킹' 카테고리의 다른 글

가상메모리, 커널영역, 유저영역, 시스템콜함수  (0) 2020.06.25
쉘코드 제작  (0) 2020.06.24
쉘코드  (0) 2020.06.23
백도어 ,백도어 탐지, 백도어숨기기  (0) 2020.06.22
패스워드 크래킹  (0) 2020.06.21

블로그의 정보

독한 개발자

#독개#

활동하기