전체 글(333)
-
[16] assassin -> zombie_assassin ( Fake EBP & leaveret )
assassin / pushing me away[assassin@localhost assassin]$ /bin/bash2[assassin@localhost assassin]$ export SHELL=/bin/bash2 [ zombieassassin.c ] 123456789101112131415161718192021222324252627282930 #include #include main(int argc, char *argv[]){ char buffer[40]; if(argc EBP: Fake EBP 2> main retpop eip=> EIP: &leaveret 3> leavemov esp,ebp=> ESP: Fake EBP(&buffer+4)pop ebp=> EBP: &buffer+4에 있는 값 4> ..
2017.11.20 -
[15] giant -> assassin ( Data Section ( leave & ret ) )
giant / one step closer[giant@localhost giant]$ /bin/bash2[giant@localhost giant]$ export SHELL=/bin/bash2 [ assassin.c ]123456789101112131415161718192021222324252627282930313233 #include #include main(int argc, char *argv[]){ char buffer[40]; if(argc 스택 사용x if(argv[1][47] == '\x40') { printf("library retbayed you, too!!\n"); exit(0); } => 라이브러리 사용 x strcpy(buffer, argv[1]); printf("%s\n", buffe..
2017.11.20 -
[14] bugbear -> giant ( RTL , execve )
bugbear / new divide[bugbear@localhost bugbear]$ /bin/bash2[bugbear@localhost bugbear]$ export SHELL=/bin/bash2 [ giant.c ]1234567891011121314151617181920212223242526272829303132333435363738394041#include #include #include main(int argc, char *argv[]){ char buffer[40]; FILE *fp; char *lib_addr, *execve_offset, *execve_addr; char *ret; if(argc execve ( &"/bin/sh" , 배열 { &/bin/sh,NULL} 의 주소, NULL ..
2017.11.20 -
[13] darkknight -> bugbear ( RTL ( Return To Library ) )
darkknight / new attacker[darkknight@localhost darkknight]$ /bin/bash2[darkknight@localhost darkknight]$ export SHELL=/bin/bash2 [ bugbear.c ] 1234567891011121314151617181920212223242526 - RTL1*/ #include #include main(int argc, char *argv[]){ char buffer[40]; int i; if(argc
2017.11.17 -
RTL 공격기법 원리 이해하기 예제 ( Omega Project )
RTL ( Return To Library )스택에 실행권한을 없애 스택에 쉘 코드를 올리는 것을 막는 오버플로우 대응책을 우회할 수 있는 기법간단히 말하면 프로세스의 RET 주소를 다른 함수의 주소로 변조시키면 해당 함수로 Jmp되어 해당 함수가 실행 된다오메가 프로젝트에서 발전된 기법이다 예제를 통해서 알아보자 간단한 C프로그램을 하나 작성하습니다 ( #vi omega.c )간단한 printf 함수를 호출하는 func1, func2, func3, func4 함수들을 선언했고, main함수에는 버퍼오버플로우 취약점이 존재한다123456789101112131415161718192021222324252627#include void func1(){ printf("Call Func1\n");}void func..
2017.11.17 -
[12] golem -> darkknight ( Frame Pointer Overflow )
golem / cup of coffee[golem@localhost golem]$ /bin/bash2[golem@localhost golem]$ export SHELL=/bin/bash2 [1] FPO ( Frame Pointer Overflow ) 조건1. 1byte의 오버 플로우가 일어나야 한다 ( saved ebp 의 값을 변조하여 함수의 실행 루틴을 바꿀 수 있다 )2. 메인 함수 이외의 서브 함수가 반드시 필요하다 2.1. leave & ret 의 실행이 두 번 일어나야 한다 ( leave = mov esp,ebp & pop ebp / ret = pop eip )2.2. sub's leave : pop ebp => EBP = Fake ebp2.3. sub's ret : pop eip => mai..
2017.11.17 -
[11] skeleton -> golem [ Hooking & LD_PREROAD ]
skeleton / shellcoder[skeleton@localhost skeleton]$ /bin/bash2[skeleton@localhost skeleton]$ SHELL=/bin/bash2 [ golem.c ]1234567891011121314151617181920212223242526272829303132333435363738/* The Lord of the BOF : The Fellowship of the BOF - golem - stack destroyer*/ #include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; if(argc saved eip 만 남기고 모든 스택 초기화 me..
2017.11.17 -
[10] vampire -> skeleton ( Stack Memory 실제구조 & Symbolic Link )
vampire / music world[vampire@localhost vampire]$ /bin/bash2[vampire@localhost vampire]$ SHELL=/bin/bash2 [ skeleton.c ]12345678910111213141516171819202122232425262728293031323334353637383940414243444546 #include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i, saved_argc; if(argc 48){ printf("argument is too long!\n"); exit(0); } // argc saver saved_argc = a..
2017.11.17 -
[9]troll -> vampire ( Stack Memory Range )
troll / aspirin[troll@localhost troll]$ /bin/bash2[troll@localhost troll]$ SHELL=/bin/bash2 [ vampire.c ] 123456789101112131415161718192021222324252627282930313233343536 /* The Lord of the BOF : The Fellowship of the BOF - vampire - check 0xbfff*/ #include #include main(int argc, char *argv[]){ char buffer[40]; if(argc [ gdb 분석 ][troll@localhost troll]$ cp vampire vampire.cp[troll@localhost trol..
2017.11.17 -
[8] orge -> troll ( argv[0] , Symbolic Link )
orge / timewalker[orge@localhost orge]$ /bin/bash2[orge@localhost orge]$ SHELL=/bin/bash2 [ troll.c ]12345678910111213141516171819202122232425262728293031323334353637383940414243 #include #include extern char **environ; main(int argc, char *argv[]){ char buffer[40]; int i; // here is changed if(argc != 2){ printf("argc must be two!\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(en..
2017.11.17