[Dreamhack] PWN Santa_claus_is_coming_to_town

드림핵 포너블 Santa_claus_is_coming_to_town 문제풀이

2월 4, 2023 · 7 분 · Yunjoker

[Dreamhack] PWN ssp_000

드림핵 포너블 ssp_000 문제풀이

12월 21, 2022 · 3 분 · Yunjoker

[Dreamhack] PWN environ

드림핵 포너블 environ 문제풀이

12월 20, 2022 · 3 분 · Yunjoker

Dreamhack 시스템 해킹 basic_rop_x64

이번에 풀어볼 문제는 기존의 32비트 환경 pwn이 아니라 64비트 환경 pwn이다. 기본적으로 32비트와 64비트는 함수 호출 규약에 다른점이 있다. 기존 32비트 환경에서는 함수 실행에 필요한 인자들을 스택에 저장해 하나씩 불러와 사용한다면 64비트 환경은 레지스터에 먼저 저장한 후 레지스터보다 많은 인자가 필요하면 스택을 이용한다. 이러한 차이점으로 32비트 환경에서는 버퍼 오버플로우 등으로 덮어 씌우기만 하면 성공했던 시스템 해킹이 64비트로 오면서 gadget(가젯)을 이용해 함수 실행에 필요한 인자를 넣어줘야 한다 이번 문제는 ROP(Return-oriented programming)에 관한 문제이며 이 ROP 기법은 공격자가 실행 공간 보호(NXbit) 및 코드 서명(Code signing)과 같은 보안 방어가있는 상태에서 코드를 실행할 수있게 해주는 기술이다. ...

5월 21, 2022 · 4 분 · Yunjoker

Dreamhack sint 문제풀이

오랜만에 풀어보는 pwn문제이다. 드림핵에 베이직으로 있는 sint의 취약점을 이용한 문제로 문제이름 또한 sint이다. 문제 압축파일을 다운 받으면 .c로 된 코드 파일과 컴파일한 elf 파일을 제공한다. 우선 .c 파일을 열어보면 내용은 다음과 같다. #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> 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(30); } void get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shell); printf("Size: "); scanf("%d", &size); if (size > 256 || size < 0) { printf("Buffer Overflow!\n"); exit(0); } printf("Data: "); read(0, buf, size - 1); return 0; } 위 코드를 살펴보면 Size를 입력 받고 if 구분을 통해 조건 비교 후 Data를 read 함수로 입력받는 구조이다. if문을 보면 256보다 크거나, 0보다 작으면 printf("Buffer Overflow!\n");를 실행하고 코드를 종료한다. 따라서 Size에 입력되는 값은 0~256까지의 범위를 가질 수 있다. ...

5월 3, 2022 · 4 분 · Yunjoker