SystemHacking/LOB(BOF원정대)(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