ii4gsp

SEH Overwrite 기법 본문

시스템 해킹/Technique

SEH Overwrite 기법

ii4gsp 2020. 1. 15. 20:58
Typedef struct _EXCEPTION_REGISTRATION {
   EXCEPTION_REGISTRATION *next;
   EXCP_HANDLER handler;
}EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;

SEH 구조체의 멤버 next는 다음의 구조체를 가리키는 포인터이고, handler는 예외처리를 담당하는 핸들러이다.

 

 

SEH를 이용해 스택 쿠키를 우회하는 방법은 스택 쿠키를 포함한 버퍼를 모두 덮어쓰고 예외처리 핸들러에 쉘 코드 주소를 덮어씌워

예외를 강제로 발생시키면 예외처리가 아닌 쉘 코드를 실행시키면 된다.

 

 

 

 

 

위와 같이 설정해주자

 

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
	char buf[500] = { 0, };
	printf("Reader\n");
	FILE *f = fopen(argv[1], "r");
	fgets(buf, 1000, f);
	printf("Read : %s\n", buf);
}

argv[1]을 받고 buf에 파일의 내용을 쓰는 코드이다.

buf는 500byte인데 1000byte를 입력받아 오버플로우가 발생한다.

올리디버거로 파일을 열어보자

 

 

 

 

SEH 체인 보면 두 개의 SEH 체인을 볼 수 있다.

 

 

 

 

contents = "A" * 556 + "b" * 4 + "C" * 4 + "D" * 200
f = open("test.txt", "w")
f.write(contents)
f.close()

파이썬으로 RET와 SEH를 덮어주자

 

 

 

 

생성된 test.txt를 인자 값으로 주고 디버거를 실행하면 fgets로 복사하는 중 예외가 발생한다.

'시스템 해킹 > Technique' 카테고리의 다른 글

[Heap] Use After Free  (0) 2020.01.20
[Heap] Buffer Overflow  (3) 2020.01.19
구조적 예외 처리 SEH (Structured Exception Handler)  (0) 2020.01.15
윈도우 실행 파일 구조  (0) 2020.01.13
쉘코드 모음  (0) 2020.01.08
Comments