세종대학교 메모리 익스플로잇: 해킹과 방어 과정 실습 코드 저장소. 메모리 취약점(buffer overflow, shellcode, format string, NX/ASLR 등)의 공격·방어 기법을 주차별로 정리한다.
Apple Silicon(ARM64) 호스트에서 Docker + QEMU 에뮬레이션으로 AMD64 Ubuntu 20.04 환경을 사용한다.
.devcontainer/ 기반으로 VS Code Dev Containers에서 바로 열 수 있다.
# VS Code: Command Palette → "Dev Containers: Reopen in Container"
# 또는 CLI
docker build --platform linux/amd64 -t memory-lab .devcontainer/
docker run --platform linux/amd64 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v "$(pwd)":/workspace -it memory-lab- 빌드:
gcc(multilib-m32/-m64),make,nasm - 디버깅:
gdb+ pwndbg,ltrace,strace,objdump - 익스플로잇: pwntools, ROPgadget, one_gadget, checksec
- 유틸:
hexdump,socat,netcat,tmux
- Docker Desktop → Settings → General → Use Rosetta for x86_64/amd64 emulation 활성화
week4/ — GDB & pwntools 입문
- gdb1.c, gdb1 — GDB 디버깅 실습 대상
- input.c — 입력 처리 예제
- pwntool1.py ~ pwntool4.py — pwntools 기본 사용법
week5/mem-hack/ — 스택 기반 공격·방어
part1/ — 메모리 레이아웃
- memory_layout.c — 프로세스 메모리 구역(text/data/bss/heap/stack)
- stack-frame1.c, stack-frame2.c — 스택 프레임 구조
part2/ — 스택 오버플로우 & 쉘코드
stack1.c~stack5.c,stack5-NX.c— 단계별 스택 오버플로우 취약점- exploit_stack1.py ~ exploit_stack3.py — pwntools 익스플로잇
- myshellcode.s, myshellcode2.s, shellcode.c — 쉘코드 작성/테스트
- func_pointer.c, ret.c, nx.c, systemfunc.c — RET 변조, NX, Return-to-libc
part3/ — Format String, ASLR, SP(Stack Protector)
- format1.c ~ format3.c, fmtest1.c ~ fmtest3.c — 포맷 스트링 취약점
- ASLRtest.c — ASLR 동작 확인
- SP1.c, SP2.c — 스택 카나리
- pivot.c, stack6.c ~ stack8.c — 스택 피벗 등 응용
part4/ — 논리·타입 취약점
- logic1.c ~ logic3.c — 논리 오류
- type_error1.c, type_error2.c — 정수/타입 오류
- ofuf.c — 오버플로우/언더플로우
- path_traversal.c — 경로 조작
보호 기법을 끄고 컴파일하는 경우가 많다.
# stack canary · NX · PIE 비활성화, 32비트
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vuln vuln.c
# ASLR 끄기 (시스템 전역, 실습 환경에서만)
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space본 저장소의 모든 코드는 학습·실습 목적이며, 반드시 격리된 실습 환경에서만 실행한다. 실제 시스템·서비스에 대한 무단 사용은 금지된다.