Hack/Windows
-
CoolPlayer OverflowHack/Windows 2016. 6. 3. 16:00
CoolPlayer에서 오버플로우 발생해서 쉘코드까지 실행되네요 별다른 보호기법은 없었어요 다른 모듈들은 모두 보호기법이 존재했어요. 근데 정작 바이너리자체는 보호기법이없으니까 상관없겠네요 185바이트를 집어넣어줬을경우 EIP가 90909090으로 바뀌네요 뭐 별다른 보호기법은 없으니까 jmp esp가젯을 이용해서 오버플로우를 해볼게요 SHLWAPI.dll에서 가젯을 구해줬어요 익스플로잇코드를 짜주고 공격해볼게요 import struct import os,sys,time from subprocess import * p = lambda x:struct.pack("
-
Windows ROPHack/Windows 2016. 6. 3. 04:59
ROP는 Return Oriented Programming 의 약자로, 가젯을 하나하나 모아서 공격하는 기법이에요 스택을 잘 조절하면서 익스플로잇을하면되는데, 리눅스 ROP를 해보신분이라면 하는방법은 똑같기때문에 가젯구하는법등만 배우시면 충분히 하실수있어요 Hyunmini님의 강의로 제작된 글이에요 우선 VUPlayer 2.49버전으로 잡았어요 !mona modules 모듈들을보면 ROP하기 딱좋은 모두 False가되어있는 모듈들이 존재하네요 그럼 BASS.dll로 잡아보고 익스플로잇을 하면 되겠네요 !mona 기능을 이용해서 가젯들을 모아볼게요 !mona rop -m BASS 명령을 치게되면 Immunity 디렉터리에 stackpivot.txt라는 파일이생겨요 ROP하기 좋은 가젯들을 모두 찾아줘요 가..
-
Windows RTLHack/Windows 2016. 6. 2. 02:48
RTL도 그냥 리눅스랑 동일하게 하면되요 바로 진행할게요 #include #include char calc[] = "calc\0"; int main(int argc, char *argv[]) { char buf[256]; printf("%p\n",calc); gets(buf); WinExec("cmd", 1); printf("%s\n", buf); } 일단 취약점이존재하고, WinExec가 실행되는 바이너리에요 calc를 쉽게 실행할수있게 전역변수로 놔두고 전역변수의 주소를 출력했어요 바로 함수주소 알아와주고, calc 문자열이있는주소도 알아주고 바로 익스해볼게요 import struct from subprocess import * p = lambda x:struct.pack("
-
SafeSEH 우회Hack/Windows 2016. 6. 2. 02:04
SafeSEH는 전에 우회기술인 SEH Overwrite를 막기위해 나온 보호기법중 하나에요 SafeSEH는 예외핸들러가 실행되기전에 주소값을 검증하게되요 일단 Handler가 어떠한값에 의해 씌워지게되면 스택 주소인지 확인하고 만약 주소가 스택주소라면 호출하지않는 구조를 가지고있어요 그러니까 일반적으로 전에 사용했던, SEH Overwrite는 먹히지도않겠죠..그리고 두번째 검증도 까다로워요 ㅠ 그 주소가 바이너리내에서 로드된 모듈의 주소이고 그 모듈이 SafeSEH옵션으로 컴파일되어있으면 제대로된 절차로 덮여진 주소인지 확인해요 딱 여기서 해커들은 찾아냈죠 모듈중에 SafeSEH가 안걸려있는 모듈에서 가젯을 찾아오면되죠... mona 파이썬을 이용한 immunity debugger인데,아래와같은 명령..
-
Virtual Table(Vtable), OverwriteHack/Windows 2016. 6. 2. 00:03
Vtable은 C++에서의 virtual 메소드를 사용해 함수를 만들어줄때 생기는 테이블이에요 Vtable이 어떻게 생겼냐면, 우선 객체가 있을거니까, 객체가 메모리를 할당할거에요 객체가 만약, malloc 으로 인해 할당을한다면 Heap에 객체가 만들어질꺼고, 그냥 할당을해준다면 스택에서 만들어질거에요 힙/스택에 객체의 포인터가 존재할거에요 근데 그 포인터는 또 Vtable을 가리키는 포인터가 존재할거에요 그리고 뒤쪽엔 할당해준 변수, 즉 멤버들이 존재하겠죠그리고 Vtable을 가리키고 있는 포인터가 있으니까 그 포인터는 Vtable의 첫번째 함수포인터를 가리키고 함수포인터는 메소드를 실행해줄거에요 대충 코드를 짜서 올리디버거로 생긴 꼬락서니를 볼거에요 #include #include #include ..
-
SEH OverwriteHack/Windows 2016. 6. 1. 05:07
SEH를 모르면 전 글로 넘어가서 꼭 읽고오셔야해요 기본이 중요하기때문에 꼭 읽고오세요 #include #include #include int main(int argc, char *argv[]) { char buf[256]; printf("Daa\n"); FILE *f = fopen(argv[1], "r"); fgets(buf, 500, f); printf("Read: %s\n ", buf); } 공격할 코드는 엄청쉬워요 바이너리에서 argv[1]을 받고 그것을 열어서 buf 에다가 써넣게되죠 buf는 256바이트인데 500바이트까지 받게되서 오버플로우가 발생하겠네요 SEH를 전부 덮어볼게요 건드리면 안될것을 건드려버렸어요 한번 바이너리 흐름대로 실행시켜볼까요? 스택끝을 넘어서게끔 채워준후 저렇게덮어주면..