Hack/Windows
-
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 멤버를 덮게되고, 만약 ..
-
Windows BOF (ASLR)Hack/Windows 2016. 6. 1. 04:00
쉘코드를 이용해서 오버플로우를 통해 계산기를 띄워보는거까지 올렸었었는데, 그땐 DEP,ASLR,SEH등 옵션이 꺼져있었어요 하지만 이번에는 ASLR옵션을 켜고 익스플로잇을 진행해볼거에요 ASLR을 키게되면, 스택주소와 바이너리의 주소들이 랜덤으로 맵핑되는데, 이때 익스플로잇을 어떻게해야할지 의문일거에요 #include int main(int argc, char *argv[]) { char buf[256]; gets(buf); printf("%s\n", buf); } 코드자체는 진짜 단순한 오버플로우문제와같이 gets 에서 터지는 바이너리에요 BUF + EBP + EIP 이렇게 될거니까 대충 코드를 생각해보자면 "A"*260 + ABCD 로 EIP를 컨트롤 할 수 있겠죠 그럼 이제 ASLR을 생각해보면되요..
-
Windows Calc ShellcodeHack/Windows 2016. 6. 1. 03:33
\xd9\xcb\xbe\xb9\x23\x67\x31\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x13\x31\x72\x19\x83\xc2\x04\x03\x72\x15\x5b\xd6\x56\xe3\xc9\x71\xfa\x62\x81\xe2\x75\x82\x0b\xb3\xe1\xc0\xd9\x0b\x61\xa0\x11\xe7\x03\x41\x84\x7c\xdb\xd2\xa8\x9a\x97\xba\x68\x10\xfb\x5b\xe8\xad\x70\x7b\x28\xb3\x86\x08\x64\xac\x52\x0e\x8d\xdd\x2d\x3c\x3c\xa0\xfc\xbc\x82\x23\xa8\xd7\x94\x6e\x23\xd9\xe3\x05\xd4\x05\xf2\x1b\xe9\x09\x5a\x1c\x..
-
Windows BOF Exploit with ShellcodeHack/Windows 2016. 5. 27. 02:29
windows bof 공부하는데, 쉘코드를 이용해서 계산기를 띄우는것에대해 글을 작성해보려고해요 리눅스에서 오버플로우를 공부하면서 이미 보호기법에대해서는 깨쳤으니 NX, 즉 DEP가 걸려있다면 스택의 실행권한이 존재하지않아 쉘코드가 실행이 불가능하겠죠!리눅스에서는 ROP가 존재하고, mprotect 함수를 사용할수있었는데, 윈도우즈에서도 마찬가지로 ROP가 존재하고, ROP로 VirtualAlloc 같은 함수로 영역을만들어서 실행권한을 줄수있는 등 공격기법이 존재하더라구요 차차 배우겠지만~ 우선 코드는 그냥 gets 함수에서 터지는 코드를 작성해보았어요 #include int main() { char buf[256]; gets(buf); printf("%s",buf); return 0; } buffer는..
-
Windows Shellcode 에러Hack/Windows 2016. 5. 27. 01:01
shellcode 를 만드는법에 대해서 알아보았는데 강의를 보아선 정말 간단했다. 리눅스는 쉘코드를 직접만들지않고 다른사람의것을 가져와도 되지만 윈도우즈는 조금 틀렸다. 윈도우즈는 각자의 환경에따라 kernel32.dll이 바이너리에 맵핑될때 주소가 다르고, ImageBase 값도 다르며 각 함수의 오프셋도 다르기때문에 직접 작성해주어야한다. ------- 쉘코드 만드는법에 대해서는 다른 강의가많으니 구지 설명을 따로 할 필요없이, 함수의 offset 과 kernel32.dll의 ImageBase대로 똑같이 계산했는데 쉘코드가 정상작동하지않아 화가날때 참고하라는 글입니다! 우선 모두가 하는일이 아래와같은 코드를 짜서 Disassembly한 결과로 테스트를 해볼거에요 아마 #include int main(..
-
Windows BOFHack/Windows 2016. 5. 24. 20:45
이제부터 Win BOF를 공부해보려 하는데, 간단한 프로그램을 작성해서 리눅스와 동일하게 오버플로우를 해보았다. #include void flag() {char flag[20];FILE *fp;fp = fopen("flag.txt","r");fgets(flag,sizeof(flag),fp);printf("%s",flag);fclose(fp);} int main(){char buf[12];gets(buf);printf("%s",buf);return 0;} 소스는 간단하게 flag 라는 함수가 존재하고 gets 함수에서 오버플로우가 발생한다. 그럼 12바이트를 채우고, ebp와 eip를 덮어주면 되겠지 A를 16개입력해주니, EBP가 41414141로 바뀌었다. eip 를 덮어줘야하는데, flag 함수의 위..