최대 1 분 소요

아래 그림은 해당 문제 쉘 접속 후 ls -al 명령어로 살펴본 모습이다 image 자세히 살펴보면 fd 파일이 setuid flag가 활성화 된것을 볼 수 있다.
fd 파일은 fd_pwn user이며 fd 그룹에 속한다.
그럼 나는 어디 속하나 살펴본 것이 아래 그림과 같다.
image
지금 접속된 쉘이 fd와 같은 그룹인 것을 알 수 있고 fd는 그룹 권한에서 setuid 플래그가 활성화 된 것을 볼 수 있다.
fd.c 소스코드를 살펴보면 아래와 같다.
image
조건문으로 “/bin/cat flag”가 되어 있다. 위에서 보면 알 수 있듯이 flag는 root 권한만이 읽을 수 있다.
read 함수를 이용해서 읽어드린 문자열이 “LETMEWIN”과 일치하면 해당 조건문으로 들어가게 되는데 따로 인풋 파일이랄게 없어 보이니 사용자의 입력값을 넣어주면 될 거 같은 느낌이 온다.

  • 결론적으로 setuid flag가 활성화 된 fd를 실행할 때 인자를 잘 넘겨줘서 조건문에 들어가게 만들어 flag를 읽어드리는 것이다.

아래 그림은 0x1234를 바꿔본 것이다.
image
stdin의 fd가 0이기 때문에 첫 번째 인자로 4660을 넣어주면 int fd = 0이 되기 때문에 buf에 나의 임의대로 값을 넣어줄 수 있게 된다.
image
위의 그림이 exploit을 성공한 결과물이다.

이번 문제에서 중요하게 봐야할 것은 권한이라고 생각한다. 전반적인 권한체계에 대한 이해와 setuid 플래그에 대한 이해가 없으면 풀 수 없는 문제이다.

참고 link

setuid : http://eunguru.tistory.com/115

댓글남기기