반응형
 

 

내림차순은 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
반응형

 

https://overthewire.org/wargames/bandit/bandit6.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 a file somewhere under the inhere directory and has all of the following properties: human-readable 10

overthewire.org

 

Bandit Level 5 → Level 6


Level Goal
The password for the next level is stored in a file somewhere under the inhere directory and has all of the following properties:

human-readable
1033 bytes in size
not executable


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

 

find : 리눅스 파일 시스템에서 각 경로를 통해 지정된 파일을 찾는 명령어

 

https://www.ibm.com/docs/ko/aix/7.3?topic=files-finding-find-command

 

파일 찾기(find 명령)

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

www.ibm.com


문제 해석

Next Level로 가는 패스워드는 inhere directory의 어떤 곳에 있다. 그 파일은 다음과 같은 특징을 가지고 있다.

 

human-readable
1033 bytes in size
not executable


 

 

bandit5@bandit:~/inhere$ ls
maybehere00  maybehere03  maybehere06  maybehere09  maybehere12  maybehere15  maybehere18
maybehere01  maybehere04  maybehere07  maybehere10  maybehere13  maybehere16  maybehere19
maybehere02  maybehere05  maybehere08  maybehere11  maybehere14  maybehere17

inhere 디렉토리에서 ls 명령어로 존재하는 디렉토리를 파악한다.

maybehere00 ~ maybehere17을 모두 확인하면 되겠다!하는 분은 손을 위로 들어서 그대로 자신의 뺨을..

 

우리는 해커가 될 거니까, 좀 더 인텔리한 방법을 찾아보자

 

 

bandit5@bandit:~/inhere$ file *
maybehere00: directory
maybehere01: directory
maybehere02: directory
maybehere03: directory
maybehere04: directory
maybehere05: directory
maybehere06: directory
maybehere07: directory
maybehere08: directory
maybehere09: directory
maybehere10: directory
maybehere11: directory
maybehere12: directory
maybehere13: directory
maybehere14: directory
maybehere15: directory
maybehere16: directory
maybehere17: directory
maybehere18: directory
maybehere19: directory

일단, maybehere가 파일이 아니라 디렉토리라는 것을 확인했다.

그렇다면 각각의 디렉토리에는 또 다른 디렉토리나 파일이 있을 수 있다.

이 모든 것을 일일이 확인하면 정확하긴 하겠지만, 시간이 많이 걸린다.

 

여기서, find 명령어를 사용해보자

 

find [경로] [전달인자] [옵션]
bandit5@bandit:~/inhere$ find . -size 1033c
./maybehere07/.file2

"현재경로(.)에서 파일 크기가 1033bytes인 파일을 찾아라"라는 명령어이다.

여기서 1033c의 c는 bytes를 의미하고, 킬로바이트는 k, 메가바이트는 m을 쓴다.

 

maybehere07/.file2 파일이 1033bytes 크기를 가지고 있다는 것을 확인했다.

이제 cat 명령어를 사용해서 출력해보자

 

bandit5@bandit:~/inhere$ cat ./maybehere07/.file2
HWasnPhtq9AVKe0dmk45nxy20cvUa6EG

짜쟌~ 반딘 워게임 너무 재밌어~

 


정리

1. 주어진 조건을 파악하고, 어떻게 하면 효율적으로 1033bytes를 이용할 수 있을까

2. find 명령어를 통해 해당 조건 만족하는 파일 찾기

 

반응형

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

[Bandit] Level 7 -> Level 8  (0) 2024.07.19
[Bandit] Level 6 -> Level 7  (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/bandit5.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 only human-readable file in the inhere directory. Tip: if your terminal is messed up, try the “r

overthewire.org

 

Bandit Level 4 → Level 5


Level Goal
The password for the next level is stored in the only human-readable file in the inhere directory. Tip: if your terminal is messed up, try the “reset” command.

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

 

ls : 현재 내 위치에 존재하는 데이터를 보여줌

cd : Change Directory, 말 그대로 디렉토리 경로를 이동

cat : 파일이나 데이터의 내용을 출력

du : 디스크나 용량 확인

find : 리눅스 파일 시스템에서 파일을 검색하는데 사용되는 명령어

 

레퍼런스

https://coding-factory.tistory.com/804

 

[Linux] 리눅스 find 명령어 사용법 (파일 찾기, 검색)

find 명령어 리눅스의 find 명령어는 리눅스 파일 시스템에서 파일을 검색하는 데 사용되는 명령어입니다. 다양한 표현식을 사용하여 원하는 파일의 목록을 추출할 수 있습니다. 리눅스 find 사용

coding-factory.tistory.com

 


문제 해석

패스워드는 inhere directory안에 오직 인간만이 읽을 수 있는 파일에 있다. 화면이 좀 지저분하면, reset을 추천한다. 

 

bandit4@bandit:~$ ls
inhere
bandit4@bandit:~$ file inhere
inhere: directory
bandit4@bandit:~$ cd inhere
bandit4@bandit:~/inhere$ ^C
bandit4@bandit:~/inhere$ ls
-file00  -file01  -file02  -file03  -file04  -file05  -file06  -file07  -file08  -file09

우선 inhere directory로 경로를 이동한다.

그리고, inhere idrectory에 -file00 ~ file09까지의 여러 파일이 있다

 

자, 여기서 "나는 저 파일을 다 확인하면 되겠는데?"라고 생각하는 분이 있다면, 한 손을 들어올려 자신의 뺨을 쳐주세ㅇ...

본인 이야기다.

 

우리는 해커가 될 거니까, 좀 더 인텔리한 방법을 찾아보자

 

 

bandit4@bandit:~/inhere$ file -file00
file: Cannot open `ile00' (No such file or directory)

문제에서 the only human-readable file라는 문구가 있어서 file 명령어로 파일의 형태를 알아본다.

그러나, -file00은 -가 선두에 오는데, 이 경우에는 상대경로를 활용하여 확인할 수 있다

 

 

bandit4@bandit:~/inhere$ file ./-file00
./-file00: data
bandit4@bandit:~/inhere$ file ./-file01
./-file01: data
bandit4@bandit:~/inhere$ file ./-file02
./-file02: data

이렇게 -file00 부터 -file09까지 확인할 수 있지만, 우리는 해커다.

조금 더 편하게 보기 위해 와일드카드를 활용하자

 

bandit4@bandit:~/inhere$ file ./*
./-file00: data
./-file01: data
./-file02: data
./-file03: data
./-file04: data
./-file05: data
./-file06: data
./-file07: ASCII text
./-file08: data
./-file09: data

-file07은 파일 형태가 ASCII text로 되어있다. 즉, the only-human readable file에 적합한 상태이다.

이제 -file07을 cat 명령어로 출력해보자

 

bandit4@bandit:~/inhere$ cat ./-file07
4oQYVPkxZOOEOO5pTW81FB8j8lxXGUQw

So easy하게 풀리는 문제다

 

 


정리

1. the only-human readable file단서가 file 명령어로 확인할 수 있다는 것을 추론한다

2. -로 시작된 파일은 상대경로로 접근하면 확인할 수 있다

반응형

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

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

https://overthewire.org/wargames/bandit/bandit4.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 a hidden file in the inhere directory. Commands you may need to solve this level ls , cd , cat , file

overthewire.org

 

Bandit Level 3 → Level 4


Level Goal
The password for the next level is stored in a hidden file in the inhere directory.

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

 

문제 해석

inhere directory의 숨겨진에 패스워드가 있다.


ls 명령어를 사용하여 inhere 디렉토리를 확인하자.

그리고 cd (Change Directory) 명령어를 사용하여 inhere directory에 접근한다.

 

cd : Change Directory.
cd .. : 이전에 있던 디렉토리로 이동
cd / : 최상위 디렉토리로 이동
cd ~ : 홈 디렉토리로 이동
bandit3@bandit:~$ ls
inhere
bandit3@bandit:~$ cd inhere
bandit3@bandit:~/inhere$ ls
bandit3@bandit:~/inhere$

분명 /inhere 디렉토리에서 ls를 했는데 아무것도 존재하지 않는다.

ls 명령어의 전달인자에 -al을 사용한다면, 숨겨진 폴더나 파일의 정보를 볼 수 있다.

 

 

bandit3@bandit:~/inhere$ ls -al
total 12
drwxr-xr-x 2 root    root    4096 Jul 17 15:57 .
drwxr-xr-x 3 root    root    4096 Jul 17 15:57 ..
-rw-r----- 1 bandit4 bandit3   33 Jul 17 15:57 ...Hiding-From-You

이제 cat 명령어를 사용해서 해당 파일을 출력하자.

 

bandit3@bandit:~/inhere$ cat ...Hiding-From-You
2WmrDFRmJIq3IPxneAaMGhap0pFhF3NJ

참고로, ...까지 치고 tab을 누르면 자동완성 된다.

 


정리

1. 숨겨진 디렉토리나 파일 정보를 보려면 ls -al

반응형

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

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

 

https://overthewire.org/wargames/bandit/bandit3.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 a file called spaces in this filename located in the home directory Commands you may need to solve thi

overthewire.org


Bandit Level 2 → Level 3


Level Goal
The password for the next level is stored in a file called spaces in this filename located in the home directory

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

Helpful Reading Material
Google Search for “spaces in filename”

 

문제 해석

home directory 안에 spaces in this filename라는 파일에 패스워드가 있다.

 


일단 pwd, ls 명령어로 home directory의 spaces in this file name이라는 파일 존재를 확인하자.

bandit2@bandit:~$ pwd
/home/bandit2
bandit2@bandit:~$ ls
spaces in this filename

자, 그럼 여태껏 그래왔듯이 cat 명령어를 사용하여 파일을 출력하자

 

 

bandit2@bandit:~$ cat spaces in this filename
cat: spaces: No such file or directory
cat: in: No such file or directory
cat: this: No such file or directory
cat: filename: No such file or directory

파일에 공백이 있으면, 명령어에 파일명을 입력할 때 파일명이 명령어의 전달 인자로서 인식할 수 있다.

그래서 왠만하면 공백을 피하는 게 좋은데, 공백이 씌여진 파일은 큰 따옴표나 tab으로서 읽을 수 있다.

 

bandit2@bandit:~$ cat spaces\ in\ this\ filename
MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

tab을 누른 경우
bandit2@bandit:~$ cat "spaces in this filename"
MNk8KNH3Usiio41PRUEoDFPqfxLPlSmx

큰 따옴표를 사용하여 출력한 경우

 


정리

1. 큰 따옴표나 tab을 사용하여 공백이 있는 파일을 출력하자

반응형

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

[Bandit] Level 4 -> Level 5  (0) 2024.07.19
[Bandit] Level 3 -> Level 4  (0) 2024.07.18
[Bandit] Level 1 -> Level 2  (0) 2024.07.18
[Bandit] Level 0 -> Level 1  (0) 2024.07.18
[Bandit] Bandit Level 0 putty로 시작하기  (0) 2024.07.18

+ Recent posts