본문 바로가기

전체 글

(153)
[SWING] Pwnable 06 - Type Error 자료형 C언어 자료형 자료형 크기 범위 용도 (signed) char 1 바이트 정수, 문자 unsigned char (signed) short (int) 2 바이트 정수 unsigned short (int) (signed) int 4 바이트 정수 unsigned int size_t 32bit: 4 바이트 64bit: 8 바이트 생략 부호 없는 정수 (signed) long 32bit: 4 바이트 64bit: 8 바이트 정수 unsigned long (signed) long long 32bit: 8 바이트 64bit: 8 바이트 정수 unsigned long long float 4 바이트 실수 double 8 바이트 실수 Type * 32bit: 4 바이트 64bit: 8 바이트 주소 같은 자료형이더라도..
[pwnable.kr] unlink 저 파일들을 로컬 환경에 다운받으려고 설쳤는데... 굳이 그러지 않아도 되었던 것 같다. #include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; void shell(){ system("/bin/sh"); } void unlink(OBJ* P){ OBJ* BK; OBJ* FD; BK=P->bk; FD=P->fd; FD->bk=BK; BK->fd=FD; } int main(int argc, char* argv[]){ malloc(1024); OBJ* A = (OBJ*)malloc(sizeof(OBJ)); OBJ* B = (OBJ*)malloc(sizeof(OBJ)); OBJ..
[Dreamhack] tcache_dup Canary와 NX 보호 기법이 걸려 있다. Partial RELRO -> GOT overwrite로 풀 수 있을지도? // gcc -o tcache_dup tcache_dup.c -no-pie #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int create(int cnt) { int size; if (cnt > 10) { return -1; } printf("Si..
[SWING] Pwnable 05 - Tcache Poisoning Tcache Poisoning tcache를 조작하여 임의 주소에 청크를 할당시키는 공격 기법 중복 연결된 청크를 재할당하면, 할당된 청크인 동시에 해제된 청크가 된다. 아래 그림에서 왼쪽은 할당된 청크의 레이아웃이고, 오른쪽은 해제된 청크의 레이아웃이다. 할당된 청크에서는 데이터를 저장하는 부분을, 해제된 청크에서는 fd 값과 bk 값을 저장하는데 사용한다. 공격자가 중첩 상태인 청크에 임의의 값을 씀으로써, fd와 bk를 조작할 수 있으며, ptmalloc2의 free list에 임의 주소를 추가할 수 있다. 그리고 ptmalloc2이 동적 할당 요청에 free list 청크를 먼저 반환하는 것을 이용하면, 임의 주소에 청크를 할당할 수 있다. 할당한 청크에 값을 출력/조작 -> 임의 주소 읽기(Ar..
[SWING] Pwnable 05 - Double Free Bug free 함수로 청크 해제 -> ptmalloc2이 tcache나 bins에 추가하여 관리 malloc으로 비슷한 크기 동적 할당 발생 -> 청크 재할당 free list: tcache, bins free: 청크 추가 함수 malloc: 청크 꺼내는 함수 free 두 번이 가능하다면, 청크를 free list에 여러번 중복해서 추가할 수 있다! => duplicated Double Free Bug 같은 청크를 두 번 해제할 수 있는 버그 ptmalloc2에서 발생 임의 주소 읽기/쓰기/실행, 서비스 거부 등에 활용 가능 대표적인 원인은 Dangling Pointer Double Free Bug 이용하면 duplicated free list 만들기 가능 ptmalloc2: fd -> 자신 이후에 해제된 청..
[Dreamhack] uaf_overwrite 보호 기법을 확인해보자. #include #include #include #include struct Human { char name[16]; int weight; long age; }; struct Robot { char name[16]; int weight; void (*fptr)(); }; struct Human *human; struct Robot *robot; char *custom[10]; int c_idx; void print_name() { printf("Name: %s\n", robot->name); } void menu() { printf("1. Human\n"); printf("2. Robot\n"); printf("3. Custom\n"); printf("> "); } void hu..
[Dreamhack] basic_exploitation_002 환경 정보를 보면 NX 보호기법이 활성화되었다. #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(30); } void get_shell() { system("/bin/sh"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0); } m..
[SWING] Pwnable 04 - Use After Free 원룸을 임대해 거주하다가 계약이 만료되었다고 하자. 그럼 세입자는 임대인에게 원룸 접근 권한 즉, 열쇠나 비밀번호 설정 권한 등을 반납해야할 것이다. 세입자가 나가고 임대인은 원룸을 청소한 뒤 새로운 세입자를 구한다. 이 때 이전 세입자에게서 접근 권한을 회수하고, 방을 깨끗이 청소해 이전 세입자의 정보를 지우는 것은 매우 중요하다. ptmalloc2를 이용한 메모리 관리도 위의 예시와 같다. 메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화하지 않거나, 해제한 메모리를 초기화하지 않고 다음 청크에 재할당할 때 발생하는 취약점 실습 환경 Dockerfile FROM ubuntu:18.04 ENV PATH="${PATH}:/usr/local/lib/python3.6/dist-packages/b..