- 아래 프로그램에 임의의 프로그램을 실행시킬수 있는 취약점이 있다. 찾을 수 있냐?
- 이 레벨을 하기위해서는 level00 비밀번호로 level00계정에 로그인해라. 이번 레벨을 위한 파일은 /home/flag01에 있다
소스코드 분석
- gid와 uid변수 설정
- gid, uid변수에 effective uid와 effective gid값을 넣어주고 있음.
- setresgid, setresuid 함수를 통해서 Real , Effective, Saved set UID, GID를 설정해주고 있음.
- 마지막으로 시스템 함수를 사용해서 절대경로로 적혀진 env 명령어를 사용해 상대경로로 적혀진 echo명령어를 통해
and now what? 을 출력하고있음.
# Real UID GID는 현재 사용자의 기본적인 UID와 GID를 의미
# Effective UID GID는 실행하려는 프로그램의 소유주ID와 그룹ID를 의미
# Saved set UID GID는 Setuid혹은 Setgid가 설정된 파일에 접근할 때 EUID가 사용되게되는데, 이때 파일을 실행한 소
유주의 Real ID의 권한으로 파일을 생성하고싶을때, EUID를 보관하기위한 저장소로 쓰임.
- level01에 입장.
- /home/flag01 디렉터리에 들어가 파일 확인,.
- setuid가 설정되어있는 flag01파일을 발견.
- 문제설명대로 flag01파일은 setuid가 설정되어있음.
- setuid 설정되어있으면 user필드에 s혹은 S가 설정되며, 해당 프로그램 실행시, 해당파일의 소유자의 권한으로 실행됨.
- 소스코드의 시스템함수부분에 나와있는 env에 대한 정보
- env 파일은 시스템 환경설정에 관한 내용을 출력하기도 하지만, 인자로 명령어를 주면 명령어를 실행해주는 역할도 함.
- 문제에 나와있는 시스템함수안의 커맨드를 입력해보면 echo명령어를 통한 문자열이 그대로 출력됨.
- 주의깊게 봐야하는 곳은 PATH환경변수. PATH환경변수는 파일을 전역범위에서 사용하기위한 변수임
- 어느디렉터리에서든 python을 실행하면 파이썬이 실행되는 것과 같은 전역적인 경로를 설정하는 것.
- 각 경로들은 : 로 구분되며, 왼쪽에 있을수록 경로에 대한 우선순위가 높음.
- 즉, 같은 echo라는 커맨드가 /usr/local/sbin에도있고 /usr/local/bin에도 있으면 /usr/local/sbin에서 실행됨 ㅇㅇ
- level01의 소스코드 설명에서 env는 절대경로로 적혀있어 환경변수 PATH에 영향을 받지 않지만, echo명령어는 상대경
로로 적혀져있기 때문에, 환경변수 PATH의 경로에 영향을 받게됨.. <- 즉, 프로그램 호출시 상대경로 사용이것이 취약
점임
- 상대경로로 적혀진 echo명령어 때문에 취약점이 발생. 따라서 env파일의 PATH환경변수의 경로의 맨왼쪽에 현재 위치
를 등록한 후, 해당 위치에서 동일하게 echo파일을만들어 기존의 echo명령어가 위치한 경로의 우선순위보다 높게만들
어서 제작한 echo파일을 실행시켜줄 수 있음.
- 현재 사용자 디렉터리에서 셸 스크립트 작성. echo명령어를 실행하면 Shell이 실행되도록 작성
- echo 파일은 setuid가 설정되어 flag01권한으로 실행되는 flag01파일로부터 실행되기 때문에 권한을 바꾸어줘야함
- 편의상 777로 모든권한을 주어 권한변경.
- 또한 앞서 말헀지만, PATH환경변수에 현재경로를 기존의 echo명령어가 실행되는 경로보다 우선순위를 높게 설정하여
제작한 echo파일이 실행되도록 만들어야함.
- 환경변수 제일 왼쪽에 현재경로를 등록하여 우선순위를 제일 높게만들어줌.
- 밑줄친 PATH환경변수를 보면 현재 디렉터리가 환경변수에 등록되어 우선순위가 제일 높아진것을 확인할 수 있음.
- setuid가 설정된 flag01파일을 실행하여 flag01권한으로 Shell을 획득하여 해당 스테이지 클리어.
'SystemHacking > Nebula' 카테고리의 다른 글
[Nebula] Level05 (0) | 2022.01.29 |
---|---|
[Nebula] Level04 (0) | 2022.01.24 |
[Nebula] Level03 (0) | 2022.01.23 |
[Nebula] Level02 (0) | 2022.01.23 |
[Nebula] Level00 (0) | 2022.01.22 |