Pwnable
[Dreamhack] hook - write up
Index문제보호기법 확인hook.c문제 풀이1. Libc Leak2. size 입력3. __free_hook 주소(=ptr)와 oneshot 가젯(=ptr+1) 입력4. free(ptr) 수행 시 free_hook으로 oneshot 가젯 실행으로 셸 획득익스플로잇 hookDesciption 이 문제는 작동하고 있는 서비스(hook)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 _hook Overwrite 공격 기법으로 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다.https://dreamhack.io/wargame/challenges/52/ 문제보호기법 확..
[Dreamhack] out of bound - write up
Index문제보호기법 확인out_of_bound.c문제 풀이익스플로잇 out_of_boundDescription 이 문제는 서버에서 작동하고 있는 서비스(outofbound)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득하세요. "flag" 파일을 읽어 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다.https://dreamhack.io/wargame/challenges/11/문제보호기법 확인NX와 Canary가 걸려있고, 32비트 바이너리이다. out_of_bound.c#include #include #include #include #include char name[16]; char *command[10] = { "cat..
[Dreamhack] oneshot - write up
Index문제보호기법 확인oneshot.c문제 풀이1. RET로 부터 변수 거리 확인2. oneshot 가젯 주소 얻기3. Libc Leak익스플로잇익스플로잇 오류 및 해결방법 oneshotDescription 이 문제는 작동하고 있는 서비스(oneshot)의 바이너리와 소스코드가 주어집니다. 프로그램의 취약점을 찾고 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다.https://dreamhack.io/wargame/challenges/34/oneshot 가젯을 이용하여 문제를 풀 수 있다.환경은 Ubuntu 18.04(glibc 2.27)이다. Ubuntu 20.04(glibc 2.31..
[Dreamhack] basic_rop_x64 - write up
Index문제보호기법 확인basic_rop_x64.c문제 풀이1. 바이너리의 PLT 확인2. 사용할 함수 인자에 맞는 Gadget 구하기3. 익스플로잇 전략익스플로잇익스플로잇 오류 및 해결방법 basic_rop_x64Description 이 문제는 서버에서 작동하고 있는 서비스(basicropx64)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다.https://dreamhack.io/wargame/challenges/29/이 문제는 64비트 버퍼오버플로우를 익스플로잇하는 가장 기본적..
[Dreamhack] basic_rop_x86 - write up
Index문제보호기법 확인basic_rop_x86.c문제 풀이1. 사용할 함수 인자에 맞는 Gadget 구하기2. RET 주소를 변조해서 puts(puts@got); 호출3. BSS 영역에 "/bin/sh" 문자열 저장4. system(&bss)로 쉘 획득선행지식PLT & GOT함수 호출 규약함수 프롤로그/에필로그익스플로잇 basic_rop_x86Description 이 문제는 서버에서 작동하고 있는 서비스(basicropx86)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다. 플래그의 형식은 DH{...} 입니다.htt..
[Mitigation] Stack Canary - 스택 카나리
스택 카나리(stack canary)란? - 버퍼와 SFP 사이에 임의의 데이터를 삽입하여 버퍼 오버플로우를 탐지하는 기법이다. 에필로그에서 해당 값을 확인하여 메모리가 변조되었는지 확인한다. 위 사진과 같은 형태로 버퍼와 SFP(이전 스택 프레임의 rbp) 사이에 canary 값이 들어가게 되어 메모리 값이 변조 되었는지 확인하는 것이다. * 스택 프레임 구조를 모른다면 -> https://she11.tistory.com/122 을 먼저 읽어보세요! canary 직접 확인하기 - dreamhack.io 의 canary 예제 코드를 통해 직접 확인해보자. 먼저, 예제 코드를 이용하여 카나리 옵션이 설정되지 않은 바이너리와 설정된 바이너리를 생성하고 실행한다. 왼쪽 사진은 버퍼가 터져 segmentatio..
[picoCTF 19] flag_shop Writeup - 정수 오버플로우
정수 오버플로우(Integer Overflow) 문제이다. https://play.picoctf.org/practice/ 문제를 풀기 위해서 nc 접속. nc를 접속했을 때의 메뉴 선택창이 나온다. 1번을 입력하면 계좌의 현재 잔고가 나온다. 2번 메뉴에서 있는 1337 플래그를 구매하려고 하면 가격은 100000달러이고, 수량이 1개 있다고 한다. 사보려고 했지만 잔고에 충분한 달러가 없기 때문에 구매할수 없다. 2번 메뉴의 1번은 입력에서 900을 곱해서 달러를 반환해주는 것 같다. 하지만 이후 잔고를 다시 확인했을 때도 달러는 1100이다. 왜 그러는지 문제에서 소스코드를 다운받아서 확인해보자. #include #include int main() { setbuf(stdout, NULL); int c..
버퍼 오버플로우 공격(Buffer Overflow Attack)
버퍼 오버플로우(Buffer Overflow Attack)란? - 버퍼란 데이터가 저장되는 메모리 공간이다. 이 프로그램이 실행될 때 이 메모리 공간에 버퍼의 크기보다 더 많은 입력을 받는다면 버퍼 오버플로우가 발생한다. 쉽게 말해서 크기가 정해져 있는 컵에 물을 넘치게 받았다고 생각하면 된다. 이 경우 해커가 특정 메모리 값을 임의로 변조할 수 있기 때문에 취약점이 된다. 위 그림과 같이 buf1의 크기가 5byte이고 buf2의 크기도 5byte이라고 가정해보자. 여기서 buf1 주소에 입력을 받게 되었을 때, 입력 크기를 제한해주지 않는다면, 5byte를 넘어서는 입력 값을 줄 수 있다. 이 경우 buf1의 입력을 통해 buf2의 공간의 값을 임의로 바꿀 수 있다. buf1에 'abcdefgh'라는..