FTZ level11 write up

포너블 2020. 2. 26. 19:52

 

cat 명령어를 사용해 우선 hint먼저 살펴본다.

힌트를 보면, argv[1]의 값을 str에 복사해준 후 출력을 해 주는데,

strcpy함수가 취약하다는 것을 알 수 있다.

strcpy : 문자열을 복사하는 함수
ex)
char* strcpy(char* dest, const char* origin);
:orgin에 있는 문자열을 dest로 복사한다

왜냐하면 argv[1]의 크기를 제한하지않고 바로 복사하기 때문이다.

그래서 256byte를 넘는 데이터를 str에 복사할 수 있게 된다!

이것은 버퍼오버플로우를 일으킬 수 있게 한다.

그런데 여기 hint말고 attackme라는 파일이 있다. 되게 수상하다!

버퍼오버플로우 공격을 할 떈 변수의 크기와 위치를 잘 파악하고 있어야 한다! 

그러니까 level9에서 했던 것처럼 gdb로 attackme를 분석해보자!

 

strcpy 함수가 수상하니까 그부분만 보자!

<main+27> 에서부터 <main+48>까지만 보면 될 것 같다.

하지만 봤는데 딱히 뭐 보고 알 수 있는게 없는 것 같다

그런데 생각해보니까 

eip에는 다음에 실행하여야 할 명령어가 존재하는 메모리 주소가 저장된다.

ret다음에 eip가 다음으로 실행될텐데

eip에 쉘코드를 넣으면 ret다음에 쉘코드가 바로 실행되지 않을까?

 

RET 부분에 환경변수의 쉘코드를 넣으면 뭔가 될 것 같다.˘ᗜ˘

이 쉘코드를 환경변수에 저장을 하고, 쉘코드가 저장되어 있는 주소를 ret에 넣어 쉘을 얻어와보자!

쉘코드 : \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\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

 

export 명령어를 사용하여 환경변수에 쉘코드를 저장한다

env 명령어를 통해 잘 되었는지 확인!

이제 jh의 주소를 알아내어 이걸 ret 에 넣는 일만 남았다.

tmp에 만들어야한다!!!!!

주소를 알아내기 위한 jh.c 파일을 만든다!

컴파일 시키고 실행시킨다! 그러면 

0xbffff8f라는 주소값을 얻을 수 있다!!

 

스택 기반의 버퍼오버플로우에서 가장 중요한 것은 RET 값을 변조하는 것이다!

그래서 버퍼오버플로우가 일어나는 배열에서 RET값이 저장되는 공간 까지의 거리를 구해야한다!

그러니까 우리는 ret전 까지 268만큼 아무 값을 넣어주면 된다.  (づ ̄ ³ ̄)づ

일일이 다 268만큼을 넣을 수 없으니 한줄로 저렇게 만든다!

level12의 패스워드 값을 얻었다!>_<

 

 

 

+

 

더보기

mov : Source에서 Destination으로 데이터를 복사한다.

add : Destination에 Source의 값을 더해서 Destination에 저장한다.

sub : Destination에 Source의 값을 빼서 Destination에 저장한다.

push : 스택에 값을 넣는다. ESP의 값이 4만큼 줄어들고 이 위치에 새로운 값이 채워진다.

pop : ESP 레지스터가 가리키고 있는 위치의 스택 공간에서 4byte 만큼을 Destination 피연산자에 복사하고 ESP 레지스터의 값에 4를 더한다.

 

레지스터

eax : 산술, 논리연산을 수행한 값이 저장되며 함수의 리턴값이 저장됨.

eip : 다음에 실행하여야 할 명령어가 존재하는 메모리 주소가 저장됨.

ebp : 스택의 시작지점 주소가 저장된다. (스택의 처음 부분)

esp : 스택의 마지막부분을 저장하며, push, pop 에따라 4씩 값이 변한다.



출처: https://includestdlib.tistory.com/43 [stdlib]

'포너블' 카테고리의 다른 글

(달고나) 와우해커 BOF 정리 [1]  (0) 2020.03.10
FTZ level9 write up  (0) 2020.02.28
FTZ level8 write up  (0) 2020.02.26
FTZ level7 write up  (0) 2020.02.26
FTZ level6 write up  (0) 2020.02.26

설정

트랙백

댓글