Heap Overflow By WraithOfGhost
|
|
- 용운 초
- 5 years ago
- Views:
Transcription
1 Heap Overflow By WraithOfGhost
2 이전문서에서 unlink 프로세스가어떻게동작되는지, FreeLists[n] 의 Flink/Blink 를이용해공격자가어떻게 4 바이트값을덮어쓰는지보여주기 위해 Windows XP SP1 환경에서힙오버플로우익스플로잇방법을다루었다. 이번문서의목표는자신스스로를다시한번교육 ( 혹시나잊어버렸을까봐 ) 시키고보안전문가들이힙매니저가 NT v5 버전이하에서어떻게동작하는지이해시키는것이다. 이는힙오버플로우공격, 메모리충돌취약점및 4 바이트값덮어쓰기에대한보호기법을우회하는꼭필요한지식이다. 이는또한새로운윈도우버전에서힙과관련된공격을계속수행하기위해문서를읽는사람들에게관련지식에대한일종의기준점을제공하는역할을한다. 이번튜토리얼은 Windows XP SP2/SP3 환경에서힙보호메커니즘을우회하는특정한기법을다루기위해잘알려진한개의어플리케이션에대하여자세히다룰예정이다. 그러므로힙의전체적인특성을다루지않고, 최고의방법이라할수없다. 본격적으로시작하기에앞서힙구조가 Windows XP3 / Server 2003 환경에서어떻게동작하는지에대한약간의지식이필요하다. 이번문서의목적과이전문서 (HeapOverflow 101) 를기반으로하여위에서언급한환경에서어떻게힙이내부적으로동작하는지설명할것이다. 만약자신이가장기본적인힙오버플로우에대해서도잘모른다면해당부분을먼저공부하기바란다. 본문서의이해와실습을위해선다음과같은것들이필요하다. - Windows XP SP1 - Windows XP SP2/SP3 - Windows XP SP1 - 디버거 ( 올리디버거, 이뮤니티디버거, 윈디버거등 ) - C/C++ 컴파일러 (Dev C++, lcc-32, MS visual C++6.0 등 ) - 스크립트언어 ( 파이썬, 펄등 ) - 뇌 ( 고집, 끈기 ) - 어셈블리, C에대한약간의지식, 디버깅능력 - 시간
3 힙덩어리 (chunk) 와블록 (block) 의개념 So what exactly is a chunk and a block? 기본적으로윈도우는힙을위해특정한구조가존재한다. PEB 로부터오프셋 0x90 에 위치한주소를보면정렬된 ( 시간순서로 ) 배열내부에존재하는주어진프로세스에 할당된힙리스트를볼수있다. 힙구조체를우선살펴볼것이다. Windbg( 이하윈디버거 ) 를이용하여!peb 명령어를이용하여 PEB 를찾을수있다. 이뮤니티디버거역시!peb 명령어를이용하여해당정보를볼수있다. 다음의 코드는!peb 명령어에서사용되는것이다. from immlib import * def main(args): imm = Debugger() peb_address = imm.getpebaddress() info = 'PEB: 0x%08x' % peb_address return info PEB 정보를찾았다면프로세스힙을볼수있다. +0x090 ProcessHeaps : 0x7c97ffe0 -> 0x Void 해당포인터주소 (0x7C97FFE0) 에대하여 DWORD 단위 (4 바이트 ) 로덤프를수행한다. 0 : > d d 7 c 9 7 f f e 0 7 c 9 7 f f e e c 9 7 f f f c c c c c c 9 b c f f d 2 d e c f f f f f 8 9 c a c 7 c e f c 위결과에서진하게표시된주소는실행되는프로세스에할당된힙영역이다. 이정보는 Windbg 와이뮤니키디버거에서!heap 명령어를이용하여볼수있다.
4 추가적으로각힙에대한통계적인정보를!heap stat 명령어를 Windbg 에서 실행하여알아낼수있다. _HEAP Segments Reserved bytes Committed bytes VirtAllocBlocks VirtAlloc bytes 최종적으로힙에대한약간의 1) 메타데이터를 -h / -q 옵션을이용해이뮤니티 디버거에서덤프할수있다. 다른힙들은 C 컴포넌트나생성자에서생성되지만첫번째힙 (0x ) 은기본힙 (Default heap) 으로써시스템은프로세스가초기화될때프로세스의주소공간에기본힙을생성한다. 이전페이지의덤프명령어출력결과에서볼수마지막힙 (0x ) 은어플리케이션에서생성된것이다. 어플리케이션은 HeapCreate() 와같은함수를호출해추가힙을생성하고 PEB를기준으로오프셋 0x90 주소에생성된힙에대한포인터를저장한다. 해당함수의프로토타입 ( 함수원형 ) 은다음과같다. HANDLE WINAPI HeapCreate ( in DWORD floptions, in SIZE_T dwinitialsize, in SIZE_T dwmaximumsize ); 올바른파라미터와함께 HeapCreate() 함수를호출하면생성된힙을가리키는포인터가 EAX 레지스터에저장되어리턴된다. 함수와파라미터에대한자세한설명은다음링크에서확인할수있다. 1) 메타데이터 (meta data) : 데이터에대한데이터
5 아래표는힙구조에대한것으로중요한것은진하게표시되어있다. Windbg 에서 이정보를보기위해 dt_heap 명령어를이용할수있다. 주소값설명 0x x Base Address 0x C 0x Flags 0x x ForceFlags 0x x0000FE00 VirtualMemoryThrehold 0x x VirtualAllocatedBlocks List 0x x FreeList Bitmap 0x x00361E90 FreeList[0] 0x x FreeList[n] 0x x HeapLockSection 0x C 0x Commit Routeine Pointer 0x x FrontEndHeap 0x x FrontEndHeapType 0x x00361E88 Last Free Chunk 0x x Lookaside[n]
6 힙세그먼트 Heap segments 이전에언급했듯이모든힙덩어리는힙세그먼트에저장된다. 만약메모리덩어리가해제되면 FreeList 나 Lookaside 에추가되어힙세그먼트에도추가된다. 메모리할당이실행되는동안만약힙매니저가 FreeList / Lookaside 에서가용메모리덩어리를찾을수없다면커밋되지않은공간으로부터힙세그먼트에추가메모리를커밋한다. 수많은할당에의해수많은메모리가커밋된다면힙구조는수많은세그먼트를가질수있다. 아래표는세그먼트덩어리구조를의미한다. Header Self Size (0x2) Prev Size (0x2) Segment index (0x1) Flag (0x1) Unused (0x1) Tag index (0x1) Data 힙세그먼트를분석할때,!heap a [heap 주소 ] 명령어를 Windbg 에서사용할수 있다.
7 또한!heap h [ 힙주소 ] -c 명령어를이뮤니티디버거에서실행할수있다. -c 옵션은힙덩어리목록을보여준다. 각세그먼트는세그먼트내의데이터덩어리에다음에위치한자신의메타데이터를포함한다. 메타데이터는커밋된세그먼트의메모리이고, 세그먼트는또한커밋되지않은메모리섹션을포함한다. 이제우리가분석해야할세그먼트의주소를알게되었으니 dt_heap_segment [ 세그먼트주소 ] 명령어를이용하여메타데이터구조를덤프할수있다. 다음표는세그먼트메타데이터의구조를상세하게나타낸것이다. 이해하기쉽게 0x 주소범위부터나타낼것이다. 주소값설명 0x xFFEEFFEE Signature
8 주소 값 설명 0x C 0x Flags 0x x Heap 0x x0003D000 LargeUncommitedRange 0x x BaseAddress 0x C 0x NumberOfPages 0x x FirstEntry 0x x004C0000 LastValidEntry 0x x D NumberOfUncommitedPages 0x C 0x NumberOfUncommitedRanges 0x x UnCommitedRanges 0x x AllocatorBackTraceIndex 0x x Reserved 0x x00381EB8 LastEntryInSegment 세그먼트에서가장중요한정보는첫번째덩어리그자체이다. 이정보만가지고 세그먼트를좀더쉽게분석할수있다. 세그먼트의사이즈와모양을알고있으니 n 덩어리와 n+1 덩어리의모습을쉽게예상할수있다.
9 백엔드할당자 해제리스트 The back-end allocator Freelist 힙구조체의오프셋 0x178 주소에서 FreeList[] 배열의시작부분을볼수있다. 해당배열은덩어리목록을이중연결리스트형태로가지고있다. 다양한자료구조중이중연결리스트로표현된것은해당배열에서 flink 와 blink, 총 2개를소유하고있기때문이다. 위다이어그램사진은 FreeList 가 0 ~ 128 범위를가지는정렬된힙덩어리의배열을가지고있다는것을보여준다. 0 ~ 1016 사이즈 2) 의힙덩어리는덩어리자체의 할당유닛사이즈 * 8 에기반하여저장된다. 예를들어해제해야하는메모리가 0x40 바이트만큼있으면 Freelist 의 4번째 (40/8) 위치 3) 에저장해야한다. 만약덩어리사이즈가 1016(127*8) 바이트보다크면숫자크기대로순서대로정렬 되어 FreeList[0] 에저장된다. 아래표는 FreeList 덩어리를나타낸것이다. Headers Self Size (0x2) PrevSize (0x2) Segment Index (0x1) Flag (0x1) Unused (0x1) Tag Index (0x1) Flink / Blink Flink (0x4) Blink (0x4) Data 마이크로소프트는 Freelist 엔트리의 unlinking 과정을보호하기위해몇가지 보호기법을적용하였는데, 각보호기법들에대한간략한설명은다음과같다. 2) 최대크기가 ( 메타데이터 ) 이기때문에 1016 이나온다. 3) 40/8 = 5, 그러나배열이 0 부터시작되기때문에 4 가됨
10 Safe unlinking of the freelist Safe unlinking 은 Windows XP SP2 이상에서적용되는마이크로소프트의보호기법이다. 기억할지모르겠지만이전문서 (Heap overflows 101) 에서보여준일반적인 4바이트덮어쓰기공격을막기위한필수적인익스플로잇보호기법이다. 이기법은이전덩어리의 flink 포인터가방금할당된덩어리를가리키는지체크하고다음덩어리의 blink 포인터가동일한덩어리 ( 방금할당된 ) 를가리키는지체크한다. 이해를돕기위해다음의설명과그림을추가하였다. Freelist chunk 1[flink] == Freelist chunk 2 && Freelist chunk 3[blink] == Freelist chunk 2 위사진에서빨간색화살표가체크가수행되는루틴이라할수있다. 체크루틴중단하나라도실패한다면 ntdll.dll 내부에서 0x7C 로분기 하게된다. 보는것처럼 flink/blink 체크코드가추가된것만제외하면일반적인 unlink 과정과매우비슷하다는것을알수있다.
11 FreeList header cookies Windows XP SP2가공개되면서힙덩어리헤더에서오프셋 0x5 위치에랜덤힙쿠키가추가되었다. Freelist 덩어리만힙쿠키체크루틴이포함되어있다. 다음사진은보안쿠키 ( 강조표시 ) 를포함하는힙덩어리모습이다. 보안쿠키는 1 바이트의랜덤값이고총 256 가지의값을가질수있다. 멀티쓰레드환경에서는무작위대입을통해이런보호기법을무력화시킬수있다.
12 백엔드할당자 Lookaside The back-end allocator Lookaside lookaside 리스트는단일연결리스트구조이며 1016 바이트이하의힙덩어리를저장하기위해사용된다. 해당리스트를사용하는근본적인이유는검색시간을줄이기위한것이다. 검색시간을줄이려고하는이유는프로세스가실행될때어플리케이션이수많은 HeapAlloc() / HeapFree() 를실행하여퍼포먼스이슈가발생할수있기때문이다. lookaside 리스트가애초에효율성, 속도를위해고안된것이기때문에하나의리스트당 3개의해제힙덩어리만허용한다. 만약 HeapFree() 가덩어리에서호출되는순간이미해제되는사이즈만큼의 3개의요소가존재한다면, 해제되는덩어리는 Freelist[n] 에저장된다. 힙덩어리사이즈는항상 실제할당사이즈 + 헤더를위한추가 8 바이트 식으로계산된다. 따라서 16 바이트할당이일어나면, lookaside 리스트는 24 바이트덩어리를찾는다. 아래그림의경우윈도우힙매니저가 lookaside 리스트에서할당요청된사이즈를 2번째인덱스에서찾은것이다. lookaside 리스트는다음가용덩어리 ( 사용자데이터 ) 를가리키는 flink 포인터를가지고 있다. Headers Self Size (0x2) PrevSize (0x2) Cookie (0x1) Flag (0x1) Unused (0x1) Segment Index (0x1) Flink / Blink Flink (0x4) Data
13 윈도우힙매니저가할당요청을받으면, 요청조건을충족하기위해힙메모리의해제된영역을찾는다. 최적화정도와수행속도를위해윈도우힙매니저는제일처음 lookaside 를참조 ( 전방탐색이기때문에단일연결리스트부터검색 ) 하여해제된영역을찾는다. 해제된영역을찾을수없으면 back-end 할당자를이용한다. 할당자를이용할경우처음에 freelist[1] ~ freelist[127] 범위내에서검색을수행한다. 그럼에도불구하고해제된영역을찾을수없으면 freelist[0] 으로이동하여할당이요청된사이즈보다큰해제영역을찾거나, 요청된사이즈를분할하여분할된사이즈에맞는해제영역을찾는다. 찾아진영역은힙매니저로리턴되고나머지는 freelist[n] 에 ( 여기서 n 은찾아진영역사이즈에서요청에대한바이트를제외하고남은바이트에대한인덱스값 ) 저장된다. 여기까지잘이해했다면이제힙동작에대하여알아볼차례이다.
14 기본적입힙동작 Basic Heap Operations Chunk Splitting ( 덩어리조각내기 ) chunk splitting 는 freelist[n] 에접근하여가용덩어리를찾고해당덩어리를더욱작은사이즈로조각내는작업이다. 응용프로그램에서요청된할당사이즈보다큰 freelist의덩어리에접근하면, 해당덩어리는요청된사이즈에알맞게조각내어진다. freelist[0] 이 2048 바이트크기의한덩어리라고가정한다. 요청된할당사이즈가 ( 헤더포함 ) 1024 바이트라고하면, freelist 의덩어리는반으로나뉘고 1024 바이트는 할당을위해사용되고나머지 1024 바이트는다시 freelist[0] 에저장된다. Heap Coalescing ( 힙합치기 ) heap coalescing 은인접하게위치한해제된힙메모리영역을다시합치는작업이다. 힙매니저가이런작업을수행하는이유는세그먼트메모리를효과적으로사용하기위한것이다. 물론덩어리가해제되었을때효율성과관련해서약간의리스크가존재한다. heap coalescing 은매우중요한작업이다. 왜냐하면한번해제된수많은덩어리들을합쳐나중에있을지모르는큰사이즈에대한할당요청에사용할수있기때문이다. 만약 heap coalescing 작업이발생하지않으면힙세그먼트에낭비되는덩어리가생성되고단편화현상이일어난다.
15 Windows XP SP2-3 환경보안메커니즘우회기법 Techniques for bypassing Windows XP SP2-3 security mechanisms Overwriting a chunk of the lookaside (lookaside 덩어리덮어쓰기 ) 이기법은힙쿠키와 safe unlinking 체크를우회하기위해사용되는가장흔한방법이다. 기법자체가어플리케이션에특화되어 4 바이트를덮어쓰는것이기때문에일부어플리케이션은안정적인익스플로잇을위해충분한힙레이아웃을사용자가알아낼수있게허용한다. lookaside 리스트에서는힙쿠키나 safe unlinking 체크등이이루어지지않기때문에공격자는인접한 lookaside 에있는값으로 flink 포인터를덮어쓸수있고 HeapAlloc() / HeapFree() 함수를호출함으로써덮어쓴 flink 포인터를이용할수있고, 이는다음가용덩어리공간에악성코드를작성하기위해사용한다. 방금설명한기법이어떻게동작되는지그림과함께살펴보면다음과같다. 1. A 덩어리를현재세그먼트에할당한다. 2. 또다른덩어리 B 를동일한세그먼트에할당한다.
16 3. B 덩어리를해제하여 lookaside 리스트에추가하면 2 개의요소가존재한다. 한개는세그먼트, 나머지한개는 lookaside 리스트에사용된다. 4. A 덩어리를오버플로우시킨다. 그러면나중에 B 덩어리도오버플로우가 발생하고 Flink 포인터값이변경된다. 바로이값이덮어쓰일메타데이터 이다.
17 5. 그다음 2번과정의 B 덩어리와동일사이즈를할당하여다시 B 덩어리를할당한다. 그러면 B 덩어리포인터가리턴되고 B 덩어리에대한참조를현재힙세그먼트에업데이트시킨다. 그러면다음할당을위한준비가완료되는데, 이때 flink 포인터가 B 덩어리임의의주소에업데이트되는데해당주소는공격자가 A 덩어리를오버플로우함으로써조정할수있다. 6. C 덩어리를할당함으로써제어권을얻는다. 해당덩어리는 B 덩어리다음에 위치한첫번째가용덩어리로써, 이전에획득한 B 의제어포인터를통해 가리켜진다. 대부분의경우공격자는 C 덩어리를쉘코드로채운다.
18 위프로세스가실행되면우리가덮어쓴 4 바이트다음에호출될함수포인터를 제어할수있게된다. 아래 C 코드는이런프로세스를나타낸것이다. /* lookaside 덩어리덮어쓰기예제 */ #include <stdio.h> #include <windows.h> int main(int argc,char *argv[]) { char *a, *b, *c; long *hheap; char buf[10]; printf(" \n"); printf("overwrite a chunk on the lookaside\n"); printf("heap demonstration\n"); printf(" \n"); // 힙생성 hheap = HeapCreate(0x ,0,0); printf("\n(+) Creating a heap at: 0x00%xh\n",hHeap); printf("(+) Allocating chunk A\n"); // 0x3F8 바이트보다작은사이즈의첫번째덩어리할당 a = HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x10); printf("(+) Allocating chunk B\n"); // 0x3F8 바이트보다작은사이즈의두번째덩어리할당 b = HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x10); printf("(+) Chunk A=0x00%x\n(+) Chunk B=0x00%x\n",a,b); printf("(+) Freeing chunk B to the lookaside\n"); // 할당된 B 덩어리해제 - 해제된덩어리는 lookaside 에서참조된다. // 참조라는의미가이해가가지않으면그냥 ' 이동된다 ' 라고이해하기바람 HeapFree(hHeap,0,b); // 소프트웨어브레이크포인트설정 asm ("int $0x3"); printf("(+) Now overflow chunk A:\n"); // 'A' 덩어리에오버플로우발생 : 'B' 덩어리의 Flink 포인터변조가능 // 테스트를위해 PEB lock 루틴실행 // 16 바이트사이즈, 8 바이트헤더, 4 바이트 Flink 포인터 // strcpy(a,"xxxxxxxxxxxxxxxxaaaabbbb\x20\xf0\xfd\x7f"); // strcpy(a,"xxxxxxxxxxxxxxxxaaaabbbbdddd"); gets(a);
19 // 소프트웨어브레이크포인트설정 asm ("int $0x3"); printf("(+) Allocating chunk B\n"); // N 사이즈만큼의덩어리가 'C' 에할당됨 // ( 공격자가오버플로우로변조한 ) 가짜포인터가 lookaside 리스트에서리턴됨 b = HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x10); printf("(+) Allocating chunk C\n"); // 소프트웨어브레이크포인트설정 asm ("int $0x3"); // A second chunk of size N is allocated: our fake pointer is returned // N 사이즈만큼의두번째덩어리가할당됨 - 가짜포인터가리턴됨 c = HeapAlloc(hHeap,HEAP_ZERO_MEMORY,0x10); printf("(+) Chunk A=0x00%x\n(+)Chunk B=0x00%x\n(+) Chunk C=0x00%x\n",a,b,c); // ( 공격자의 ) 입력값을이버퍼에복사하는동작이수행됨 // 해당값들은우리 ( 공격자 ) 가선택한위치에작성됨 // 여기에쉘코드를추가하면됨 gets(c); // 소프트웨어브레이크포인트설정 asm ("int $0x3"); } exit(0); asm ( int $0x3 ); 명령어가있는이유는디버거에서위바이너리를실행하는동안일시적으로멈추게하기위함이다. 아니면컴파일된바이너리를디버거로열어서각호출에직접브레이크포인터 ( 이하 PB) 를설치해도된다. dev c++ 를이용하여컴파일 ( 인라인어셈블리문법이 AT&T 문법인것을주의 ) 한다. 어쨌든디버거에서실행하면다음과같이첫번째 BP에서멈춘다. * 그림크기가너무커서다음페이지로이동!!
20 0x 세그먼트에 0x18 사이즈를가지는 2 개의덩어리를볼수있다. 해당값에서 0x8 바이트를빼면 0x10 이나 0x16 이나온다. lookaside 를분석하여 해당주소에서 B 덩어리를해제했는지살펴본다. 위사진처럼 lookaside 에해제한 B 덩어리가있는것을볼수있다. 해제된덩어리보다 8 바이트작은데, 다시말하지만 8 바이트는헤더를의미한다. 이덩어리는사이즈가 1016 보다작기때문에이미해당사이즈만큼최대 3개의덩어리가해제된상태이기때문에 Lookaside[03] 주소로해제된것이다. 보다확신을가지기위해 freelist 를살펴보면다음과같다.
21 freelist[0] 은기본적인부분 ( 세그먼트생성시약간의할당발생 ) 이기때문에해방부분을제외하고나머지는우리가원하는모습으로나타난다. 알다싶이 A 덩어리를 0x41( 알파엣 A 16진수 ) 로덩어리헤더근접까지오버플로우시켰다. 동일한데이터로근접한덩어리를 0x44( D ) 로덮어쓸것이다. 0x00481ea8-0x8 위치 ( 덩어리 B ) 가공격자의입력값으로인해오버플로우된것을볼수있다. 또한 lookaside 엔트리에 0x C 값이있는것을볼수있다. 만약해당값에 0x8을더한다면 0x ( 공격자의입력값 ) 된다. 이제덩어리 B 의 Flink 포인터를어떻게제어하는지알수있을것이다.
22 덩어리 B (0x00481ea8-0x8) 와동일한사이즈의할당이일어나면, B 의엔트리는 looaside[3] 에서제거되고할당을요청한쪽으로리턴된다. 참고로덩어리의헤더 또한우리 ( 공격자 ) 가제어할수있다는것을알아두길바란다. 덩어리 A (0x00481e88) 를보면플래그가 0x1 로세팅되었는데이는해당덩어리가 현재사용중인상태라는의미다. 다음덩어리 (0x00481ea0) 은아직업데이트되지 않아현재 lookaside 에해제된상태로있다. 위사진의코드는 MOV 명령어에서접근위반이일어난다. 위에서설명한기법을이용하여어플리케이션을공격할때, 함수포인터 ( 가짜 flink 포인터 ) 를 0x 말고다른값으로변경해야한다. 힙매니저가할당된다음덩어리를생성할때어플리케이션은해당값을가짜 flink 포인터주소에작성한다. 우린덩어리 C 를할당하고쉘코드로버퍼를꽉채워야한다. 이때필요한것은어플리케이션이크래시되기전에함수포인터를호출하는것이다. 이전 HeapOverflow 101 문서에서언급하지않은방법이있는데, 바로공격자가 PEB 전역함수포인터를이용 (Windows XP SP1 환경이하 ) 하는것이다. 그러나 XP SP2 이상에서는함수포인터주소가랜덤화되어사용하기힘들다. windbg 를이용하여바이너리를분석하여이부분에대해확인하면다음과같다.
23 한번더명령어를실행한다. PEB 사진 2개에서보는것처럼 PEB 주소가서로다르다. (7ffde000 -> 7ffdd000) 예외가발생하면, 예외디스패쳐 (exception dispatcher) 는 RtlAcquirePebLock() 함수를호출하는 ExitProcess() 함수를호출한다. 이동작이이루어짐으로써예외가발생하는동안 peb는변조되지않고예외처리핸들러의디스패치작업이끝나면 RtlReleasePebLock() 함수를호출하여 PEB lock을해제한다. 추가적으로이런함수내부에서사용하는포인터는 W X 보호가되어있지않기때문에메모리영역에서포인터에값을작성하거나실행시킬수있다. 방금위에서언급한각함수들은 PEB를기준으로고정된오프셋을가지는정적포인터를사용한다. 아래명령어결과는 RtlAcquirePebLock() 함수코드이다. 보는것처럼 FS:[18](peb) 가 EAX 레지스터에복사되고있다. 그리고 0x30 오프셋에서전역함수포인터가스택에 push( 저장 ) 되고있으며 0x24 오프셋은호출될 FastPebLockRoutine() 함수를의미 한다. 7C91040D > 6A 18 PUSH 18 7C91040F C PUSH ntdll.7c C E8 B2E4FFFF CALL ntdll.7c90e8cb 7C :A MOV EAX, DWORD PTR FS:[18] 7C91041F 8B40 30 MOV EAX, DWORD PTR DS:[EAX+30] 7C E0 MOV DWORD PTR SS:[EBP-20], EAX 7C B48 20 MOV ECX, DWORD PTR DS:[EAX+20] 7C D E4 MOV DWORD PTR SS:[EBP-1C], ECX 7C91042B 8365 FC 00 AND DWORD PTR SS:[EBP-4], 0 7C91042F FF70 1C PUSH DWORD PTR DS:[EAX+1C] 7C FF55 E4 CALL DWORD PTR SS:[EBP-1C] 7C D FC FF OR DWORD PTR SS:[EBP-4],FFFFFFFF 7C E8 C8E4FFFF CALL ntdll.7c90e906 7C91043E C3 RETN 다음페이지의명령어결과는 RtlReleasePebLock() 함수가직접 FastpebUnlcokRoutine() 함수포인터를 PEB 내부에서전역배열오프셋 0x24 에서호출하고있는것을보여 준다.
24 7C > 64:A MOV EAX,DWORD PTR FS:[18] 7C B40 30 MOV EAX,DWORD PTR DS:[EAX+30] 7C91045A FF70 1C PUSH DWORD PTR DS:[EAX+1C] 7C91045D FF50 24 CALL DWORD PTR DS:[EAX+24] 7C C3 RETN 따라서 RtlAcquirePebLock() / RtlReleasePebLock() 루틴이예외가발생할때호출 되는경우, 코드는계속예외를발생시켜끝없이우리의코드를실행한다. 그럼에도 불구하고우린쉘코드를실행하고포인터에대한포인터주소를 exit() 으로대체 하여 PEB 를패치할수있다. 현재프로세스가쓰레드가많으면많을수록, 랜덤화정도는더작아지기때문에현재 PEB 주소를어느정도예측할수있다. 하지만사실아직도문제가있는데바로우리가덮어쓸 4 바이트 ( 대부분함수포인터 ) 를위한안정적인함수포인터가없다는것이다. 가끔어플리케이션은예외가발생하기이전이나다른윈도우라이브러리의함수포인터가호출되어덮어쓸함수포인터와쉘코드실행에영향을주는경우커스텀함수포인터를이용하기도한다.
25 Specific pointer exploitation ( 특정포인터공격 ) 데모 (demonstration) 시연을위해 PEB 전역함수포인터가고정되어있는 Windows XP SP1 환경에서 lookaside 의덩어리를덮어쓰는것을보여줄것이다. 참고로 FastPEBLockRoutine() 함수는 0x7ffdf020 주소에위치한다. 이전에보여준 C 소스에서다음라인의주석을삭제한다. 주석제거이전 : // strcpy(a,"xxxxxxxxxxxxxxxxaaaabbbb\x20\xf0\xfd\x7f"); 주석제거이후 : strcpy(a,"xxxxxxxxxxxxxxxxaaaabbbb\x20\xf0\xfd\x7f"); 그리고다음라인에주석을추가한다. 주석추가이전 : gets(a); 주석추가이후 : // gets(a); 이제우린 A 덩어리를 X 문자들로오버플로우시키고, 그다음 B 덩어리의 메타데이터를 AAAABBBB 문자열로오버플로우시키고최종적으로 B 덩어리의 Flink 포인터를 0x7ffdf020 으로오버플로우시킨다. 변경된소스를재컴파일 하고이뮤니티디버거에서불러온다. 이제우리가 C 덩어리를할당 (0x7ffdf020 를 가리킴 ) 할때우린덩어리를쉘코드로채울수있는데, 이로인해예외가발생 한다. 아래사진에서보여지는코드들이 EAX 레지스터에 PEB 위치가있게만들고 우리코드를실행하는직접호출을오프셋 0x20(FastPEBLockRoutine()) 에서만든다. 이제우린 EIP 를완전하게제어할수있다. 여기까지잘왔다면 DEP 를우회하고 코드를실행하는것은사소한작업이다.
26 Application specific pointer exploitation 어플리케이션특화포인터공격 이전에보여준취약점을 Windows XP SP3 환경에서어플리케이션특화포인터공격으로데모를보여주지않으면이문서는완벽하지않을것이다. 이전처럼힙오버플로우취약점이있는대상소프트웨어를정할때오버플로우발생이후에호출되어작성, 실행 (W+E 권한 ) 할수있는하크코딩된함수가있다면이또한공격대상이될수있다. 예를들어 winsock의 WSACleanup() 함수를예로들면, 이함수는 XP SP3 환경에서 0x71ab400a 하드코딩함수를가지고있다. 해당주소역시쉘코드를작성할메모리주소로사용될수있다. 이런경우 WSACleanup() 함수가실행될때쉘코드로리턴될것이다. 아래사진은해당함수의디스어셈블결과이고하드코딩함수호출을찾는사진이다. 윈도우환경에서네트워크기능이있는대부분의어플리케이션은 winsock 에서익스포트된함수를사용하고특히 WSACleanup() 함수는모든소켓연결을정리할때사용하기때문에항상힙오버플로우발생직후에호출된다고봐도무방하다. 이런이유로 0x71ac4050 함수포인터를이용하여덮어쓰는것은꽤연속적인작업으로생각해도된다. 또다른예제는다음사진과같은데 recv() 함수역시동일한 ( 하드코딩된 ) 함수를호출한다.
27 0x71ac4050 함수를참조하는또다른코드를볼수있다. 해당함수를이용하는 것이성공적이라는것을보증하기위해메모리의접근권한을보면다음과같다. 이기법의근본적인문제는위주소를덮어쓰는것이기때문에 winsock 를사용하는쉘코드는실행이실패할수밖에없다는것이다. 이문제를해결하는방법은 0x71ac4050 주소를동일한코드로다시패치하여 winsock 호출을성공적으로이용할수있게만드는것이다.
28 Application specific heap exploitation example 어플리케이션힙공격예제 힙오버플로우, 메모리릭이발생하는취약하게설정된서버바이너리를이전에보여주었다. 기본목표는 lookaside 덩어리를덮어쓰고코드실행을할수있게만드는 PoC 익스플로잇을작성하는것이다. b33f을다운로드하여 Windows XP SP3 환경에서실행하여이전에설명한기법의개념을터득하기바란다. 문서를읽는사람들이약간의리버싱을통해힙의레이아웃을알아내고코드를실행하게만들고싶어 PoC 소스코드는공유하지않을예정이다. 약간의힌트를주자면힙의레이아웃을알아내었다면다음사진처럼동작하는 PoC를만들수있다. 물론힙메모리레이아웃을스스로알아내는것이완벽하다. 대상프로세스힙의레이아웃을좀더쉽게알아내기위한바이너리는클라이언트쪽의바이너리이다. 약간의스크립팅과힙레이아웃을조절할수있는능력이라면힙오버플로우를통해익스플로잇을할수있을것이다. Alex Sortivos 의 heaplib.js 파일을이용해메모리의할당, 해지및힙과관련된다른작업들을수행하는것이좋은예제가될것이다. 자바스크립트나 DHTML 을이용하여 MSHTML 에의해사용된힙과동일한것을할당 / 해제하려고한다면힙매니저를제어하여타켓브라우저의실행흐름을제어할수있게된다.
29 AOL 9.5 (CDDBControl.dll) 액티브엑스힙오버플로우분석 Analysis of AOL 9.5 (CDDBControl.dll) Active X Heap Overflow 이취약점을분석하여 Windows XP SP3 환경에서해당버그의익스플로잇가능성을보여주는것이좋다고생각했다. 스크립트나초기화과정에의한제어는안정적이지않음에도불구하고, 분석하기에는흥미로울것이라생각했다. 원래본섹션은추가하지않으려고했으나 sinn3r 4) 가요청했기때문에추가하였다. 취약점이액티브엑스와관련된것이기때문에공격하기위한방법중하나는 IE에서스크립트언어를이용하는것이다. 자바스크립트를이용하기로했는데이유는가장간단하면서 healib.js가자바스크립트로작성되었기때문이다. 본인의환경은다음과같다. - IE 6/7 - Windows XP SP3 - heaplib.js 분석을시작해보자! 우선첫번째로 exploit-db 에 Hellcode Research 그룹에 의해공개된익스플로잇 5) 을이용하여크래시를분석할것이다. 현재힙의세그먼트가실제론커밋되지않은메모리에서실행되고해당힙 세그먼트를위해더이상메모리를커밋할수없는상태이다. 해당주소를덤프하면다음과같다. 4) 5)
30
31 모든세그먼트를사용하였음에도불구하고또다른세그먼트를생성하지못한 상태이다. 이제뭘해야할까?? 일단 unlink 동작을유발 (trigger) 시켜야한다는 것은알고있다. unlink 유발을위해윈도우힙매니저가할당된버퍼에모든 데이터를복사 ( 다른덩어리들도덮어씀 ) 해야한다. 단, 현재세그먼트는그대로두어야 한다. 그러면다음할당, 해제가발생했을때 unlink 동작을시도한다. PoC 코드를 4000 바이트대신에 2240 바이트를오버플로우시키게변경했다. var x = unescape("%41"); while (x.length<2240) x += x; x = x.substring(0,2240); target.bindtofile(x,1); 이제버그를유발하면브라우저가크래시되지않는다. 물론덩어리는오버플로우 된상태지만다른 unlink 동작이수행될때까지크래시되지않는다. 그러나 브라우저를종료할때, 가비지컬렉터 (garbage collector) 가실행되어해제된모든 덩어리를할당하기때문에 RtlAllocateHeap() 함수를여러번호출하게되어 버그가유발된다. 이때익스플로잇가능성은좀더안정적이게된다. (384c.16e0): Access violation - code c (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. eax= ebx= ecx=02273f28 edx= esi=02273f20 edi= eip=7c9111de esp=0013e544 ebp=0013e764 iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl= ntdll!rtlallocateheap+0x567: \ 7c9111de 8b10 mov edx,dword ptr [eax] ds:0023: =???????? 익스플로잇가능성을발견하였다. 이번취약점의경우 Flink 포인터가 EAX에, Blink 포인터가 EDI에저장된다. Windows XP SP1 이하환경에서간단히 UEF 함수를덮어써서제어를얻을수있다. 그러나브라우저에서강력한스크립트기능을이용하여힙을조절할수있기때문에, XP SP3 환경을대상으로공격을진행할것이다. 힙레이아웃을분석하던중에액티브엑스컨트롤이실행될때컨트롤자신의힙을생성ㅇ하고크래시가 freelist 삽입과정에서유발된것을알게되었다.
32 heaplib.js 라이브러리를이용하여힙을성공적으로변조할수있었으나변조된것은기본힙이다. 문제는기본힙은액티브엑스컨트롤의힙이아니라는것이다. 따라서변조했을때좀더살펴보니실제익스플로잇이불가능해보였다. 물론잘못분석하여발생된오해일수있으나본인의분석결과로는익스플로잇이힘들어보였다. 만약객체의힙이변조되지않으면익스플로잇할수없다.
33 Hooking 후킹 힙오버플로우취약점이있는어플리케이션을디버깅할때유용한팁을알려주자면할당 / 해제횟수와그사이즈이다. 프로세스 / 쓰레드가실행되는동안수많은할당과해제작업이만들어지는데해당순간은모두 BP를설정해야하는순간이다. BP 설정을위해서이뮤니티디버거에서꽤좋은기능이제공되는데, 바로!hookheap 플러그인을이용하여 RtlAllocateHeap(), RtlFreeHeap() 함수를후킹하여자동으로사이즈와할당 / 해제횟수를기록하여알려준다. 위사진에서보는것처럼특정할당이발생하고, 큰바이트사이즈의할당이 목표바이너리 (vulnerable server) 를나타내고있다.
34 결론 Conclusion 힙매니저는이해하기에매우복잡하고힙오버플로우익스플로잇을위해서는수많은시간, 각각다른여러가지상황들이필요하다. 목표어플리케이션의현재상황과제약사항을이해하는것은힙오버플로우익스플로잇가능성을알아내는키가된다. 마이크로소프트에의해강제적으로적용된보호기법들은일반적인힙오버플로우를방어한다. 그럼에도불구하고어플리케이션을많이분석하여다양한상황을겪는다면방어기법을무시하여익스플로잇을성공할수도있다. 참고문헌 - [ 원문 ] Heap Exploitation.ppt - some small aspects from: (heap segment information) - Advanced windows Debugging (Mario Hewardt) Understanding and bypassing Windows Heap Protection by Nicolas Waisman (2007):
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
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 informationHeap Overflow By WraithOfGhost
Heap Overflow - 101 By WraithOfGhost 이전스택오버플로우문서에서예외처리핸들러 (Exception Handler) 를호출하거나직접적인방법을 EIP 레지스터를제어하는방법을보여주었다. 본문서는 EIP / SEH를직접이용하지않고프로그램의실행흐름을제어하는일련의방법들에대하여다룰예정이다. 공격자가정한값을원하는메모리주소에덮어씀으로써임의의 DWORD
More informationHeap Overflow By WraithOfGhost
Heap Overflow - 103 By WraithOfGhost 시간이지남에따라잊혀지지않았으면하는힙공격을위한매우중요한 기법을설명하고자한다. 지금까지다룬문서의내용을간단하게정리하면 다음과같다. Heap Overflows 101 [ Windows XP SP1 이하환경에서의기본적인힙오버플로우 ] - 기본적인 unlink() 공격 + 함수포인터덮어쓰기 - 처리되지않은예외필터이용
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 information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
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 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 informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
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 informationHeap Overflows For Humans 101 우리는이전에스택기반의버퍼오버플로우와포멧스트링취약점에대해이야기 했다. 지금시간에는한단계더나아리가서윈도우즈힙매니저와함께놀자 Unlink() to ex
Heap Overflows For Humans 101 xptr33@gmail.com candypython@gmail.com 우리는이전에스택기반의버퍼오버플로우와포멧스트링취약점에대해이야기 했다. 지금시간에는한단계더나아리가서윈도우즈힙매니저와함께놀자 Unlink() to execute a write 4 primitive 그전까지는해커들은스택오버플로우에서예외처리루틴을호출시키든어떤방법으로든
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
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 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 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 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 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 information버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습
앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수
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 - chap06-5 [호환 모드]
2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.
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 information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
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 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 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 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 informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationAPI 매뉴얼
PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned
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 informationMicrosoft PowerPoint - chap13-입출력라이브러리.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 프레젠테이션
KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된
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 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이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
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 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 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 PowerPoint - chap10-함수의활용.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 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<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>
SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
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 informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드
More informationPowerPoint 프레젠테이션
DEVELOPMENT ENVIRONMENT 2 MAKE Jo, Heeseung MAKE Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one 2
More informationAPI 매뉴얼
PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations
More informationPowerPoint 프레젠테이션
Development Environment 2 Jo, Heeseung make make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It
More informationuntitled
int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015
More informationMicrosoft Word - Heap_Spray.doc
Heap Spray 본문서는 최근 웹 브라우저를 이용한 공격에 사용되는 Heap Spray 기법에 대한 내용을 수록하였다. 관련 내용에 대하여 많은 도움이 되기 바란다. 문서 내용은 초보자도 쉽게 이해할 수 있도록 관련 내용에 대한 설명을 포함하였다. Hacking Group OVERTIME force< forceteam01@gmail.com > 2007.05.13
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More information목 차 1. 개 요... 1 1.1. 배경... 1 1.2. 요약... 1 1.3. 정보... 2 1.4. 대상시스템... 2 1.5. 원리... 2 2. 공격 기법 및 기본 개념... 3 2.1. Heap Spray... 3 2.2. Font... 4 3. 공 격..
취약점 분석 보고서 [ Adobe Flash Player 11.3 Kern Table Parsing Integer Overflow - CVE-2012-1535 ] 2012-08-23 RedAlert Team 안상환 목 차 1. 개 요... 1 1.1. 배경... 1 1.2. 요약... 1 1.3. 정보... 2 1.4. 대상시스템... 2 1.5. 원리...
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
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 information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More informationMicrosoft PowerPoint - 제11장 포인터(강의)
쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조
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 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제목
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 informationMicrosoft PowerPoint - chap11-포인터의활용.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 informationMicrosoft Word - src.doc
IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...
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 informationMicrosoft PowerPoint - additional01.ppt [호환 모드]
1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능
More informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationVisual Basic 반복문
학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For
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 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 informationPowerPoint 프레젠테이션
7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED
More information17장 클래스와 메소드
17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는
More informationThe Pocket Guide to TCP/IP Sockets: C Version
얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow
More informationChap 6: Graphs
그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]
More informationMicrosoft Word - ANI 취약점.doc
ANI 취약점 (MS07-017) 본문에서는최근 Windows.ani 에대한취약점으로 2006 년에이 어다시한번취약점이나타나면서마소에서핫픽스까지제공한 최근이슈가되었던취약점에대한분석이다. Hacking Group OVERTIME crash 2007.10.10 1. 취약점설명 해당취약점은조작된 ANI 파일에대하여 Windows
More informationPowerPoint 프레젠테이션
1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly
More informationPowerPoint Template
10 포인터 1 주소 Address( 주소 ) 메모리에는그메모리의저장장소의위치를나타내는주소값 주소 (address) 는 1 바이트마다 1 씩증가하도록메모리에는연속적인번호가구성 2 주소연산자 & & 변수 변수의주소값을알아내려면변수앞에주소연산자 & (ampersand) 를이용 주소값이용장단점 주소값을이용하면보다편리하고융통성있는프로그램이가능 그러나복잡하고어려운단점
More information기술문서 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라.
기술문서 14. 11. 10. 작성 XXE Attacks 작성자 : 인천대학교 OneScore 김영성 dokymania@naver.com I. 소개 2 II. 본문 2 가. XML external entities 2 나. XXE Attack 3 다. 점검방법 3 라. Exploit 5 마. 피해 6 III. 결론 6 가. 권고사항 6 I. 소개 가. 역자 본문서는
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 informationPowerPoint Presentation
#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본문서는 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 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 informationPowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
More informationMicrosoft PowerPoint - o8.pptx
메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)
More information익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost
익스플로잇실습 / 튜토리얼 Easy RM to MP3 Converter 2.7.3 ROP [ Direct RET VirtualProtect() 함수사용 ] By WraithOfGhost Easy RM to MP3 Converter_v2.7.3을이용하여 ROP 공격에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationLevel 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard
Level 4 ( hell_fire -> evil_wizard ) [hell_fire@fedora_1stfloor ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard - Local BOF on Fedora Core 3 - hint : GOT overwriting
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 information<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>
쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것
More informationCKKeyPro 적용가이드
3.20 사이버테러악성코드분석보고서 라온시큐어보안기술연구팀 작성일 : 2013. 03 페이지 : 1/15 Introduction 2013년 3월 20일오후, MBC, KBS, YTN, 농협, 신한은행, 제주은행전산망장애가동시에발생하였다. 피해기관들의호스트약 500여대에오류메시지가화면에나타났으며악성코드에감염된호스트는사용할수없는상태가되었다. 현재까지정확한침투경로가밝혀지지않고있다.
More informationMicrosoft PowerPoint - 제11장 포인터
쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationC++ Programming
C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout
More informationPowerPoint Presentation
Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section
More information<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>
쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)
More informationPowerPoint 프레젠테이션
Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])
More information취약점분석보고서 = MS =
취약점분석보고서 = MS12-037 = 2012-08-09 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. MS12-037 취약점요약... 1 1.3. MS12-037 취약점개요... 1 1.4. MS12-037 대상시스템목록... 1 2. 분석... 2 2.1. 공격기법및기본개념... 2 2.1.1 DOM(Document Object
More information0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4
Introduction to software design 2012-1 Final 2012.06.13 16:00-18:00 Student ID: Name: - 1 - 0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x
More informationvi 사용법
네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o
More information