드디어 마지막 문제입니다.attackme의 소스코드를 보면 배열의 크기를 80으로 선언하였지만 79바이트로 입력을 제한하였으므로 오버플로우가 불가합니다.그러나 printf()애서 발생하는 포맷 스트링 버그로 리턴 값을 덮을 수 있습니다. -------------------------포맷 스트링 ? 포맷 스트링 익스플로잇은 프로그램을 충돌시키거나 악의적인 코드를 실행 시키는데 사용될 수 있다. 문제는 포맷팅을 수행하는 printf() 같은 특정한 C 함수들에서 검사되지 않은 사용자 입력을 포맷 스트링 파라미터로 사용하는 것으로부터 나온다. 악의적인 사용자는 %s와 %x 포맷 토큰들을 콜 스택 또는 메모리의 가능한 다른 위치의 데이터를 보이게 하는 데 사용할 수 있다. 또한 %n 포맷 토큰을 사용해서 임의적..
ftz 풀이
attackme의 코드를 읽어봅시다.함수 포인터와 fgets함수가 사용되었는데 이는 버퍼오버플로우를 이용해 main함수의 리턴 값(call함수의 함수포인터를 초기화)을 shell함수의 시작주소로 바꿔라 라는 의미입니다. 메인함수를 살펴보면 함수 포인터 선언부분이 ebp-16인데 fgets함수에서 56바이트만큼 입력받습니다. 그러므로 40바이트는 쓰레기 값을 주고 나머지 16바이트에 0x8048500대신 shell함수의 시작주소를 넣어주면 됩니다. shell함수의 시작주소를 얻었습니다. (python -c 'print "\x90"*40+"\xd0\x84\x04\x08"'; cat)|./attackme 끝!
ls로 디렉토리 안을 확인한 후 hint파일 내용을 확인해봅시다. 백도어의 개념을 알았으니 백도어 파일을 확인해보러 갑시다. cd 명령어를 통해 /etc/xinetd.d/ 로 이동한 후 ls 명령어를 보니 backdoor파일이 있는 것을 확인하실 수 있습니다. cat명령어로 backdoor파일의 안을 확인해보니 user권한이 level5 이고 백도어 서비스를 실행할 데몬 프로그램의 위치는 /home/level4/tmp/backdoor 이라네요. /home/level4/tmp로 이동한 후 backdoor파일이 있는지 확인해줍니다. 없으니 만들어줘야겠죠.. 간단하게 명령어 my-pass만 실행시키는 코드를 짠 후 gcc명령어를 통해 backdoor 이라는 실행파일을 만들어줍니다. 그 후 finger(계정정보..
ls로 디렉토리를 확인해보니 [hint]라는 파일이 존재합니다. cat명령어로 hint파일을 확인해보니 "텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데 ... "라고 뜹니다.Vi 에디터를 얘기하는 듯 합니다. level 1과 마찬가지로 setuid가 걸린 level3권한의 파일을 찾아줍니다. editor는 디렉토리가 아닌 듯 하네요. /usr/bin 디렉토리로 이동해서 editor파일이 있는지 확인합니다. editor을 실행시켜줍니다. Vim 편집기가 뜨네요.명령어 모드로 전환하기 위해 [esc] 를 눌러줍니다. vim 편집기는 외부명령도 편집기 내에서 할 수 있게 하는 명령어가 존재합니다. :! 를 친 후 bash를 입력해주면 외부명령으로 인식되며 level3의 권한을 얻게 됩니다. level..