System hacking training/Knowledge
-
gdb 명령어System hacking training/Knowledge 2018. 2. 13. 21:56
gdb -q [binary] gdb 조용히 켜기run (r) 바이너리 실행continue (c) 다음 bp 까지 실행quit (q) 바이너리 종료disas [function name] 특정함수의 어셈블리 코드 출력info [function] 함수의 정보를 출력 [break] bp(break point)의 정보 출력[register] register의 정보 출력 info break 했을 때 bp정보가 보이는데, 이중delete (del) 모든 bp 제거delete (del) [number] 특정 bp 제거 info function 할때는 바이너리 시작 전에 해야한다. -> 공유라이브러리까지 모두 출력하기 때문(지저분) break (b) function 함수에 bp를 건다.함수 프롤로그를 skip 한다. b..
-
ELF Memory Protection - DEP/NXSystem hacking training/Knowledge 2018. 2. 10. 21:44
DEP란? Data Execution Prevention의 약자로 데이터 영역에서 코드가 실행되는 것을 막는 메모리 보호 기법이다. 예를 들어 bof 취약점이 있는 프로그램을 exploit 하기 위해 return address를 쉘코드의 주소로 변조하였다고 하면 DEP가 걸려 있지 않은 경우라면 바로 쉘코드가 실행되겠지만 DEP가 걸려있는 경우라면 실행권한이 없기 때문에 쉘코드를 실행하지 않고 프로그램에 대한 예외처리 후 종료된다. 실습을 하기 위해 프로그램 하나를 만들었다. [DEP_test.c] 간단히 bof 취약점이 존재하는 프로그램이다. gets() 에 의해 bof가 발생된다. 먼저 모든 메모리 보호기법을 꺼놓고 bof 공격을 해봤다. 컴파일 옵션은 이러하다. gcc -o DEP_test DEP_..
-
ELF Memory Protection - ASCII ArmorSystem hacking training/Knowledge 2018. 2. 6. 09:55
참고 : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ ASCII-Armor이란? 직역하면 아스키 갑옷이라는 것으로 RTL 공격에 대응하기 위해 사용된다. RTL은 Return To Library의 약자이고, Return address에 libc내의 함수를 덮어씌워 쉘코드 없이 exploit하는 것이다. libc라는 공유라이브러리 내 함수로 리턴을 하여 프로그램의 실행 흐름을 조작하는 공격이기 때문에 운영체제에 ASCII-Armor 보호 기법이 적용되어있다면 공격자가 라이브러리를 호출하는 공격을 한다고 해도 NULL바이트가 삽입되므로 쉽게 exploit을 허용하지 않는다.
-
ELF Memory Protection - ASLRSystem hacking training/Knowledge 2018. 2. 6. 08:06
참고 : https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ 오늘은 리눅스에서 메모리 보호기법에 대해 정리를 해보겠습니다. 먼저 메모리 보호란?-> 컴퓨터 메모리의 사용을 제어하는 방법이다.모든 운영체제에서 중요한 쟁점중 하나이다.운영체제에서 실행하고 있는 프로세스가 자신에게 할당되지 않은 영역의 메모리에 접근하는 것을 막는 것이메모리 보호의 주된 목적이다. 메모리 보호기법에도 여러 종류가 있는데, ASLR, NX, ASCII-Armor, Stack canary 등이 있습니다. 먼저 ASLR에 대해 정리하겠습니다. [ASLR] : Address Space Layout Randomization ASLR이란 위의 약자이고, 직역하면 주소 공..
-
Memory 구조System hacking training/Knowledge 2018. 2. 3. 18:39
프로그램이 실행되기 위해서는 프로그램이 메모리 상에 로드 되어 메모리 안에 있어야한다. 운영체제는 프로그램 실행을 위해서 다양한 메모리 공간을 제공한다. 프로그램은 크게 instruction(명령)과 data로 구분되고, 5가지로 세분화 하면 Code/Data/BSS/Heap/Stack 영역으로 이루어져있다. Stack Heap BSS Data Code(text) 1. Code(text) 영역 : 실행할 코드가 저장되는 영역 / HEX 파일 or BIN파일 메모리 2. Data 영역 : 프로그램의 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역 / 프로그램의 시작과 함께 할당, 프로그램 종료시 소멸 3. BSS 영역 : 초기화가 되지 않은 데이터가 저장됨 (Data역역은 초기화된 데이터가 저장..