반응형

2회차에 59점으로 떨어졌던 제가, 3회차에서는 75점으로 당당히 합격했습니다.


처음엔 ‘실기도 기출 위주로만 하면 되겠지’라는 생각으로 접근했다가 뼈아픈 실패를 맛봤습니다. 하지만 그 경험 덕분에 공부 방법을 전면 수정했고, 결국 합격까지 이어질 수 있었습니다. 이번 글에서는 제가 어떻게 준비했는지, 그리고 시험장에서 느낀 점을 솔직하게 남겨보려고 합니다.


공부 방법

  • 기출 위주 학습
    2회차 때는 문제를 많이 풀기보다는 단순히 내용을 외우는 데 치중했습니다. 하지만 3회차 준비할 때는 기출을 철저히 분석했습니다. 특히 최근 5개년 기출을 반복하면서 문제 유형과 출제 의도를 파악하려고 했습니다.
  • SQL 집중 학습
    떨어지고 나니 가장 크게 느낀 게 “SQL은 무조건 따로 공부해야 한다”는 점이었습니다. 실제로 직접 쿼리를 작성해보면서 WHERE, GROUP BY, JOIN 같은 기본기를 확실히 다졌습니다. 2023년 3회차에는 UNION에 대한 문제가 나왔습니다.
  • C언어, JAVA, Python은 무조건 챙기기 (2, 3회차에 적어도 각 2문제 이상은 나왔습니다)
    C언어, C++이 가장 출제 빈도가 높았습니다. 특히 포인터에 대한 문제도 나오는데, 야매로 공부했다간 큰 코 다칠 수 있습니다. 확실하게 공부하고 가시는 걸 추천합니다.
  • 교재는 수제비 (Final 모의고사는 따로 보진 않았습니다!)
    저는 실기 기본서만 N회독 한 것 같습니다. 지금 돌이켜보면, Final 모의고사까지 사는 걸 추천드립니다.
    돈이 아깝다고 느껴질 수 있을텐데, 59점 맞고 다음 회차 실기까지 자격증 하나도 없는 상태로 취업준비했던 걸 돌이켜보면... 돈 쓰더라도 한번에 확실하게 붙는 것이 좋아보입니다. 그리고, 수제비 카페에 올라오는 문제들을 평소에 활용하면 좋습니다!

https://www.yes24.com/product/goods/141842488

 

2025 수제비 정보처리기사 실기 기본서 - 예스24

최고의 단기 합격 비법서, 『2025 수제비 정보처리기사 실기 기본서』『2025 수제비 정보처리기사 실기 기본서』는 2025년 최신 기출문제를 철저히 분석하여, 매년 변화하는 출제 트렌드에 맞춰 최

www.yes24.com

 

시험 난이도 (2, 3회차 기준)

  • 체감 난이도는 중상 정도였습니다.
  • SQL은 기출 범주 안에서 나와서 충분히 풀 수 있었습니다.
  • 기본 개념이나 보안, 접근제어에 대한 문제는 공부를 좀 해야 맞출 수 있었습니다.
  • IaaS, PaaS, SaaS 등 정확한 개념을 알고, 공개키와 비공개키 구분도 지을 줄 알아야 했습니다.

 

느낀 점

  • 실기는 기출 반복이 전부다.
    물론 이 말만 믿고 ‘단순 암기’만 하면 저처럼 59점으로 떨어질 수 있습니다. 중요한 건 기출을 보면서 ‘문제를 내는 의도’를 파악하는 겁니다.
  • 모르는 문제가 나와도 끝까지 논리적으로 접근하는 태도가 필요합니다. 단순히 찍는 것과, 근거를 가지고 추론하는 것은 정답률에서 차이가 크게 났습니다.
  • 수제비 카페를 자주 들락날락하며 예상 문제를 풀어보는 것도 좋습니다.
  • 실기는 주관식 + 코딩 + 헷갈리게 해놓은 문제들이 대부분이기 때문에, 문제를 정확하게 읽고 개념을 유추하는 것이 중요합니다.
  • 특히, 신기술이나 자주 나오는 단답형은 평소에 학습하는 것이 좋습니다.

 

  • SQL은 따로 정리: 직접 쿼리를 작성해보세요. 책만 읽으면 절대 안 외워집니다.
  • 확실하게 알기 : 출제자들이 귀신같이 헷갈리는 부분을 캐치합니다. MAC / DAC /RBAC, IaaS/PaaS/SaaS 같은 개념들.. (실제로 나왔습니다) 이것들이 쉽다구요? 그러면 축하드립니다! 합격입니다
  • 시간 관리: 코딩에서 막혀도 노가다로 충분히 풀어지는 문제도 있습니다. 다만, 생각보다 시간이 촉박할 수 있으니, 시간관리에도 신경쓰는 것이 좋습니다. 시간이 널널했고 1회차만에 합격했다구요? 축하드립니다. 저보다 똑똑하신 것 같습니다!

저는 이렇게 해서 2023년 3회차에 75점으로 합격할 수 있었습니다.
2회차 59점으로 불합격 했을 땐 좌절도 했지만, 결국 그 경험이 제 공부법을 바꾸는 계기가 되었네요.
혹시 지금 준비하시는 분들이 있다면, 제 실패와 합격 경험이 작은 참고가 되길 바랍니다

 

 

필기 후기는 아래 글을 참조하시면 될 것 같습니다

https://codingbuza.tistory.com/104

 

정보처리기사 필기 합격 후기 (2023년 2회차)

정보처기사 필기 합격 후기 (2023년 2회차)안녕하세요. 2023년 2회차 정보처리기사 필기를 응시해서 합격한 후기를 공유합니다. 저처럼 혼자서 준비하시는 분들께 조금이나마 도움이 되길 바랍니

codingbuza.tistory.com

 

반응형
반응형

정보처기사 필기 합격 후기 (2023년 2회차)

안녕하세요. 2023년 2회차 정보처리기사 필기를 응시해서 합격한 후기를 공유합니다. 저처럼 혼자서 준비하시는 분들께 조금이나마 도움이 되길 바랍니다.


1. 시험 개요

  • 시험 일자: 2025년 ○월 ○일
  • 응시료: 19,400원
  • 과목 구성:
    1. 소프트웨어 설계
    2. 소프트웨어 개발
    3. 데이터베이스 구축
    4. 프로그래밍 언어 활용
    5. 정보시스템 구축 관리

합격 기준은 과목별 40점 이상, 평균 60점 이상입니다.


2. 공부 기간 & 방법

저는 약 4주 동안 준비했습니다.

 

https://www.yes24.com/product/goods/137156619

 

2025 시나공 정보처리기사 필기 기출문제집 - 예스24

『2025 시나공 정보처리기사 필기 기출문제집』은 최신 기출문제를 모아 만든 실전 대비용 초단타 합격 전략집이다. 철저한 기출문제 분석을 통해 확실한 시험 대비가 가능하다. 2024년까지 최신

www.yes24.com

 

  • 교재: ‘정보처리기사 시나공 필기 기출문제집’
  • 공부 방식: 기출 5개년 반복 → 틀린 문제만 오답노트 정리
  • 하루 공부 시간: 3시간 (출근/퇴근 시간도 활용)

느낀 점:
이 시험은 기출 적응이 가장 중요합니다. 개념만 공부하는 건 비효율적이고, 기출 풀이를 통해 패턴을 익히는 게 핵심이에요.


3. 시험 난이도 & 체감

  • 소프트웨어 설계/개발: 예상보다 어렵지 않았음
  • 데이터베이스: SQL, 정규화 문제 위주 (기출과 유사)
  • 프로그래밍 언어 활용: C, Java 기본 문법 출제 (헷갈리는 부분만 체크)
  • 정보시스템 구축 관리: 암기 위주 → 기출 반복이 효과적

 전반적으로 기출 공부만 충실히 했다면 합격 가능한 수준이었습니다.

 

4. 합격 인증

2023 3회차 정보통신기사 실기 합격

5. 합격 꿀팁

  1. 기출 5개년 3회독 이상: 시험 절반 이상 커버 가능
  2. 데이터베이스/언어: 틀린 문제 따로 모아 반복 확인
  3. 시험 전날: 오답노트, 공식 정리만 확인 (새로운 건 보지 말기)

마치며

정보처리기사 필기는 기출 반복 학습만 잘해도 충분히 합격할 수 있습니다.

단기간 준비해도 합격 가능하니, 자신 있게 도전하시길 추천드립니다.

다음에는 실기 공부법과 합격 후기도 정리해서 다시 올리겠습니다!

 

Feat. 저는 2023년 2회차 실기 59점으로 떨어져서, 2023년 3회차에 70점으로 합격했습니다 ㅋㅋ..

반응형
반응형

2025년 정기 기사 3회에 사무자동화산업기사 필기를 합격했다

 

 

공부기간 : 2주일

 

공부방법 :

1. CBT 기출 무한반복

2. 틀린 문제 모의고사 무한반복 (CBT 기능 활용)

 

필기시험 참고서 : X, 오로지 CBT만 풀었음

 

필기시험 꿀팁 :

- CBT를 풀다보면 각 과목당 100점 방지 문제가 적게는 1개에서 많게는 3~4개까지 나오는 걸 볼 수 있다.

여기서 100점 방지 문제란? -> 이전 회차에 나오지 않은 신유형이라고 생각한다.

그 신유형은 결국 그 다음회차에서는 기출로 나오게 되어있다.

 

그러니까 신유형이 나에게는 기출문제로 느껴질 정도로 익숙해지는 게 중요하다.

 

ex) 2015년 1회차 신유형은 결국 2015년 2회차부터는 기출이 되는 것..!

 

그래서, 기회가 된다면 사무자동화산업기사는 CBT에 있는 2000년도 초반부터 2025년까지 있는 모의고사를 자주 풀기를 바란다

실제로 2000년도 초중반에 나왔던 문제가 많이 나왔다

 

이기적 CBT 영진닷컴은 2025년도 문제까지 있고 CBT는 2020년도까지 있다.

개인적으로 추천하는 방법은 CBT사이트 먼저 다 풀고 이기적인 사이트에서 2021년도부터 문제를 푸는 걸 추천한다

 

https://www.comcbt.com/

 

최강 자격증 기출문제 전자문제집 CBT

전자문제집, CBT, 컴씨비티, 씨비티, 기사, 산업기사, 기능사, 컴활, 컴퓨터활용능력, 1급, 2급, 워드, 정보처리, 전기, 소방, 기계, 사무자동화, 정보기기, 제과, 제빵, 한국사, 공무원, 수능, 필기,

www.comcbt.com

 

 

https://cbt.youngjin.com/index.php

 

이기적 CBT, 영진닷컴

 

cbt.youngjin.com

 

 

반응형
반응형

 

공부 방법

1. CBT 모의고사 N회 돌리기

2. 1번을 무한 반복한다 (아래 사진처럼)




공부 기간

직장인 기준으로, '하루에 적어도 모의고사 1회 풀기' 목표잡고 2주에 끝냈다.

네트워크 장비 유지보수 업체로 입사한 따끈따끈한 3개월 차 신입이라 그런가, 생각보다 난이도 자체는 쉬웠다.

다만, 100점 방지 문제가 매번 2~4개씩은 나오는 것 같았다(이런 걸 도대체 왜 내는지 모르겠는 문제들..)

 

*참고로 시험 결과는 시험 치고 이틀 후 오전 9시에 나온다.

*시험은 총 50문제로, 1문제당 2점이다.

*합격은 60점 이상이니깐, 20문제만 틀리면 되는 아주 수월한 자격증이다.

 

비전공자도 합격할 수 있나요?

충분히 합격할 수 있습니다. 약간의 네트워크 지식과 모의고사 무한반복이면 안될 게 없다.

 

 

왜 1급이 아니라 2급인지? 취업했는데 도전한 계기?

- 네트워크관리사는 신기하게도 2급이 국가공인 자격증이고, 1급은 민간 자격증이다. 2급은 5년마다 갱신해야 하는데, 갱신 3개월 전에 교육을 받으면 연장할 수 있다고 한다.

- 사실, 지금 맡은 업무가 엔지니어라고 하기에는 많이 부족하다. 그래서, 네트워크 현장에서의 경험이 있다는 것을 보여주기 위해 가볍게 하나 취득하고자 시험을 봤다. 

 

 

네트워크관리사에 대한 자세한 내용은 아래 링크로!!

 

이번 회차에 꼭 실기도 합격해서, 실기 합격 후기로 돌아오겠다

 

https://www.icqa.or.kr/cn/page/network

 

(사)한국정보통신자격협회

개요 및 검정기준 네트워크관리사란 서버를 구축하고 보안 설정, 시스템 최적화 등 네트워크구축 및 이를 효과적으로 관리할 수 있는 인터넷 관련 기술력에 대한 자격이다. 자격명칭 검정기준

www.icqa.or.kr

 

반응형
반응형
 

 

내림차순은 b가 먼저, 오름차순은 a가 먼저

 

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[] str = {"30", "20", "10" };

        // 내림차순
        Arrays.sort(str, new Comparator<String>(){
            public int compare(String a, String b) {
                return (b + a).compareTo(a + b);
            }
        });

        for (String x : str) {
            System.out.print(x + " ");
        }


        // 오름차순
        System.out.println();
        Arrays.sort(str, new Comparator<String>() {
            public int compare(String a, String b) {
                return (a + b).compareTo(b + a);
            }
        });

        for (String x : str) {
            System.out.print(x + " ");
        }
    }

}
반응형
반응형

 

 

 

import java.util.ArrayList;

public class Main {

    private void swap(int[] arr, int idx1, int idx2) {
        int tmp = arr[idx1];
        arr[idx1] = arr[idx2];
        arr[idx2] = tmp;
    }

    // 삽입 정렬
    private int[] sortByInsertionSort(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            int tmp = arr[i];
            int j = i - 1;
            while (j >= 0 && tmp < arr[j]) {
                arr[j+1] = arr[j];
                j--;
            }
            arr[j+1] = tmp;
        }
        return arr;
    }

    // 선택정렬
    private int[] sortBySelectionSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            int minIdx = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIdx]) {
                    minIdx = j;
                }
            }
            swap(arr, minIdx, i);
        }
        return arr;
    }

    // 버블정렬
    private int[] sortByBubbleSort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                if(arr[j] > arr[j+1]){
                    swap(arr, j, j + 1);
                }
            }
        }

        return arr;
    }

    // 셸 정렬
    private int[] sortByShellSort(int[] arr) {
        for (int h = arr.length / 2; h > 0; h /= 2) {
            for (int i = h; i < arr.length; i++) {
                int tmp = arr[i];
                int j = i - h;
                while (j >= 0 && tmp < arr[j]) {
                    arr[j+h] = arr[j];
                    j = j - h;
                }
                arr[j + h] = tmp;
            }
        }

        return arr;
    }

    public static void main(String[] args) {

        int[] array = {5, 4, 1, 2, 3, 6, 8, 7, 9, 10};

        Main T = new Main();

        // 삽입정렬 N, N^2, N^2
        System.out.print("삽입 정렬 : ");
        for (int x : T.sortByInsertionSort(array)) {
            System.out.print(x + " ");
        }

        // 선택정렬 N^2, N^2, N^2
        System.out.print("\n" + "선택 정렬 : ");
        for (int x : T.sortBySelectionSort(array)) {
            System.out.print(x + " ");
        }

        // 버블 정렬 N^2, N^2, N^2
        System.out.print("\n" + "버블 정렬 : ");
        for (int x : T.sortByBubbleSort(array)) {
            System.out.print(x + " ");
        }


        // 버블 정렬 N^2, N^2, N^2
        System.out.print("\n" + "버블 정렬 : ");
        for (int x : T.sortByBubbleSort(array)) {
            System.out.print(x + " ");
        }

        // 셸 정렬 N, N^1.5, N^2
        System.out.print("\n" + "셸 정렬 : ");
        for (int x : T.sortByShellSort(array)) {
            System.out.print(x + " ");
        }
    }




}

레퍼런스

 

https://velog.io/@pppp0722/%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-7%EA%B0%9C-%EC%A0%95%EB%A6%AC-Java#%ED%80%B5-%EC%A0%95%EB%A0%ACquick-sort

 

정렬 알고리즘 7개 정리 (Java)

정렬 알고리즘이란 원소들을 일정한 순서대로 열거하는 알고리즘 이다. 정렬 알고리즘을 사용할 때, 상황에 맞게 다음의 기준들로 사용할 알고리즘을 선정한다. > 시간 복잡도 (소요되는 시간)

velog.io

 

반응형
반응형

https://www.acmicpc.net/problem/11724

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static int N, M, answer = 0;
    static boolean[] visited;
    static boolean[][] graph;

    public static void dfs(int idx) {
        visited[idx] = true;

        for (int i = 1; i <= N; i++) {
            if (graph[idx][i] && !visited[i]) {
                dfs(i);
            }
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        graph = new boolean[N + 1][N + 1];
        visited = new boolean[N + 1];

        for (int i = 1; i <= M; i++) {
            st = new StringTokenizer(br.readLine());
            int u = Integer.parseInt(st.nextToken());
            int v = Integer.parseInt(st.nextToken());

            graph[u][v] = true;
            graph[v][u] = true;

        }

        for (int j = 1; j <= N; j++) {
            if(!visited[j]) {
                dfs(j);
                answer++;
            }
        }

        System.out.print(answer);
    }
}

핵심

1. DFS를 언제 수행할지

2. graph, 재귀

반응형
반응형

https://www.acmicpc.net/problem/1260

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
    static int N, M, V;
    static boolean[] visited;
    static boolean[][] graph;
    static StringBuilder sb = new StringBuilder();
    static Queue<Integer> q = new LinkedList<>();

    public static void bfs(int start) {
        q.add(start);
        visited[start] = true;

        while (!q.isEmpty()) {

            start = q.poll();
            sb.append(start).append(" ");

            for (int i = 1; i <= N; i++) {
                if (graph[start][i] && !visited[i]) {
                        q.add(i);
                        visited[i] = true;
                }

            }
        }
    }

    public static void dfs(int start) {
        visited[start] = true;
        sb.append(start).append(" ");

        for (int i = 1; i <= N; i++) {
            if(graph[start][i] && !visited[i]) {
                dfs(i);
            }
        }

    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        // 1. 입력 먼저

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        V = Integer.parseInt(st.nextToken());

        visited = new boolean[N + 10];
        graph = new boolean[N + 10][N + 10];

        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine());

            int y = Integer.parseInt(st.nextToken());
            int x = Integer.parseInt(st.nextToken());

            graph[y][x] = true;
            graph[x][y] = true;
        }

        dfs(V);
        System.out.println(sb.toString());
        sb = new StringBuilder();
        visited = new boolean[N + 10];
        bfs(V);
        System.out.println(sb.toString());
    }
}

 


핵심

1. DFS는 재귀 / BFS는 Queue

2. graph, visited, Queue(BFS)를 활용

반응형
반응형

https://overthewire.org/wargames/bandit/bandit8.html

 

OverTheWire: Level Goal

We're hackers, and we are good-looking. We are the 1%. <!-- Please read and accept the Rules! --> Level Goal The password for the next level is stored in the file data.txt next to the word millionth Commands you may need to solve this level man, grep, sort

overthewire.org

Bandit Level 7 → Level 8


Level Goal
The password for the next level is stored in the file data.txt next to the word millionth

Commands you may need to solve this level
man, grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

 

grep [옵션] [패턴] [파일명] : 파일 내에 특정 문자열 찾기 -> 옵션, 파일명 생략 가능.

 

문제 해석

'millionth'라는 단어 옆에 패스워드가 저장되어있다


bandit7@bandit:~$ du -h data.txt
4.0M    data.txt

du명령어를 사용하여 data.txt의 크기는 4M이다.

나는 저 파일을 모두 읽고, 문제에서 주어진 millionth라는 word를 꼭 찾겠다!하시는 분은, 그대로 손을 들어서 자신의 뺨을..

 

 

pelleting       mdbBa7c67gFKfVOokemCOJKLdOzyyK83
we'd    zmJEREY8f9XoBOIwoq9Tbw8kK79mFeIz
settee  DOiDxPLSkfIddek3Kuptm3oGYpT3l3qD
sipped  c8uDq7MhGuir6FEJaW4jRYItm6zTJA5s
Photostatted    BOV0pcdTriwnzVyznJYEbSGRBsJfSV4a
bother  oVE0qcr0pttbYrlJrF5sSwIdcOC6QWjV
compulsively    2y8glNiuOIxyw7uF7AdTMq39qxMhOjK6
gonorrhea's     dRWp1DD6FaPkwHn6tztFP8oS2raVOYIw
antipathy       gNSsJk0XLuxWHY3ytBYDGBu62FrZefXi
Ozarks  T3XWmwQheKmAxQsfu52s8A0VcBlx73pn
sweetness's     7UOekadF2RGiC400Qqvqr9Zzew3PhAj8
Jacobi  tFG9PNzM3PJoSbtPwvOZdPJx2VABGUsy
Fermi's 1BDS8Bq0wWBl4O7baODjmGJDHpWQDJAl
Zürich  NlvjwTPmvNCuUIUY0K9Gus19LO3TMmEf
spar    3V2to1acBTzOLaNeFvZA79Ea2RxTmaJg
rotundas        eOiLVehGcu46TmFG94EdakN3OEASdgHi
snitch  xLtACQV74ajxp7FUCqPXibOmcqr27xO5
fractional      IqZhHUYwcU4HKI00e2epOcoFQw68Xa6y
Corleone's      oHKFqDVJkusLkjxw23p0JN2skXjbBFes
standardizing   YyDtzPy2hFJQLOYVxogYF1zxtvWcosZq
dehydrate       ErPE46qRllGGWVfR8ZSoCD3g8avjw4CR
vignetting      PNp1NMy2SezenZIaWLxZmC4Sun9BygAZ
misdeals        oH7YTnfqATMfsRVoXtNZU4Jr7DAkFdFh
sycamores       7stZ9ey1CpcZfnW7pijz4P97eGseDixl
laminating      GWzMFFeXemy8MXXJ8RxmyeixWcsL579C
trap    GWYM8DaBJfuz6an2tVDm41tdtD5YtD3X
meritocracies   aLty59sRNqu6v6ulJT55FGCAQsTefmeS
Meghan  8upi5kRPf4aI1fd6V0GisiBsEg3oMNgU
gasps   6EhRbaZDQ4kqrANmsWw1FOzVvlcTgxQF
chamberlains    aprmvYpXmPdEEYnaCsnSIUgLx43fSsMd
Doug's  EpTsviLO0SUF9wJjZxSIl3fhmu58rYkJ
annulars        SdmpphKDQK19i3rMMYahSmm4UkupfkgC
burials 1a7sZnWLhiOj3gywzWrUCANQDifPRDwY

cat data.txt를 하면... 엄청난 문자들이 나온다.

 

자, 우리는 해커다. 우리가 원하는 정보인 millionth만 찾으면 된다.

grep 명령어를 사용해보자

 

 

bandit7@bandit:~$ cat data.txt | grep millionth
millionth       dfwvzFQi4mU0wfNbFOe9RoWskMLg7eEc

참 쉽죠?

 


정리

1. cat data.txt | grep millionth

 

파이프닝과 grep을 적절히 사용하면 쉽게 해결되는 문제

반응형

'네트워크 공부 > bandit' 카테고리의 다른 글

[Bandit] Level 6 -> Level 7  (0) 2024.07.19
[Bandit] Level 5 -> Level 6  (0) 2024.07.19
[Bandit] Level 4 -> Level 5  (0) 2024.07.19
[Bandit] Level 3 -> Level 4  (0) 2024.07.18
[Bandit] Level 2 -> Level 3  (0) 2024.07.18
반응형

https://overthewire.org/wargames/bandit/bandit7.html

 

OverTheWire: Level Goal

We're hackers, and we are good-looking. We are the 1%. <!-- Please read and accept the Rules! --> Level Goal The password for the next level is stored somewhere on the server and has all of the following properties: owned by user bandit7 owned by group ban

overthewire.org

 

Bandit Level 6 → Level 7

 

Level Goal
The password for the next level is stored somewhere on the server and has all of the following properties:

owned by user bandit7
owned by group bandit6
33 bytes in size


Commands you may need to solve this level
ls , cd , cat , file , du , find , grep

 

find : 파일 시스템에서 명령을 사용하여 디렉토리 트리에서 지정된 각 경로를 반복적으로 검색하여 다음 텍스트에 제공된 용어를 사용하여 작성된 부울 표현식과 일치하는 파일을 찾습니다.


문제 해석

서버 어딘가에 다음과 같은 항목을 만족하는 곳에 비밀번호가 저장되어 있다

 

owned by user bandit7
owned by group bandit6
33 bytes in size

 


 

 

bandit6@bandit:~$ ls
bandit6@bandit:~$ cd /
bandit6@bandit:/$ ls
bin                formulaone  lib.usr-is-merged  proc                srv
bin.usr-is-merged  home        libx32             root                sys
boot               krypton     lost+found         run                 tmp
dev                lib         media              sbin                usr
drifter            lib32       mnt                sbin.usr-is-merged  var
etc                lib64       opt                snap

우선, 홈 디렉터리(~)에서 ls 명령어를 통해 파일이나 디렉터리가 없음을 확인했다

(al하면 몇 개 나오지만, 문제와는 상관없음)

 

그래서 최상위 디렉토리(/)로 접근하여 ls 명령을 수행하니 여러 파일이 나오는 것을 알 수 있다.

문제에서 stored somewhere라고, 어디인지 구체적인 말을 안해주었기에 최사위 디렉터리에서 접근하는 것이 좋을 것 같다.

 

주어진 조건을 만족하는 파일을 찾기위해 find 명령어를 사용하자

 

bandit6@bandit:/$ find . -user bandit7 -group bandit6 -size 33c
find: ‘./sys/kernel/tracing’: Permission denied
find: ‘./sys/kernel/debug’: Permission denied
find: ‘./sys/fs/pstore’: Permission denied
find: ‘./sys/fs/bpf’: Permission denied
find: ‘./snap’: Permission denied
find: ‘./run/lock/lvm’: Permission denied
find: ‘./run/systemd/inaccessible/dir’: Permission denied
find: ‘./run/systemd/propagate/systemd-udevd.service’: Permission denied


....
해당 오류를 자세히 보면 Permission denied가 공통적으로 나옴

Permission denied라는 에러를 포함한 응답을 휴지통에 넣으면 정답을 찾을 수 있을 것 같다.

그런데 리눅스에서 휴지통은 어디에 있고, Permission denied라는 에러를 어떻게 집어넣을 수 있을까?

 

그 전에, 표준 입출력에 대한 내용을 잠시 살펴보자

 

 

표준 입력(Standard Input Stream ; 0) : 쉘에 명령어, 데이터를 입력하는 것

표준 출력(Standard Output Stream ; 1) : 프로ㅡ램의 실행 결과를 쉘 화면에 보여주는 것

표준 에러(Standard Error Stream ; 2) : 사용자 요청을 반환할 수 없을 때 에러

 

0, 1, 2는 File Descriptor라는 값이다.

 

이 File Descriptor라는 것을 이용하여, 리눅스의 휴지통 역할을 하는 /dev/null에 Permission denied 오류를 집어넣는다

 

 

bandit6@bandit:/$ find . -user bandit7 -group bandit6 -size 33c 2> /dev/null
./var/lib/dpkg/info/bandit7.password

리다이렉션 방법은 [숫자][>] [경로] 로 작성하면 된다.

여기서 [숫자]는 File Descriptor인데, 1은 생략이 가능하다.

 

즉, ./var/lib/dpkg/info/bandit7.password에 패스워드가 있는 것을 확인할 수 있다.

 

bandit6@bandit:/$ cat ./var/lib/dpkg/info/bandit7.password
morbNTDkSW6jIlUc0ymOdMaLnOlFVAaj

이번 문제는 조금 어렵지만, 우리는 해커가 될 사람이니까 이지하다고 떼쓰자

 


정리

1. find -user bandit7 -group bandit6 -size 33c 2> /dev/null

2. cat ./var/lib/dpkg/info/bandit7.password

반응형

'네트워크 공부 > bandit' 카테고리의 다른 글

[Bandit] Level 7 -> Level 8  (0) 2024.07.19
[Bandit] Level 5 -> Level 6  (0) 2024.07.19
[Bandit] Level 4 -> Level 5  (0) 2024.07.19
[Bandit] Level 3 -> Level 4  (0) 2024.07.18
[Bandit] Level 2 -> Level 3  (0) 2024.07.18

+ Recent posts