본문 바로가기

전체 글

(203)
[DreamHack] PIE, RELRO, Out of Bounds Keywords && Quiz Position Independent Executable (PIE) 상대 참조(Relative Addressing): 어떤 값을 기준으로 다른 주소를 지정하는 방식Position Independent Code (PIC): 어떤 주소에 매핑되어도 실행 가능한 코드. 절대 주소를 사용하지 않으며 일반적으로 rip를 기준으로 한 상대 주소를 사용함.Position Independent Executable (PIE): 어떤 주소에 매핑되어도 실행 가능한 실행 파일. PIE의 코드는 모두 PIC이다. 자체적으로 보호 기법은 아니지만 ASLR이 적용된 환경에서는 시스템을 더욱 안전하게 만드는 효과가 있음. 최신 gcc는 기본적으로 PIE 컴파일을 함.Partial Overwrite: 어떤 값을 일부분만 덮는 공격 ..
[DreamHack] Out of bound Write-Up ASLR이 적용되어 있고, 바이너리에는 NX와 Canary가 적용되어 있고, PIE는 적용 XASLR이 적용되어 있기 때문에 실행 시마다 스택, 라이브러리 등의 주소가 랜덤화NX가 적용되어 있기 때문에 임의의 위치에 셸코드를 집어넣은 후 그 주소의 코드를 바로 실행 XCanary가 적용되어 있기 때문에 스택 맨 위에 존재하는 SFP, RET과 그 뒷 주소 변경불가PIE가 적용되지 않기 때문에 해당 바이너리가 실행되는 메모리 주소가 랜덤화 X (=데이터 영역의 변수들은 항상 정해진 주소에 할당된다.) 문제 코드#include #include #include #include #include char name[16];char *command[10] = { "cat", "ls", "id", "p..
[Dreamhack] basic_exploitation_001 Write-Up Description이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_001)의 바이너리와 소스 코드가 주어집니다.프로그램의 취약점을 찾고 익스플로잇해 "flag" 파일을 읽으세요."flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다.플래그의 형식은 DH{...} 입니다. #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handle..
[DreamHack] Return Address Overwrite Write-Up // Name: rao.c// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie#include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0);}void get_shell() { char *cmd = "/bin/sh"; char *args[] = {cmd, NULL}; execve(cmd, args, NULL);}int main() { char buf[0x28]; init(); printf("Input: "); scanf("%s", buf); return 0;}buf 배열은 0x28 바이트 크기로 선언된 40바이트 크기의 버퍼인데, scanf 함수를 사용하여..
[DreamHack] shell_basic Write-Up Description입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다.main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다.flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다.감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요!플래그 형식은 DH{...} 입니다. DH{와 }도 모두 포함하여 인증해야 합니다.  문제에서는 execve, execveat를 사용하지 못하도록 했으며, flag를 읽어야 하므로 orw (Open Read Write)  셸코드를 사용하는 것으로 보인다.  // shell_basic.c// Compile: gcc ..
[DreamHack] hook Write-Up 문제코드 // gcc -o init_fini_array init_fini_array.c -Wl,-z,norelro#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);} void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60);} int main(int argc, char *argv[]) { long *ptr; size_t size; initialize(); printf("st..
[DreamHack] oneshot Write-Up Description이 문제는 작동하고 있는 서비스(oneshot)의 바이너리와 소스코드가 주어집니다.프로그램의 취약점을 찾고 셸을 획득한 후, "flag" 파일을 읽으세요."flag" 파일의 내용을 워게임 사이트에 인증하면 점수를 획득할 수 있습니다.플래그의 형식은 DH{...} 입니다.   one_gadget은 Glibc 바이너리 내에서 쉘을 실행하는 특정 코드 시퀀스를 의미한다. 이 가젯을 통해 특정 조건이 충족되면 직접 쉘을 실행할 수 있다. one_gadget의 가장 큰 장점은 '단일 가젯으로 쉘을 획득할 수 있다'는 점이다.   **one_gadget을 이용한 익스플로잇 단계One_gadget 위치 찾기: one_gadget 도구(특정 Glibc 바이너리에서 이러한 가젯을 찾는 도구)를 사용하..
[DreamHack] fho 문서화 | docker로 ubuntu 18.04에서 pwnable환경 세팅 : pwndbg.ver | 도커 파일 옮기기 Exploit Tech: Hook Overwrite | Dreamhack Hook==갈고리Hooking(후킹)  : CS에서는 OS가 어떤 코드를 실행하려 할 때, 이를 낚아채어 다른 코드가 실행되게 하는 것. 이때 실행되는 코드를 Hook(훅)이라고 부름 Hook 을 이용한 공격방법 : 훅 오버라이트(Hook Overwrite) - 훅의 특징을 이용한 공격 기법Glibc 2.33 이하 버전에서 libc 데이터 영역에는 malloc()과 free()를 호출할 때 함께 호출되는 훅(Hook)이 함수 포인터 형태로 존재한다. 이 함수 포인터를 임의의 함수 주소로 오버라이트(Overwrite)하여 악의적인 코드를 실행하는 기법. Full RELRO가 적용되더라도 libc의 데이터 영역에는 쓰기가 가능하므로 F..