전체 글

전체 글

    [Linux] shell script(쉘 스크립트) 기본 문법

    shell 이란? - 사용자와 커널 사이에서 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할을 한다. 쉘 프로그래밍 기본 설정 - 쉘 스크립트를 사용한 파일은 .sh 확장자를 가지고, 맨 처음 행에 #!/bin/bash를 쓴다. #!/bin/bash echo "Hello World" - 실행 방법(example.sh)은 다음 사진과 같다. 1) 실행권한을 부여하고 실행 $ chmod 755 example.sh $ ./example.sh 2) sh 명령어를 이용하여 실행 $ sh example.sh - 주석은 #을 사용한다. 주석처리 된 코드는 실행되지 않는다. #!/bin/bash echo "Hello World" #주석은 실행되지 않음. 변수 활용 - 변수 값을 대입할 때는 '='를 ..

    [자료구조] 해적 널빤지 사형에서 살아남기 (queue)

    교재 : C로 배우는 쉬운 자료구조 문제 : Chapter 06 - 응용예제 07 - 해적 널빤지 사형에서 살아남기 구분 : 원형 큐(circle queue) /*보안자료구조 응용예제 07, 해적 널빤지 사형에서 살아남기 7 3 -> 3 6 2 7 5 1 4 10 4 -> 4 8 2 7 3 10 9 1 6 5 */ #include #define MAX 100 // 1

    [자료구조] 핀볼 구슬 게임의 점수는? (stack)

    교재 : C로 배우는 쉬운 자료구조 문제 : Chapter 05 - 응용예제 05 - 핀볼 구슬 게임의 점수는? 구분 : 스택(stack) /*보안자료구조 응용예제 05, 핀볼 구슬 게임의 점수는? 0 0 0 0 0 0 0 2 0 4 2 0 5 3 1 30 20 40 10 20 5 1, 3 5, 3 2, 2 3, 4 2, 3 4, 5 4, 5 3, 2 1, 1 3 */ #include #define MAX_STACK_SIZE 20 int stack[MAX_STACK_SIZE][5]; //20행 5열 테이블 생성 int top[5] = { -1,-1,-1,-1,-1 }; //각 열에 대한 스택의 top pointer int IsEmpty(int col) { //해당하는 열(col)이 비어있는지 확인. if..

    [picoCTF 19] Based Writeup

    https://play.picoctf.org/practice nc 접속! 총 3단계로 나누어져 있고, 각 나오는 진수들을 ASCII 문자열로 나타내면 단어가 나온다. 이를 입력하면 문제를 해결할 수 있다. 파이썬 코드를 통해 각 변수에 대한 ASCII 문자를 출력해주는 코드를 짜서 풀었다. ASCII 문자 변환 코드> while True: type = int(input("(binary : 2, octal : 8, hexa : 16, exit : 0) >> ")) if (type==0): break elif (type==2): binary = list(input().split()) for i in binary: print(chr(int(i,2)), end='') elif (type==8): octal = ..

    [picoCTF 19] flag_shop Writeup - 정수 오버플로우

    정수 오버플로우(Integer Overflow) 문제이다. https://play.picoctf.org/practice/ 문제를 풀기 위해서 nc 접속. nc를 접속했을 때의 메뉴 선택창이 나온다. 1번을 입력하면 계좌의 현재 잔고가 나온다. 2번 메뉴에서 있는 1337 플래그를 구매하려고 하면 가격은 100000달러이고, 수량이 1개 있다고 한다. 사보려고 했지만 잔고에 충분한 달러가 없기 때문에 구매할수 없다. 2번 메뉴의 1번은 입력에서 900을 곱해서 달러를 반환해주는 것 같다. 하지만 이후 잔고를 다시 확인했을 때도 달러는 1100이다. 왜 그러는지 문제에서 소스코드를 다운받아서 확인해보자. #include #include int main() { setbuf(stdout, NULL); int c..

    [자료구조] 보물찾기를 열어라! (이중 원형 연결리스트)

    교재 : C로 배우는 쉬운 자료구조 문제 : Chapter 04 - 응용예제 04 - 보물상자를 열어라! 구분 : 이중 원형 연결 리스트 (Doubly Circular Linked List) (=양방향 원형 연결 리스트) 이 문제를 풀기 위해서는 특정 보물상자를 기준으로 시계방향 또는 시계반대방향으로 자유롭게 이동할 수 있어야 한다. 그러므로 양방향으로 연결된 원형리스트를 구성한다. 보물상자의 개수는 입력을 받고 이 입력받은 값에 따라 다음 보물상자의 위치를 나타내는 숫자로 입력받을 개수가 달라진다. 입력 받은 N을 malloc을 통해 동적할당을 해주고, 그 안에다가 다음 보물상자의 위치를 나타낸 숫자를 n개 입력 받는다. 열어진 보물상자는 양방향 원형리스트에서 연결을 끊고, 메모리 할당도 해제한다. 처..

    버퍼 오버플로우 공격(Buffer Overflow Attack)

    버퍼 오버플로우(Buffer Overflow Attack)란? - 버퍼란 데이터가 저장되는 메모리 공간이다. 이 프로그램이 실행될 때 이 메모리 공간에 버퍼의 크기보다 더 많은 입력을 받는다면 버퍼 오버플로우가 발생한다. 쉽게 말해서 크기가 정해져 있는 컵에 물을 넘치게 받았다고 생각하면 된다. 이 경우 해커가 특정 메모리 값을 임의로 변조할 수 있기 때문에 취약점이 된다. 위 그림과 같이 buf1의 크기가 5byte이고 buf2의 크기도 5byte이라고 가정해보자. 여기서 buf1 주소에 입력을 받게 되었을 때, 입력 크기를 제한해주지 않는다면, 5byte를 넘어서는 입력 값을 줄 수 있다. 이 경우 buf1의 입력을 통해 buf2의 공간의 값을 임의로 바꿀 수 있다. buf1에 'abcdefgh'라는..