본문 바로가기

포너블/lob

lob 7번

7번입니다. 먼저 코드를 확인해보겠습니다.

친절하게 주석으로 바뀐 부분을 표시해주었네요. 추가된 부분은 argv[0]의 길이가 77이 아닐경우 오류메세지를 출력하고 종료한다는 내용입니다. argv[0]에는 우리가 코드를 실행하는 부분입니다. 즉 ./cobolt, ./goblin등의 우리가 관리자 권한을 얻고자 하는 파일 이름명이 들어갑니다. 즉 이 부분의 길이를 구해줘야 한다는 것입니다. 그래서 저는 심볼릭 링크란 리눅스 명령어를 사용해주었습니다. 심볼릭 링크에 대해서 설명하자면 윈도우에서 바로가기나 하이퍼링크와 비슷한 것이라고 생각하면 되는데 즉 우리가 원하는 파일명으로 파일을 만드는데 그 파일은 다른 파일을 가리키는 파일입니다. c언어서 포인터와 비슷한 역할이라고 생각하면 될 것 같습니다. 이해가 안 되시는 분들은 나중에 나오는 사진을 보시면 될 것 같습니다.

일단 gdb를 확인하기 위한 복사파일을 만들어 주었습니다.

그리고 gdb에서도 저 코드는 유효하기에 b*63개의 이름을 가진 심볼릭 링크를 만들어주었습니다. 77개가 아니라 63개인 이유는 gdb를 보면서 설명드리겠습니다. 그리고 ls -al 명령어로 보면 b*63이 or을 가리키고 있는 것을 볼 수 있을 것입니다.

이 부분은 많이 본 화면이지만 위 부분에 주목할 필요가 있습니다. 보면  gdb에서 실행할 경우 /home/darkelf/b*63 이렇게 argv[0]에 들어가게 됩니다. 그렇기 때문에 /home/darkelf/ 부분을 계산하여 이 부분과 파일명의 글자수를 다 더하여 77을 맞추어 주어야 하기때문에 63개로 한 것입니다. 다음 부터는 앞의 문제들과 거의 같습니다.

먼저 gdb가 아닌 페이로드에서는 ./만 포함되기때문에 75자의 파일명으로 심볼릭 링크를 생성해주었고, 이렇게 만든 심볼릭 링크로 관리자 권한을 얻었습니다.

그리고 페이로드는 앞 문제와 비슷한 방식으로 실행을 파일명이 아닌 연결된 심볼릭 링크를 실행시켜 비밀번호인 timewalker를 얻었습니다.

'포너블 > lob' 카테고리의 다른 글

lob 9번  (0) 2020.01.08
lob 8번  (0) 2020.01.08
lob 6번  (0) 2020.01.05
lob 5번  (0) 2020.01.05
lob 4번  (0) 2020.01.05