FTZ Level 3

BrainInAVet·2021년 8월 8일
0

이번에도 hint 파일이 있어 확인해 보았다.

autodig라는 프로그램의 소스 코드가 나왔다.
코드를 해석해 보니, argc가 2가 아니라면 버전 및 사용법이 표시되고, 그 이외의 경우 dig이라는 명령어를 실행하는 코드이다.
dig은 DNS 정보를 표시하는 명령어이기 때문에 이 문제의 의도와는 별로 상관이 없는 것 같다.

이번에도 find 명령어를 통해 setuid가 걸린 파일을 찾아보는 게 좋겠다.

autodig의 소스 코드가 hint에 나왔으니 autodig이라는 프로그램이 나오는 것도 당연하다.
한 번 실행해 보자.

위에서 말한 것과 같이 버전 정보 및 사용법이 표시되는 것을 볼 수 있다.
hint에서는 동시에 여러 명령어 실행문자열 형태로 명령어를 전송이라는 힌트를 제시했다.

  • 여러 명령어를 실행하는 문자로는 세미콜론(;)이 있다. C언어에서도 함수 및 구문의 끝을 나타내는 문자로 세미콜론을 사용하듯이, 리눅스 쉘에서도 명령어가 끝나는 부분에 세미콜론을 붙임으로서 명령어의 끝을 나타내고, 그 뒤에 다른 명령어를 이어 입력하여 여러 명령어를 실행할 수 있다.

  • 리눅스에서는 쉘이 단순 문자열로 인식하지 않고 다르게 인식하는 문자가 몇 가지 있다. 대표적으로 띄어쓰기가 있는데, 쉘에서 띄어쓰기는 명령어 및 옵션 사이를 구분하는 특수문자로 해석되며, 파일 경로 등에 띄어쓰기가 들어가 있으면 제대로 해석하지 못한다. 이를 해결하기 위해 특수문자가 들어가 있어도 문자열 형태로 묶어줄 수 있는 문자가 있는데, 바로 큰따옴표다. 큰따옴표를 사용하면 쉘은 큰따옴표로 묶인 것들을 모두 문자열로 취급하게 된다.

위 두 가지 방법을 모두 사용해 보자.

autodig 프로그램 자체에 넘어가는 인자는 무엇이 되든 상관없다. 이 문제의 의도와 상관이 없기 때문이다. 프로그램에 setuid가 걸려 있기 때문에 프로그램이 실행되는 동안은 level4의 권한을 사용할 수 있게 되고, 프로그램이 실행되는 동안에 다른 명령어를 실행할 수 있게 하려면 다음과 같이 입력하면 된다.

/bin/autodig "blabla;my-pass"

blabla는 autodig의 작동을 보장하기 위해(버전 및 사용법이 표시되지 않게 하기 위해) 임의로 넣은 문자열이고, 그 뒤에 세미콜론 및 my-pass 명령어를 이어서 입력했다. 예상대로라면, autodig이 blabla라는 인자를 받고 실행되는 동안에 세미콜론으로 이어 붙인 my-pass라는 명령어도 같이 실행될 것이다.

level4의 패스워드가 표시된 것을 볼 수 있다.

0개의 댓글