보안 공부 8

[PWNABLE] Canary

Canary란 무엇인가?Canary는 BOF를 막기 위한 보호 기법 중에 하나이다. 메모리의 스택에 특정 패턴으로 삽입되는 임의의 값인데, 주로 함수의 리턴 주소와 로컬 변수가 저장된 스택 프레임 사이에 위치한다. BOF가 발생하면 스택에 쓰여진 Canary값을 덮어쓰게 되는데 함수가 종료되기 전에 Canary값이 변하지 않았는지 검사하고 Canary값이 변경되었을 경우에는 프로그램이 변조가 있음을 인식하고 종료한다.Canary 적용 확인Canary가 적용되었는지 알 수 있는 방법은 두 가지가 존재한다. 첫 번째로는 checksec 명령어를 통해 알 수 있다.두 번째로는 gdb를 통해 어셈블리코드로 확인하는 것이다. 123456   0x0000000000001189 :     endbr64   0x000..

[동아리] Pay1oad_PWNABLE 7주차 과제

1. OOB12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061//gcc -o oob oob.c -Wl,-z,norelro#include stdio.h>#include stdlib.h>#include string.h> void init(){    setvbuf(stdin, 0, 2, 0);    setvbuf(stdout, 0, 2, 0);} void menu(){    puts("1. print oob");    puts("2. edit oob");    puts("3. exit");} void gadget() {    asm("pop %rdi; ret"..

[동아리] Pay1oad_PWNABLE 6주차 과제

3. RTL_312345678910111213141516171819202122232425262728293031//gcc -o rop rop.c -no-pie -fno-stack-protector#includestdio.h>#include dlfcn.h>  void init() {  setvbuf(stdin, 0, 2, 0);  setvbuf(stdout, 0, 2, 0);} void gadget() {    asm("pop %rdi; ret");    asm("pop %rsi; ret");    asm("pop %rdx; ret");}  int main(){    init();     char buf[30];    puts("RTL Practice");     printf("> ");    read(0,..

[동아리] Pay1oad_PWNABLE 5주차 과제

1. bof1234567891011121314151617181920212223242526272829#includestdio.h> void init() {    setvbuf(stdin, 0, 2, 0);    setvbuf(stdout, 0, 2, 0);} void win(){    char *args[] = {"/bin/sh", NULL};    execv(args[0], args);} int main(){    init();    int size = 0;    char buf[20];    printf("input size: ");    scanf("%d",&size);    printf("input buf: ");    read(0, buf, size+1);     if (size > 20){   ..

[동아리] Pay1oad_PWNABLE 2주차 과제

1. mic_check 폴더 안에 있는 mic 바이너리를 실행하여 pwntools Master!!! 출력하기 먼저 코드를 확인해보겠다.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include stdio.h>#include stdlib.h>#include sys/select.h>#include unistd.h>#include time.h> void init() {    setvbuf(stdin, 0, 2, 0);    setvbuf(stdout, 0, 2, 0);} int main() {    init();     int num1, num2, userInpu..

[PWNABLE] Stack Buffer Overflow

Buffer Overflow란?BOF(Buffer Overflow)는 버퍼(Buffer)의 용량을 초과하여 인접한 메모리 위치를 침범하는 현상을 말한다. BOF의 종류는 두 가지로 나눌 수 있는데 Stack에서 발생하는 Stack Buffer Overflow, Heap에서 발생하는 Heap Buffer Overflow가 있다. 여기서는 Stack Buffer Overflow만 다룰 것이다. Stack Buffer Overflow란?Stack Buffer OverFlow는 프로그램이 할당된 스택 영역에서 데이터가 할당된 범위를 초과해 저장될 때 발생하는 문제이다. 이로 인해 중요한 데이터나 프로그램의 제어 흐름을 변경하는 등 심각한 보안 문제가 발생할 수 있다. Stack Buffer Overflow 공격..

[동아리] Pay1oad_PWNABLE 1주차 과제

1. Handray 폴더 안에 존재하는 HW 파일의 main 및 func를 어셈블리어만 보고 C 언어로 바꾸기어셈블리어를 보기 위헤 gdb를 사용해봤다. 명령어 disass main 명령어를 통해 main에 어떤 코드가 사용되었는지 확인했다. 12345678   0x000000000040118e :     endbr64   0x0000000000401192 :     push   rbp   0x0000000000401193 :     mov    rbp,rsp   0x0000000000401196 :     sub    rsp,0x20   0x000000000040119a :    mov    DWORD PTR [rbp-0x14],edi   0x000000000040119d :    mov    QWOR..