OOB (Out of Bound) 취약점1. Out of bound1. 배열배열이 사용하는 공간의 크기는 요소의 개수와 자료형의 크기를 곱한 값이 된다배열이 포함하는 요소의 개수를 배열의 길이라고 한다배열의 각 요소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산된다 OOB (Out of Bound)는 요소를 참조할 때 인덱스 값이 음수거나 배열의 길이를 벗어날 때 발생한다프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사하지 않는다 사용자가 인덱스의 값을 임의로 설정할 수 있다면, 배열의 주소로부터 특정 오프셋에 있는 메모리의 값을 참조할 수 있다→ 이러한 취약점을 Out of Bound 라고 한다 2. 예제 코드// Name: oob.c// Compile: gcc -o oob ..
off_by_one_000 문제풀이1. 취약점 확인먼저 checksec 으로 취약점을 확인해보자[*] '/home/gunp4ng/working/dreamhack/off_by_one_000/off_by_one_000' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: Nox86 아키텍처에 NX-bit, Partial RELRO 가 적용된 것을 볼 수 있다 1. C 코드#include #include #include #include #include char cp_na..
off_by_one_001 문제풀이1. 취약점 확인먼저 checksec 으로 취약점을 확인해보자[*] '/home/gunp4ng/study/SF/off_by_one_001/off_by_one_001' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) Stripped: Nox86 아키텍처에 Partial RELRO 가 적용된 것을 확인할 수 있다 1. C 코드#include #include #include #include void alarm_handler(){ puts("TIM..
Off by one1. Off by oneOff-by-one 은 문자열의 범위 1byte 로 인해 발생하는 취약점이다 문자열의 마지막에는 반드시 NULL 값이 들어간다→ 배열에 문자열을 저장할 때는 반드시 NULL 값까지 고려해서 저장해야 한다 하지만 정해진 공간을 모두 문자열로 채우면, NULL 값은 SFP 를 침범하게 된다 2. 함수 에필로그1. leave함수의 마지막에는 leave 와 ret 명령이 있다mov esp, ebppop ebpleave 는 위와 같은 명령을 수행한다 leave 에서는 스택 포인터를 함수를 호출하기 이전의 주소로 되돌리는 작업을 한다 스택을 살펴보자mov esp, ebp 실행 전의 스택 상태는 위와 같다mov esp, ebp 를 실행하면 esp 가 ebp 가 가리키는 곳으..
PIE (Position Independent Executable)1. PIEPIE (Position Independent Executable) 란?전체가 위치 독립 코드(PIC) 로 이뤄진 실행 가능한 바이너리이다. 무작위 주소에 매핑되어도 실행 가능한 실행 파일이다.ASLR 이 코드 영역에도 적용되게 해주는 기술이다.→ ASLR 을 적용해도 코드 영역의 주소는 변하지 않는다. PIE 는 재배치가 가능하기 때문에,ASLR 이 적용된 시스템에서는 실행 파일도 무작위 주소에 적재된다. 반대로, ASLR 이 적용되지 않은 시스템에서는 PIE 가 적용된 바이너리라도 무작위 주소에 적재되지 않는다. 리눅스는 기본적으로 ASLR 이 적용된 상태이기 때문에PIE 가 적용되면 바이너리가 실행될 때마다 바이너리의 주소..
PIC (Position-Independent Code)1. PIC ?리눅스에서 ELF 는 실행파일(Executable)과 공유 오브젝트(Shared Object, SO) 로 2가지가 있다.실행파일 : 일반적인 실행파일공유 오브젝트 : 라이브러리 파일공유 오브젝트는 재배치(Relocation)가 가능하도록 설계되어 있다.재배치는 메모리의 어느 주소에 적재되어도 코드의 의미가 훼손되지 않는 것을 의미한다. 재배치가 가능한 코드를 Position-Independent Code (PIC) 라고 한다. 2. 정적 라이브러리 (Static Link Library)1. 정적 라이브러리정적 라이브러리(Static Library) 는 프로그램 컴파일 시 Linking 단계에서라이브러리가 제공하는 코드를 복사하여 실..
ropasaurusrex 문제 풀이1. 취약점 확인먼저 checksec 으로 취약점을 확인해보자[*] '/home/gunp4ng/pwnable/Wargame/ropasaurusrex/ropasaurusrex' Arch: i386-32-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)x86 아키텍처에 NX-bit 를 제외하곤 아무 보호기법도 걸려있지 않은 것을 알 수 있다. C 코드는 주어지지 않고 바이너리 파일만 주어졌다.gdb 로 어셈블리를 확인해보자main 함수가 없는 것을 알 수 있다.read, write 함수는 있다..