SystemHacking(95)
-
[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