Wargame & CTF/FTZ

[FTZ] Level11 Write-up

cg10036 2019. 5. 30. 23:33

저렇게 생겼다. 일단 argv[1]을 str로 복사한다고 한다.

복사할때 취약점이 있는 strcpy를 사용하므로 버퍼오버플로우를 할 수 있다.

 

STR을 쭉 넘겨서 RET값을 쉘코드가 있는 주소값으로 덮어씌우면 그쪽으로 점프가 되고, 쉘이 뜰것이다.

 

이런식으로 쉘코드를 EXPORT해준다. 앞에 \x90값을 100개 채운 이유는 저 근처 주소만 줘도 쭉 썰매타듯이 쉘코드로 내려가서 실행할 수 있기 때문이다.

그리고 gdb로 뜯어서 메인을 디스에셈블 해보자.

 

분명히 str을 256 할당했지만 0x108, 264가 할당되었다. gcc가 버젼이 높아지면서 dummy가 붙는다고 한다.

RET에 메모리 주소를 넣으려면 str+sfp를 덮어씌우고 메모리 주소를 넣으면 될것이다.

264 + 4 = 268

아까 EGG를 export 해줬으니 그 주소값을 보자.

 

getegg 주소값을 볼때는 tmp폴더에서 나와서 보자. 어떤 디렉토리에 있느냐에 따라서 주소값이 바뀐다.

 

주소를 넣을때는 \x34\xfc\xff\xbf 같은 형식으로 넣어주어야 하는데 이는 인텔CPU는 리틀엔디안 방식을 사용하기 때문이다.

 

Level12 : it is like this