Wargame Site/BOF
-
|Lord Of Bufferoverflow| #4 goblin - orcWargame Site/BOF 2019. 5. 19. 23:36
역시나 접속성공과 동시에 확인한건 '나 자신'!! 음... 이제까지 했던 방식과 별반 다르지 않아 보인다. 환경변수를 사용하지도, \xbf 외의 값을 사용하지도 않아봤기 때문이다. core Dump Analysis 로 가보자~ 우선 RET 구간을 \xbf * 4 로 주었다. 그 이유는 필터에 안걸리기 위해서이다. 기존의 방식대로 해결 되었다 ㅎㅎ 깰끔하게 클리어 ~ 이제부터는 필터링 조건이 뭔가 많이 붙기 시작할 거 같은 느낌적인 느낌이 든다 ㅎㅎ
-
|Lord Of Bufferoverflow| #3 cobolt - goblinWargame Site/BOF 2019. 5. 19. 23:15
이제 습관이 되버린 Know Myself ~~ 우선 goblin.c 파일을 열어보도록 하자. 이번에는 gets 라는 BOF 에 취약한 함수를 사용했다. goblin 함수의 인자를 통해서가 아닌, goblin 실행 후 입력을 해주어야하는 방식의 문제이다. 문제해결을 본격적으로 시작하기 전에, 파이프라인 (|) 의 사용에 대해서 알아보도록 하자! ls | grep [문자] 과 같은 형태를 자주 사용해보았을 것이다. 이 때, ls 의 출력의 결과가 grep 의 입력으로 들어가게 되고, [문자] 를 검출하는 것이다. 궁금하다면, grep [문자] 를 따로 실행시켜보도록 한다. 하지만, 이 경우 문제가 있다. ls | grep [문자] 의 경우 ls 의 결과만을 입력으로 받기 때문에 입력으로 들어온 것을 처리하고..
-
|Lord Of Bufferoverflow| #2 gremlin - coboltWargame Site/BOF 2019. 5. 19. 14:34
어느 사이, 그냥 쉘이 열리면 습관이 되버렸다. ㅎㅎ 우선 소스코드를 보도록 한다. 우선 gremlin 에서 설명한 것처럼 bash2 를 키고, cp 를 통해 gremlin 권한의 cobola 파일을 만들도록 한다, (gdb 를 하기 위함) 이전 문제와 별다를게 없어보인다. 같은 방식으로 접근해보자. buffer 와 SFP 를 "A" 로 가득채우고, RET 를 "BBBB", SHELLCODE 부분으로 쓰일 부분을 "CCCC" 로 채워보도록 한다. 이번문제 부터는 'Core Dump Analysis' 를 통한 방법으로 문제를 풀어보려고 한다. Core 란 프로그램 실행 시 치명적인 오류가 자동으로 기록 되는 덤프를 말한다. 따라서, EIP 가 "0x42424242" 를 실행 했을 때의 상황을 그대로 dum..
-
|Lord Of Bufferoverflow| #1 gate - gremlinWargame Site/BOF 2019. 5. 18. 23:21
미뤄왔던 포스팅을 다시 시작해보려한다 ^^ LOB 의 첫 번째 관문은 'gate' 이다. id , pw 가 각각 'gate' 이다. 우선, 자신이 누구인지 먼저 확인해보도록 한다. 'gate' 다. 자기 자신을 확인해야만 권한을 정확히 파악할 수 있고, 접근할 수 있는 파일의 범위를 정확히 파악할 수 있기 때문이다. 보이는 것은 gremlin.c 의 읽기, 쓰기 권한과 gremlin 실행 파일의 읽기 실행 권한이다. gremlin 파일의 setUID, setGID 가 눈에 들어온다. 우선은 코드를 살펴보자. buffer 를 strcpy 즉, 버퍼오버플로우에 취약한 함수를 통해 받고 있다. strcpy 를 이용한다면 SFP, RET 를 포함한 스택의 내용을 모두 바꿔 버릴 수 있다. 그럼 버퍼를 가득 채우..
-
BOF ASLRWargame Site/BOF 2019. 4. 24. 12:49
짧지만, bof 를 실습하는 사람들에게 중요한 ASLR 기능을 설정 해제하는 방법을 다뤄보도록 한다. (사실 저 이거때문에 완전 고생했습니다 ^^ ) 먼저 ASLR 이란? 먼저 ASLR 이란 기능에 대해서 알아보도록 하자. ASLR( Address Space Layout Randomization ) 한 마디로 실행 할 때마다 주소가 바뀌는 기능을 말한다. 메모리 보호 기법 중 하나이다. gdb 를 통해 run 을 실행할 때마다 주소가 바뀌는 것을 볼 수 있다. 만약 실습 도중 이러한 기능이 켜져 있다는 것이 어떤 문제를 일으킬까? 바로 breakpoint 같은 특정 주소를 지칭하는 명령어를 사용할 수 없다. 실습자에게 가히 충격적인 기능이 아닐 수 없다. 그.렇.다.면? 어떻게 ASLR 을 해제할까 1...
-
BOF 들어가기 앞서Wargame Site/BOF 2019. 4. 24. 00:34
1. RET, SFP BOF 에서 자주 등장하는 RET, SFP 라는 용어가 무슨 뜻을 지니고 있는지 알아보자. 1. RET 돌아갈 위치를 의미하며, 에필로그 과정에서 만나게되는 saved EIP 를 가르키는 용어로 BOF 에서 정말 중요한 역할을 한다. 바로이 RET 를 변조하여, 실행위치를 변조하는 경우가 많다. 2. SFP Saved Frame Pointer 의 약자로 이전 프레임의 EBP 를 의미한다. 2. GDB 명령어 OllyDBG 에만 친숙한 터라 ELF 의 리버싱에서 막혀, Ghidra 를 사용하다가 동적 분석을 위해 gdb 를 사용해보기로 했다. CLI 기반이라 적응하는데 정말 오래걸릴 것 같다는 느낌이 들지만 동적 분석을 위해 어쩔 수 없는 관문이라고 생각한다. gdb -q [ 특정파일..
-
BOF 준비운동 (4)Wargame Site/BOF 2019. 4. 23. 13:53
STEP8 > Epilogue 자 이번엔 특정 프레임의 수행이 끝난 뒤, Stack 을 정리해주는 과정을 공부해보자. Epilogue 는 leave 와 ret 로 이루어져있고, 이과정을 풀어서 어셈블리어로 표기하면 다음과 같다. MOV ESP, EBP POP EBP POP EIP JMP EIP 1. MOV ESP, EBP 현재 프레임의 꼭대기를 가르키는 ESP 에 스택의 밑바닥 값을 가르키는 EBP 의 값을 넣는다. 프레임 내의 할당된 공간 ( Prolog 에서 SUB ESP, N ) 을 해제시킨다. (값은 그대로 남아있다.) 2. POP EBP 이전 프레임의 밑바닥을 가르키는 값을 EBP 에 저장한다. 슬슬 돌아갈 준비를 하고있다. 3. POP EIP 돌아가야할 주소가 담긴 부분을 스택의 꼭대기에서 P..
-
BOF 준비운동 (3)Wargame Site/BOF 2019. 4. 22. 17:13
STEP6 > 인자 함수의 인자가 없는 경우 STEP 4 에서 다뤘던 방식으로 프로그램이 작동한다. 하지만, 인자가 있는 경우에 Stack 에서는 인자를 처리해주는 과정이 추가된다. 한 마디로 정리해서 인자들을 끝에서 부터 PUSH 하는 과정이 추가된다. 위의 사진 처럼 c, b, a 의 순으로 스택에 저장되는 것을 알 수 있다. 이 다음 Sum Function 의 Prolog 가 진행되며, Sum 함수가 Stack 에 쌓이는 최종 모습은 다음과 같다. STEP7 > 지역변수와 인자 자, 이제 좀더 들어가서 지역변수와 인자에 구분되는 특징을 이해해보자. 자 바로 지역변수와 인자를 접근하는 방법이다. 결론부터 말하자면 인자는 EBP 를 기준으로 + 방향에 놓이게 되고, 지역변수는 EBP 를 기준으로 - 방..