반응형
Level12 풀이.
pw = 'it is like this'
일단 문제 접근을 위해 hint를 본다.
/home/level12라는 폴더에 attackme라는 파일이 존재하고, SETUID가 걸려 있다.
gets 함수를 이용해서 버퍼 경계를 확인하지 않고, 사용하기 때문에 BOF 발생.
gets랑 strcpy랑 느낌이 비슷. gets 함수가 나왔으니 분석해보겠다.
1번째 char[256]; = 256의 크기를 가지는 배열을 str이라는 이름을 붙여 선언.
2번째 setreuid(3093,3093); 흠... 3093을 사용해서 다음 level의 hint를 찾는 거 같다.
3번째 printf는 생략.
4번째 gets(str); = 키보드로 입력하는 것을 str에 저장.
5번째 printf( ~, str) = 출력.
gdb를 이용해서 버퍼 크기를 확인해봤다.
일단 main+0,main+1,main+3을 확인.
0x108만큼 공간을 할당해주는데 0x108는 10진수로 264.
264byte + SFP(4byte) = 268byte를 dummy로 채워주고, RET를 쉘 코드 주소로 보내면 된다.
쉘 코드 작성.
보면 export 명령으로 환경 변수를 등록.
그러면 이런 식으로 쉘 코드 주소가 등장.
getenv로 쉘 코드 주소 작성.
위의 이미지처럼 등장했다.
cf) gets, getenv, 쉘 코드 작성이 숙달되어야 할 듯.
반응형