System Hacking 27

260528 [Dreamhack] Format String Bug

문제 https://dreamhack.io/wargame/challenges/356 로그인 | Dreamhack dreamhack.io 문제 파일 풀이문제 파일들 풀이 진행할 폴더로 이동하기 작업 표시줄에 있는 ubuntu 관리자 버전 열기 동작 확인해보기계속 입력받고 입력값을 출력한다. 1. fsb_overwrite.c 코드분석// Name: fsb_overwrite.c// Compile: gcc -o fsb_overwrite fsb_overwrite.c#include #include #include void get_string(char *buf, size_t size) { ssize_t i = read(0, buf, size); if (i == -1) { perror("read"); ..

260528 PIE, RELRO 개념정리

1. PIE (Position-Independent Executable)PIE는 바이너리(실행 파일)가 메모리의 무작위 주소에 매핑되어도 정상적으로 실행될 수 있도록 만들어주는 보호 기법이다.ASLR이 메모리 영역을 섞을 때, 코드 영역(바이너리 자체)까지 랜덤화할 수 있도록 지원하는 핵심 기술이다. ELF 파일 포맷과 재배치(Relocation)리눅스의 실행 파일 형식인 ELF는 크게 두 가지 형태로 존재한다.Executable (실행 파일): 주소가 고정되어 있어 재배치가 불가능하다.Shared Object (SO, 공유 오브젝트/라이브러리): 메모리의 어느 주소에 적재되어도 코드의 의미가 보존되도록 설계되어 재배치가 가능하다.PIE가 적용된 바이너리는 내부적으로 Executable이 아닌 SO(Sh..

260521 보호기법, 링크 개념정리

1. 메모리 보호 기법NX (No-eXecute)실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 엄격하게 분리하는 보호 기법. 바이너리가 실행될 때 각 메모리 영역에서 필요한 권한만 부여받는다.아키텍처 및 OS별 명칭AMD: NX (No-eXecute)인텔: XD (eXecute Disable)Windows: DEP (Data Execution Prevention)ARM: XN (eXecute Never)GDB vmmap 변화 및 원리NX 적용 X: 스택(Stack) 영역에 읽기(r), 쓰기(w), 실행(x) 권한이 모두 부여됨(rwxp). 해커가 스택에 쉘코드를 주입시키고 실행 흐름을 스택으로 돌리면 해당 쉘코드가 그대로 실행된다.NX 적용 O: 스택에 실행 권한이 제거됨(rw-p). 스택..

260521 [Dreamhack] basic_exploitation_002

문제 문제파일 풀이다운받은 문제 파일 풀이 진행할 폴더로 이동하기 wsl 실행하기 basic_exploitation_002.c 분석#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}void get_shell() { system("/bin/sh");}int main(int argc, char *argv[]) { char buf..

260514 [picoCTF] format string 1

문제 문제 파일 풀이먼저 어떻게 돌아가는지 확인해보자입력창이 나온다. 아무거나 입력해봤다 format-string-0.c#include int main() { char buf[1024]; char secret1[64]; char flag[64]; char secret2[64]; // Read in first secret menu item FILE *fd = fopen("secret-menu-item-1.txt", "r"); if (fd == NULL){ printf("'secret-menu-item-1.txt' file not found, aborting.\n"); return 1; } fgets(secret1, 64, fd); // Read in the flag fd ..

260514 [picoCTF] format string 0

문제 바이너리 말고 소스코드만 먼저 다운받기 풀이문제 실행해보면 아래처럼 나온다. 아무거나 입력해보면 아니라고 나온다. format-string-0.c 코드 #include #include #include #include #include #include #define BUFSIZE 32#define FLAGSIZE 64char flag[FLAGSIZE];void sigsegv_handler(int sig) { printf("\n%s\n", flag); fflush(stdout); exit(1);}int on_menu(char *burger, char *menu[], int count) { for (int i = 0; i 2 * BUFSIZE) { serv..

[picoCTF] buffer overflow 1

문제 인스턴스 누르니 문제 다운받는 링크 떴다 다운받은 파일 여기로 옮기기 실행해보기 이번에도 입력창이 뜬다.aaaaa 입력해봤다 소스코드 봐보자 소스코드 분석#include #include #include #include #include #include "asm.h"#define BUFSIZE 32#define FLAGSIZE 64void win() { char buf[FLAGSIZE]; FILE *f = fopen("flag.txt","r"); if (f == NULL) { printf("%s %s", "Please create 'flag.txt' in this directory with your", "own debugging flag.\n"); ..

[picoCTF:] buffer overflow 0

문제 아래 버튼 클릭 좀 기다리면 이렇게 뜬다 아래 버튼 눌러서 문제 다운받기 아래 2개가 다운된다 아래 경로에 다운받은 두 파일 넣기 잘 넣어졌다 아니다. 이경로에 넣어야 한다 vuln.c 파일 열어보기 wsl 실행 들어가면 입력하는 창이 뜬다 hi를 입력해봤다종료된다 소스코드 분석#include #include #include #include #define FLAGSIZE_MAX 64char flag[FLAGSIZE_MAX];void sigsegv_handler(int sig) { printf("%s\n", flag); fflush(stdout); exit(1);}void vuln(char *input){ char buf2[16]; strcpy(buf2, input);}int main..

[pwnable.kr] bof

이 문제 클릭 문제 접속하기 터미널에서 접속하기 문제에 써있던 비밀번호 치면 접속된다. ls해서 파일 목록 보기 readme파일부터 내용 확인하기 cat readme 9000 포트에 접속해야 flag 파일을 읽을 수 있다. bof.c파일도 내용 확인하기cat bof.c 분석#include #include #include void func(int key){//int 인자 필요 char overflowme[32]; //문자열, 32바이트 printf("overflow me : "); gets(overflowme); // smash me! //얼만큼 입력받을지 설정 X //-> overflowm..