-
SEH(Structured Exception Handling)Hack/Windows 2016. 6. 1. 04:29
SEH는 Structured Exception Handling의 약자로, 하나의 체인이라고 생각하면되요
일단 구조체는 아래와 같이 생겼어요
Typedef struct _EXCEPTION_REGISTRATION { EXCEPTION_REGISTRATION *next; EXCP_HANDLER handler; }EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
뭔가 감이 좀 오지않나요? 첫번째 구조체의 멤버인 next는 다음의 구조체를 가리키는 포인터고, 그밑엔 예외가 발생했을경우의 핸들러같죠 뭔가가?
/GS 옵션을 키고 컴파일을하게될경우 스택쿠키가 생기는데, 이 핸들러를 이용해서 스택쿠키를 우회할수있어요
그냥 쉽게 말씀드리면 이거에요, next 멤버를 덮게되고, 만약 예외가 발생한다면 그다음에 핸들러가 가지고있는 주소가 호출될거에요.
그럼 next를 아무거나 덮어씌우고 예외발생하면 handler 가 실행될거니까 0x42424242를 핸들러값으로준다면 0x42424242가 call되겠죠?
대충 올리디버거로 볼게요
일단 스택쿠키옵션을 켜놓았더니 이런 기분나쁜게 생겼어요. 리눅스에서 Stack Canary 라고 보시면되요
쟤도 랜덤한값을 넣어준후에 비교할거에요
스택을 확인해보시면 SEH가 존재할거에요
일단 체인의 시작부분이라고 보시면되요 그리고 좀더 내려보면 체인의 끝이 있어요
체인의 끝은 0xFFFFFFFF라는 값이 존재하네요
예외처리를 하지못하게되면 ntdll.dll 내부의 핸들러가 호출되서 프로그램이 오류를뿜고 알아서 종료될거에요
이 스택쿠키를 우회하는것이 핸들러의 특징을 이용해서 Overwrite 를 통해 우회하는건데, SEH 레코드를 처음에덮고, 예외핸들러를 발생하게해서 다음 SE 핸들러가 호출되면 그 값을 실행시켜줄거에요 이 특징을 이용하는건데 SEH에 대해서 간단히알아보았고 다음글에서 Overwrite를 다뤄보겠습니다
'Hack > Windows' 카테고리의 다른 글
Virtual Table(Vtable), Overwrite (3) 2016.06.02 SEH Overwrite (0) 2016.06.01 Windows BOF (ASLR) (0) 2016.06.01 Windows Calc Shellcode (0) 2016.06.01 Windows BOF Exploit with Shellcode (0) 2016.05.27