본문 바로가기

SYSTEM HACKING

(18)
[SWING] Pwnable 06 - Path Traversal Path Traversal 권한 없는 경로에 프로세스가 접근할 수 있는 취약점 리눅스 파일 시스템이 아닌 서비스 로직 관점에서의 권한 사용자가 접근하려는 경로에 대한 검사가 미흡하여 발생 임의 파일 읽기 및 쓰기의 수단을으로 활용될 가능 #include #include #include const int kMaxNameLen = 0x100; const int kMaxPathLen = 0x200; const int kMaxDataLen = 0x1000; const char *kBasepath = "/tmp"; int main() { char file_name[kMaxNameLen]; char file_path[kMaxPathLen]; char data[kMaxDataLen]; FILE *fp = NULL; ..
[SWING] Pwnable 06 - Command Injection 프로그램을 개발할 때 어떤 기능을 구현함에 있어서, 스스로 코드를 작성하기보다 system 함수로 이미 설치된 소프트웨어를 사용하는 것이 훨씬 쉽다는 것은 자명하다. 그러나 함수의 인자를 셸 명령어로 전달하기에, 명령어를 실행해주는 함수를 잘못 사용하면 취약점이 발생한다. Command Injection 사용자의 입력을 시스템 명령어로 실행되게 하는 것 명령어를 실행하는 함수에 사용자가 임의의 인자를 전달할 수 있을 때 발생 임의 IP에 ping을 전송하기: system("ping [user-input]") 임의 파일 읽기: system("cat [user-input]") 사용자의 입력을 제대로 검사하지 않으면 메타 문자 때문에 임의 명령어가 실행 ping [user-input] 실행 시 공격자가 a; ..
[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 바이트 주소 같은 자료형이더라도..
[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 -> 자신 이후에 해제된 청..
[SWING] Pwnable 04 - Use After Free 원룸을 임대해 거주하다가 계약이 만료되었다고 하자. 그럼 세입자는 임대인에게 원룸 접근 권한 즉, 열쇠나 비밀번호 설정 권한 등을 반납해야할 것이다. 세입자가 나가고 임대인은 원룸을 청소한 뒤 새로운 세입자를 구한다. 이 때 이전 세입자에게서 접근 권한을 회수하고, 방을 깨끗이 청소해 이전 세입자의 정보를 지우는 것은 매우 중요하다. ptmalloc2를 이용한 메모리 관리도 위의 예시와 같다. 메모리 참조에 사용한 포인터를 메모리 해제 후에 적절히 초기화하지 않거나, 해제한 메모리를 초기화하지 않고 다음 청크에 재할당할 때 발생하는 취약점 실습 환경 Dockerfile FROM ubuntu:18.04 ENV PATH="${PATH}:/usr/local/lib/python3.6/dist-packages/b..
[SWING] Pwnable 04 - ptmalloc2
[SWING] Pwnable 04 - Format String Bug Format String 포맷 스트링을 인자로 사용하는 C언어 함수: printf, scanf, fprintf, fscanf, sprintf, sscanf 등 함수 이름이 f (formatted)로 끝나고 문자열을 다루는 함수 %[parameter][flags][width][.precision][length]type 형식 지정자(specifier) : 인자를 어떻게 사용할지 지정 형식 지정자 설명 d 부호있는 10진수 정수 s 문자열 x 부호없는 16진수 정수 n 인자에 현재까지 사용된 문자열의 길이를 저장 p void형 포인터 Format String Bug 포맷 스트링 함수를 잘못 사용하여 발생하는 버그, FSB 포맷 스트링을 사용자가 입력할 수 있을 때, 공격자는 레지스터/스택을 읽고, 임의 주소 ..