hint
이전에 환경변수로 푼 것과 동일하게 풀면 된다.
다만, 쉘코드를 삽입할 때 "setreuid(geteuid(), geteuid()) 까지 포함시킨 쉘 코드" 를 찾아서 넣어야 한다.
문제 풀이는 이전 것과 같으므로 생략하고..
리눅스 Permission
$ id
사용자 정보, uid, gid, 소속 그룹 확인
$ whoami
사용자 아이디 출력. current effective user id
ruid
- Real User ID
- uid에 따른 읽기, 쓰기, 실행 권한을 설정함으로써 프로세스에 대해 소유자별로 권한을 줄 수 있으며
- 이 값은 변하지 않는다.
euid
- Effective User ID
- setuid 권한이 설정된 실행 파일에 의해 변경된다.
- 일시적으로 다른 계정의 uid를 저장해서 사용할 수 있도록 해준다. 즉, 일시적으로 파일 소유자의 권한을 얻게 되는 것.
- 예를 들어, ping이나 passwd같은 경우, 실행을 위해 root 권한이 필요하지만, 일반 사용자 모두에게 root권한을 줄 수 없다. 때문에 해당 프로그램이 실행될 때, root 권한이 되도록 실행되는 순간에만 euid로 root권한을 준다.
setreuid(geteuid(), geteuid())
int setreuid(uid_t ruid, uid_t euid)
리눅스 시스템에서는 setreuid 함수를 제공하여 ruid와 euid를 설정할 수 있다.
geteuid
현재 프로세스의 euid
왜 setreuid(geteuid(), geteuid())가 포함된 쉘 코드로 풀어야 하는가?
1. ls -al을 통해 attackme의 소유주를 보면 level20임을 알 수 있다. 즉, euid가 level20이다.
2. 하지만 ruid는 level19이다.
3. setreuid(geteuid(), geteuid()) 를 해줘야 ruid도 level20으로 바꾼다.
4. ruid와 euid가 같지 않으면 쉘은 euid를 ruid로 바꿔버린다. -> 만약 setreuid 코드가 없다면 쉘을 실행시켰을 때 euid도 level19로 돌아오겠징??
5. ruid와 euid가 모두 level20이면 level20 권한으로 쉘이 실행된다.
리눅스 권한/ permission
setreuid 함수에 대해서(Real UID/Effective UID)
Effective UID, Real UID & Effective GID, Real GID ■ setreuid() 함수 # export LANG=C # man setreuid UID(User Identification)/EUID(Effective UID) GID(Group Identification)/EGID(Effective GID) Real U..
htst.tistory.com
'워게임 > FTZ' 카테고리의 다른 글
FTZ - level20 (0) | 2021.07.28 |
---|---|
FTZ - level18 (0) | 2021.07.26 |
FTZ - level17 (0) | 2021.07.26 |
FTZ - level16 (0) | 2021.07.26 |
FTZ - level15 (0) | 2021.07.24 |
댓글