- 아래 프로그램에는 임의의 프로그램을 실행시킬수 있는 취약점이 있다. 찾을수 있냐?
- 이 레벨을 하기위해서는 level02패스워드로 level02에 로그인해라. 이파일을 위한 파일은 /home/flag02에서 찾을수
있다.
소스 코드 분석
- 포인터는 잘 기억이 안나지만, 몰라도 풀수있는 문제인거같음
- gid uid변수에 활성화된 Effective uid, gid를 대입하였음
- asprintf 함수로 USER 환경변수의 값을 가져와 %s에 담은 문자열 "/bin/echo 받아온값" 를 buffer 변수에 담고 있음.
- 그 다음, "about to call"과 실행될 명령어가 문자열로 출력되며
- 마지막으로 system()함수의 인자로 문자열 buffer 값을 넣어주고 있음.
- level02에 로긴
- 문제 설명대로 /home/flag02를 확인해보니, flag02라는 실행파일이 존재함
- flag02 실행파일은 SetUID가 설정되어 있어, 실행될떄 flag02권한으로 실행된다는 것을 알 수 있음.
- 일단 그냥 flag02파일을 실행
- 소스코드에서 나왔던대로 실행될 명령어가 문자열 형태로 출력되고있고,
system("/bin/echo USER값 is cool")함수로 인해 "level02 is cool"이라는 문자열이 출력되고있음.
해결책은 level01과 비슷함
- 환경변수 USER값에 ";/bin.bash;" 대입
- 이부분이 취약점. 외부 데이터 사용 간 필터링 부재
USER=";/bin/bash;"
# 세미콜론 ; 는 명령어를 구분해주는 구분자역할을 함
# 명령어1;명령어2;명령어3 형태로 여러개의 명령어를 하나의 커맨드로 실행시킬수 있게됨.
- 즉, 예상되는 값은 이렇게 될것임.
about to call system("/bin/echo ;/bin/bash; is cool")이 출력될 것이며
system("/bin/echo ;/bin/bash; is cool") 함수가 실행될 것이라 예상.
- 환경변수 USER를 변경하고 flag02파일 실행.
- 예상대로 about to call system("/bin/echo ;/bin/bash; is cool")이 출력됨
- 또한 system("/bin/echo ;/bin/bash; is cool")명령어가 실행된것을 확인할 수 있음.
아래 빨간박스를 잘봐야함
1. 첫번째 빨간박스에는 첫번째 커맨드인 "/bin/echo 공백" 이라는 명령어가 실행되었으므로, 빈칸이 생긴것
2. 두번째 빨간박스에는 두번쨰 커맨드인 "/bin/bash"이라는 명령어가 실행되었으므로, 실행한 flag02파일은
SetUID가 설정되어있어 flag02권한 으로 Shell이 실행됬고 level02 클리어함 ㅇㅇ.
3. 마지막 빨간박스에는 세번째 커맨드인 "is cool"이라는 명령어가 실행되었지만, is 라는 명령어는 없기 때문에 오류가
출력된 것임.
'SystemHacking > Nebula' 카테고리의 다른 글
[Nebula] Level05 (0) | 2022.01.29 |
---|---|
[Nebula] Level04 (0) | 2022.01.24 |
[Nebula] Level03 (0) | 2022.01.23 |
[Nebula] Level01 (0) | 2022.01.22 |
[Nebula] Level00 (0) | 2022.01.22 |