level 12

2020. 9. 1. 12:44

 

main 함수에 인자로 'void'가 들어갔다는 것은 아무것도 받지 않겠다는 뜻이죠.

그 외에 gets 함수 빼고는 level11과 똑같은 문제네요.

다른 점은 main 함수의 '인자'가 아닌 '변수'로 값을 받는다는 거겠죠?

 

그렇다면 여기서는 확실히 환경변수를 이용해야겠네요.

전에 말했다시피 ASLR로 인해 main 함수의 주소가 변하기 때문이에요!!

 

전에도 썼던 쉘코드를 사용하겠습니다.

\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

출처 - https://xerxes-break.tistory.com/212

 

유용한 쉘코드(x86 Shellcode 로컬)

0x01. 가장 기본적으로 쉘을 띄우는 코드 \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 bytes : 25 미포함 : setreuid(), exit() 0x02. 쉘을 종료할..

xerxes-break.tistory.com

 

egg 환경변수에 쉘코드를 등록시키겠습니다.

 

egg 환경변수의 주소를 가져오는 C 소스코드를 짜겠습니다.

컴파일 해준 뒤 egg를 인자로 던져주니 주소가 0xbfffff1b라고 나왔네요.

 

이제 이 곳으로 ret을 덮어주겠습니다.

그 전에 dummy가 있는지 확인해야하니 attackme 파일을 tmp 디렉터리에 복사한 뒤, gdb를 통해 디버깅 해보겠습니다.

 

원래 크기인 256바이트가 아닌 264바이트를 할당한 것을 보니 dummy의 값은 8바이트군요.

그렇다면, 268바이트 (str + dummy + SFP) + 4바이트(RET)의 구성으로 값을 주면 될 것 같습니다.

 

성공적으로 쉘을 획득했네요.

이제 my-pass 명령어만 입력하면 되겠네요.

'[▒] 보안 > FTZ' 카테고리의 다른 글

level 14  (0) 2020.09.01
level 13  (0) 2020.09.01
level 11  (0) 2020.09.01
level 10  (0) 2020.08.27
level 9  (0) 2020.08.27

BELATED ARTICLES

more