Study/System Hacking
[LOB] gremlin -> cobolt
haesa_s
2021. 1. 27. 22:20
오늘은 cobolt로 가는 password를 찾아보겠다.
ls 명령어로 cobolt.c 파일이 있는 것을 봤고, cobolt.c 파일 내용을 출력해봤다. strcpy 함수가 사용됐고 buffer의 크기는 16바이트다. strcpy 함수 때문에 버퍼 오버플로우가 발생할 수 있다는 것은 이전 레벨과 동일하지만, buffer의 크기가 16바이트이기 때문에 쉘코드를 넣을 수 없다. 대신에 환경변수를 사용해서 해결할 수 있다.
먼저 쉘코드를 값으로 갖는 환경변수를 만들어야 한다. 나는 SHELLCODE 환경변수를 만들었다. 이때 환경변수의 주소가 조금씩 바뀔 수 있는 것을 고려해 쉘코드 앞에 nop sled를 붙였다.
그리고 환경변수의 주소를 얻어야 한다. getenv 함수로 환경변수의 주소를 얻을 수 있다. 나는 주소값으로 0xbffffe01를 얻었다.
이제 이 주소값을 리턴 주소에 덮어씌우면 된다. 그전에 cobolt.c의 스택 구조를 확인하겠다.
<main+3>을 보면 스택을 0x10만큼 확장했다. 0x10은 16이므로 더미없이 16바이트 그대로 메모리가 할당된 것을 확인했다.
이젠 공격코드를 구성할 수 있게 됐다. 구성한 공격코드는 다음과 같다. "\x90"*20+"\x01\xfe\xff\xbf" 이제 공격을 시도해보겠다.
쉘코드가 성공적으로 실행됐다. 다음 레벨로 가는 password는 hacking exposed다.