분류 전체보기 58

Format String Bug | dreamhack

Memory Corruption : Format String Bug format string을 인자로 사용하는 함수 : scanf, fprintf, fscanf ... 등 => 포맷 스트링을 채울 값들을 레지스터나 스택에서 가져옴 그러나, 필요로 하는 인자의 개수 & 함수로 전달된 인자의 개수를 비교하는 검증이 존재x => 악의적으로 다수의 인자요청 - 레지스터나 스택을 읽거나 쓸 수 o :: FSB (format string bug) 포맷 스트링 - specifier 형식 지정자 : d 10진수정수 / s 문자열 / x 부호없는 16진수 / n 현재까지 사용된 문자열의 길이를 저장 / p void형 포인터 -width 최소 너비 지정 : 최소 너비 지정 -> 더 짧으면 공백문자를 패딩 : 예 ) %.5..

System Hacking 2024.03.17

Out of bounds | dreamhack

Memory Corruption : out of bounds 배열 : 자료형의 element요소로 구성 , 각 위치 idx -> 배열의 임의 인덱스에 접근할 수 있는 취약점 : out of bounds 배열의 속성 배열은 연속된 메모리 공간 -> (요소의 개수) * (요소 자료형의 크기) sizeof(array) = sizeof(elem) * n 배열의 길이 length = n &sizeof[k] = array + sizeof(elem)*k Out of Bounds (OOB) OOB는 요소 참조 시, idx가 음수 or 배열의 길이를 벗어날 때 발생 ==> 배열을 벗어난 참조 임의 주소 읽기 / 쓰기 OOB로 임의의 주소 읽기 : 읽으려는 변수와 배열의 offset 을 알아야 ! -> 변수 & 배열이 같..

System Hacking 2024.03.17

PIE & RELRO (2) | dreamhack

+one gadget one-gadget / magic-gadget 란? 실행시 셸이 획득되는 코드 뭉치 ( david942j가 만들어놓은 툴) 기존 ) 셸 획득을 위해 여러 개의 gadget을 조합한 ROP chain을 구성 / RTL 공격 원가젯 ) 단일 가젯만으로도 셸을 실행할 수 있는 강력한 도구 (https://github.com/david942j/one_gadget) 원 가젯은 libc의 버전마다 다르게 존재하며, 제약 조건도 다르므로 필요에 따라 상황에 맞는 가젯을 사용하거나, 제약 조건을 만족하도록 사전에 조작해주어야 한다. : 함수에 인자를 전달하기 어려울 떄 유용하다 #!/usr/bin/env python3 # Name: fho_og.py from pwn import * p = proc..

System Hacking 2024.03.17

PIE & RELRO(1) | dreamhack

PIE와 PIC PIC (position-independent-code) 리눅스에서 ELF 는 실행파일 (executable) 또는 공유 오브젝트(shared object, 라이브러리 파일) 로 구성 공유 오브젝트는 기본적으로 relocation 가능하도록 설계 (상대 참조를 통해) => 메모리의 어느 주소에 적재되어도 코드의 훼손x ==> 이러한 코드를 PIC 라고 한다. HOW? 매핑 방식이 다름. pic 코드는 rip를 기준으로 상대 참조를 하여 무작위 주소에 매핑되어도 executable. PIE (position-independent-exceutable) 무작위 주소에 매핑되어도 실행 가능한 실행 파일 =>ASLR 도입시에 실행 파일도 무작위하게 매핑하고 싶었으나, 호환성 문제 ==> 재배치가 ..

System Hacking 2024.03.16

Bypass NX & ASLR(2) | dreamhack

ROP & basic_rop_x64 실습 Return Oriented Programming (ROP) 공격기법 : 셸 코드에서 라이브러리 함수의 실행, 다수의 리턴 가젯을 연결해서 사용하는 ROP : 현실적으로 ASLR이 걸린 환경에서 system함수를 사용하려면 process에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산 ROT 페이로드는 리턴 가젯으로 구성-> ret 단위로 여러 코드가 연쇄적으로 실행 (ROP chain) rop.c 코드 #include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Lea..

System Hacking 2024.03.16

Bypass NX & ASLR(1) | dreamhack

NX (No-eXecute) 실행에 사용되는 메모리 영역, 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법 : code 에 쓰기 권한 -> 코드를 수정하여 악의적 코드 실행 : stack, data에 실행 권한 -> return to shellcode 같은 공격 NX enabled 인 경우, stack 에 rwxp가 아닌 rw-p 가 적용되며, checksec 명령어를 통해 보호기법 확인 가능하다. + intel은 xd, 윈도우는 DEP(data execution prevention), ARM에서는 XN(execute never)이라고 칭한다. ASLR (Address Space Layout Randomization) 바이너리가 실행될 때마다, stack,heap, 공유라이브러리 등을 임의의 주소에 할..

System Hacking 2024.03.15

BOF & Canary | dreamhack

함수 호출 규약 calling convention사용하는 컴파일러, 컴파일러 지원하는 호출 규약 중 CPU 아키텍쳐에 적합한 호출 규약에 따라 종류가 다양하다.c언어 컴파일 시에 리눅스는 주로 gcc를 사용하며,gcc는 x86(32bit)에 대해 cdel 함수 호출 규약을,  x86-64(64bit)에 대해 SYSTEM V호출 규약을 사용한다. x86-64의 호출 규약 | SYSV#define ull unsigned long longull callee(ull a1, int a2, int a3, int a4, int a5, int a6, int a7) { ull ret = a1 + a2 + a3 + a4 + a5 + a6 + a7; return ret;}void caller() { callee(1234..

System Hacking 2024.03.10

Basic Pentesting 1(1)

Vulnhub 사이트 https://www.vulnhub.com/ Vulnerable By Design ~ VulnHub According to information from our intelligence network, ICA is working on a secret project. We need to find out what the project is. Once you have the access information, send them to us. We will place a backdoor to access the system later. You just focus www.vulnhub.com : 유용한 침투 테스트 환경을 제공 : 해당 강의의 실습 테스트 환경 Basic Pentesting 1(..

System Hacking 2024.01.11

winmine 핵 만들기

도움말(F1)을 누르면 지뢰의 위치를 알려주는 핵 제작 1. F1 기능을 콜하는 함수 찾기 2. 지뢰를 보여주는 함수 찾기 3. F1의 기능을 지뢰를 보여주는 함수로 대체하기 1. IDA를 통해 MS심볼 서버를 설정하여 받으면 함수명이 'sub_100000' 등의 숫자가 아닌 함수명으로 나온다. 근데 이 부분에서 오류가 나서 모든 함수에 브레이크 포인트를 걸어주었다. 지뢰찾기 창이 정상적으로 나타날 때까지의 중단점들은 풀어주며 각 함수의 기능을 확인해 주었다. 이 방식을 통해 F1을 누르면 01003D76으로 이동하는 것을 알 수 있다. 다음을 보면 01001F0F에서 call 01003D76을 호출하여 F1의 기능을 불러내는 것을 확인할 수 있다. 2. 위와 동일한 방식으로 계속해서 브레이킹 포인트를 ..

카테고리 없음 2023.11.30

video_in_video | dreamhack

문제 파일을 다운받고 Hxd에 넣으니 ' FF D8 FF E0 xx xx 4A 46' 로 시작하는 jpg파일이 있다. jpg파일이므로 EOF인 FF D9를 찾아보니 54개나 존재하고 이 jpg파일 자체가 FF D9로 끝이 나지 않는다. 맨 처음에 존재하는 FF D9가 EOF가 되도록 파일을 추출해서 jpg파일로 저장해보니 파일이 손상되지 않고 그대로 유지된다. 그래서 맨 앞의 FF D9가 찐 FF D9라고 유추하여 그 다음 오프셋을 보았다. 익숙한 문자열 'ftyp'를 확인하여 다음 오프셋부터가 mp4파일임을 알 수 있다. 그 후 앞의 jpg파일을 잘라내고 .mp4로 변경해주면 다음의 video를 얻을 수 있다. 이 과정에서 mp4의 파일 시그니쳐에 맞게 ' 00 00 00 20 66 74 79 70' ..

Digital Forensics 2023.11.25