[LOB] gate → gremlin
System/PWNABLE

[LOB] gate → gremlin

728x90

xshell에 연결했다.

 

안전하게 사용하기 위해.. gremlin을 복사해 g를 만들었다.

항상 시작전에 $ bash2 입력하기!


Analyze

gremlin.c 소스코드

- simple bof 문제

- strcpy 함수에서 buffer overflow 취약성이 나타나기 때문에 이 함수에 bof를 일으켜 문제를 풀면 될 것이다.

- buffer(256) + SFP(4) + RET(4) 이런식으로 넣으면 될 것 같다.

- argc가 2개 미만일 때(=명령어만 있는 경우) 오류메시지를 출력하고 종료한다.

- 위의 조건에서 통과된다면 인자로 입력한 argv[1]이 버퍼에 복사되고 그 주소가 출력될 것이다.

 

gremlin

- 32bit

- not stripped

- dynamically linked

 

debugging

strcpy함수를 실행하여 buffer(스택)에 입력받은 인자를 저장하는 과정을 지난 시점에 breakpoint를 설정한다.


Payload

쉘 코드 이용

\x31\xc0\xb0\x31\xcd\x80\x89\xc1\x89\xc3\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

41byte의 쉘 코드를 사용해보면

Buffer+SFP(260 = Dummy 215 + ShellCode 41 + Dummy 19) || RET(4)

 

리턴 주소로 buffer의 주소를 넣어준다. 이 때 buffer에 저장되는 shellcode에 도달하는 것이 목표이기 때문에 buffer 영역으로 리턴하게 하면 쉘 코드가 실행된다. 따라서, 스택 영역(EBP와 ESP 사이)의 임의의 주소를 리턴주소로 하면 된다.

 

!성공!

SMALL

'System > PWNABLE' 카테고리의 다른 글

[POXX 2020] investigator  (0) 2021.01.19
[LOB] gremlin → cobolt  (4) 2021.01.15
[Dreamhack] house_of_force  (0) 2020.11.08
[HackCTF] uaf  (0) 2020.09.20
first  (0) 2020.09.06