OverTheWire Behemoth 

[ level2 -> level3 ]




베히모스 lv2입니다. 실행 시켜보니 touch 명령어로 2520이라는 이름의 파일을 만들며, sleep을 긴 시간 넣어 둔 것 같습니다. 실행을 멈추고 gdb로 disassemble 해보도록 합시다. 



sprintf 부분에서 buffer에 "touch %d"를 넣어주고 있습니다. %d의 값으로는 getpid로 가져 온 pid 값을 집어 넣어 주고 있습니다.

두 번째 박스에서는 system 함수로 아까 저장한 buffer의 내용을 실행시켜줍니다. 즉, "touch PID"를 실행 시키는거죠.

여기서 touch 명령어는 절대 경로가 아닌 'PATH' 환경변수에 지정된 경로에 존재하는 touch 바이너리를 실행시키는 것입니다. 따라서 PATH의 값을 바꿔준다면 이 touch를 이용해서 다른 행위를 할 수 있을 것입니다.



env 명령어를 이용해 환경변수를 확인 해 본 결과입니다. 원하는 경로에 touch 명령어를 생성해주고, 이 명령어를 통해 다음 레벨로 갈 수 있는 패스워드를 알아내는 쉘스크립트를 작성한 후 PATH의 값을 변경해주면 다음 레벨의 패스워드를 알아 낼 수 있을 것 같습니다.



환경변수는 앞에 있는 값부터 확인 하기 때문에 += 연산이 아닌 =연산으로 모두 뜯어고칠 예정이므로, cat 명령어도 절대경로로 지정해주었습니다.



export명령어를 이용하여 PATH의 값을 우리가 만들어준 touch 명령어가 있는 경로로 바꿔주고, behemoth2 바이너리를 실행시키면 다음 레벨로 갈 수 있는 패스워드를 알아 낼 수 있습니다.



[ * ] Specially thanks to Zairo!

+ Recent posts