전체 글

Pwnable/writeup

CBHC - Mind Control2

Mind Control2 (ubuntu 20.04) 1 입력시 실행 함수 ssize_t sub_40088B() { puts("Mind Control!"); printf("Size : "); __isoc99_scanf("%d", &dword_601238); printf("Your Mind : "); if ( (_BYTE)dword_601238 != 0x80 ) exit(1); return read(0, &byte_6010C0[dword_601238], 8uLL); } 두번쨰 시리즈 문제여서 그런지, 첫번쨰 문제오 유사하지만, index의 byte 위치 만큼이 0x80 이여야 진행이 된다. 이떄도 oob가 일어난다. 이는 0x180, 0x280, -0x80 등 음수부호나, 한바이트 이상에서의 데이터를 검사하..

Pwnable/writeup

CBHC - Mind Control

Mind Control (ubuntu 20.04) int sub_4008BD() { puts("Mind Print"); return puts(&byte_6010A0[index]); } 먼저 문제를 보면 2번 메뉴에서 다음과 같은 함수를 호출한다. ssize_t sub_40082F() { puts("Mind Control!"); printf("Size : "); __isoc99_scanf("%d", &index); printf("Your Mind : "); if ( index > 128 ) exit(1); return read(0, &byte_6010A0[index], 8uLL); // got overwrite // } 1번 메뉴를 입력하면 다음과 같이 size(idx)를 입력하고 이를 참고해 입력을 받는..

Pwnable/Tech

OOB - Out of Bounds

취약점 유발의 시초: 배열 (ex.. array[k]) --> 프로세스는 &array [k] = array + k*sizeof(element) 로 주소만 계산하여 씀. 이때 따로 검사하는 검사문이 존재하지 않기 때문에 개발자가 직접 검사하는 경우가 아닌 경우 OOB 발생하는 상황들 1. 인덱스 값이 음수가 될 경우 2. 배열의 길이를 벗어나 더 큰 k값을 가질 때 발생 가능한 취약점 구분 OOB Read(AAR), OOB Write(AAW) 첫 번째로 소개할 "OOB Read" OOB_Read 란 임의의 주소를 읽는 것으로 AAR 이라고도 불리며 다음과 같은 조건을 만족해야 한다. 1. 당연하지만 OOB 가 가능해야 한다. 2. 읽으려는 변수와 배열의 오프셋을 알아야 한다. char Key[256] = ..

Pwnable/writeup

Hayyim CTF 2022 Write-up

으아.. 방금 까지 작성했던거 날라가서 빠르게 적겠습니다. Warmup 문제의도: 자칭 tiny program이라고 하는 만큼 인자 전달을 위한 gadget도 없고 프로그램 내에 binding 되어 있는 함수 자체도 write, read로 매우 제약이 되어 있다. 이때 너는 익스를 할 수 있냐 일단 문제 파일들을 다운 받으면 Dockerfile 이 존재하는데, 이를 확인하면 우분투 18.04 라는 것을 알 수 있다. 이를 참고하여 libc를 구한다. 필자는 Docker를 이용하여 실제 환경을 구축하여 진행. 그리고 해당 문제의 보호 기법은 다음과 같다. Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: No..

Pwnable/Tech

SHA - Master Canary

* 스레드 스택에서 사용하는 마스터 카나리와 메인 스레드 스택에서 사용하는 마스터 카나리는 서로 위치가 다르다. 하지만 값은 상속 받기 때문에 같다. 카나리 값을 릭 할때 만약 잘 출력이 되지 않은다면, 마스터 카나리와의 offset을 구한후 마스터 가나리를 릭한다. SSP는 스택 버퍼 오버플로우로 부터 변환 주소를 보호 하는 기법으로, 스택 버퍼가 존재하는 함수 내부에서 임의로 생성된 값을 버퍼 마지막에 삽입하여 검증 과정을 거쳐 보호하는 기법이다. 이떄 카나리 값이 존재하는 위치는 TLS(Thread Local Storage)이다. 먼저 ELF 바이너리 구조를 살펴보면 각각의 목적을 가진 섹션에서 데이터를 관리함을 알수 있다. 1. 코드를 실행하기 위한 .text 2. 초기화 되지 않은 전역 변수를 ..

Pwnable/writeup

드림핵 SECCOMP 풀이.

보호되어 있는 글입니다.

Pwnable/Tech

SHA - SECCOMP(Sandbox), Bypass SECCOMP

#PIE 가 적용되지 않은 문제에선 prctl(PR_SET_SECCOMP, mode, &prog) 에서 mode를 잘 보아라. strict일 경우 1로 로 인자가(mode)설정 됨. 이떄 PIE 가 적용되 있지 않는 특정상 mode가 전역변수 code 영역에서 정의 되어 있다면, 이 주소를 IDA나 그 외 툴, 방법을 이용하여 구한 후 이를 0이외의 수로 변경하면 필터를 우회하여 아무 함수나 사용하여 공격 가능.. [Linux Security] Understand and Practice Seccomp Syscall Filter | by Nishant Sharma | Pentester Academy Blog 오늘부터 시작된 하루 한 포스팅 SHA(System Hacking Advanced) 시리즈가 시작되..

Pwnable/Tech

FSB 에 대해

C언어에서 포맷스트링을 인자로 사용하는 함수들은 함수의 이름이 f(formatted)로 끝납니다. 즉 'f'로 끝나고 문자를 다루는 함수가 포맷 스트링을 처리 한다면, 이는 ex... scanf 등 으로 추측할 수 있습니다. 포맷 스트링 구조 : %[parameter][flags][width][.precision][length]type specifier description d Signed Int s String x Unsigned hex n Length of string p void potiner width (%[]s) integer %5s * %*s --> width of arg's length ** printf("%n", &num); ---> %n is input function format, So..

Kon4
보안 공부하다, 적어보는 노트