SONOTRI
  • Level 0 -> Level 2
    2024년 12월 26일 15시 48분 16초에 업로드 된 글입니다.
    작성자: sonootri

    Level 0 -> Level 1

    <Level Goal>
    The password for the next level is stored in a file called readme located in the home directory. Use this password to log into bandit1 using SSH. Whenever you find a password for a level, use SSH(on port 2220) to log into that level and continue the game

     

     

    Slove

    홈 디렉토리의 readme 파일에 password가 있다고 하니, cat 명령어를 사용해서 readme 파일의 내용을 읽으면 된다.

    -> ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If 이게 패스워드인 것 같다.

    bandit0@bandit:~$ ls
    readme
    bandit0@bandit:~$ cat readme
    Congratulations on your first steps into the bandit game!!
    Please make sure you have read the rules at https://overthewire.org/rules/
    If you are following a course, workshop, walkthrough or other educational activity,
    please inform the instructor about the rules as well and encourage them to
    contribute to the OverTheWire community so we can keep these games free!
    
    The password you are looking for is: ZjLjTmM6FvvyRnrb2rfNWOZOTa6ip5If

     

    이제 username을 bandit1로 바꾸고 SSH 접속을 한다. password 부분에 위에서 얻은 값을 넣으면 bandit1로 로그인된다. level 1 클리어다!

    ┌──(kali㉿kali)-[~/.ssh]
    └─$ ssh -p 2220 bandit1@bandit.labs.overthewire.org
                             _                     _ _ _   
                            | |__   __ _ _ __   __| (_) |_ 
                            | '_ \ / _` | '_ \ / _` | | __|
                            | |_) | (_| | | | | (_| | | |_ 
                            |_.__/ \__,_|_| |_|\__,_|_|\__|
                                                           
    
                          This is an OverTheWire game server. 
                More information on http://www.overthewire.org/wargames
    
    bandit1@bandit.labs.overthewire.org's password: 
    ...
    bandit1@bandit:~$

    Level 1 -> Level 2

    <Level Goal>
    The password for the next level is stored in a file called - located in the home directory

     

     

    Slove

    홈 디렉토리에 있는 -라는 이름의 파일에 password가 있다고 한다. 파일 이름이 특이하다. 마찬가지로 cat 명령어를 통해 -파일 내용을 읽으면 될 것 같다. 그런데 cat - 를 입력하면 배시 쉘이 표준 입력 대기 상태가 된다.

     

    그래서 ls -l 명령어로 - 파일 정보를 살펴봤다. 특이점은 없는 것 같다. 실행 권한이 x가 없어도, 읽기 권한인 r이 있으니 cat 명령어는 작동해야 하는게 맞다.

    bandit1@bandit:~$ ls -l
    total 4
    -rw-r----- 1 bandit2 bandit1 33 Sep 19 07:08 -

     

     

    파일 유형을 확인하는 file 명령어도 먹히지 않아서 힌트를 참고했다. dashed filename에 대해 살펴보라고 한다. 

    '-' 이러한 유형의 접근 방식은 -를 인수로 사용하여 stdin/stdout을 참조하기 때문에 프로그램에 오해를 불러올 수 있다고 한다. 따라서 일반적인 명령으로는 -로 구분된 파일 이름을 열 수 없을 수도 있다. 

     

    먼저 ./와 같이 현재 디렉토리에 있는 파일임을 명시함으로써 cat 명령어를 작동시킬 수 있다.

    # ./을 이용한 방법
    bandit1@bandit:~$ cat ./-
    263JGJPfgU6LtdEvgfWU1XP5yac29mFx

     

    리디렉션 기호를 사용해 파일을 읽을 수도 있다. 

    # <을 이용한 방법
    bandit1@bandit:~$ cat < -
    263JGJPfgU6LtdEvgfWU1XP5yac29mFx

     

    긴 파일 내용을 한 페이지씩 보여주는 명령어 more을 사용해서 - 파일의 내용을 읽을 수도 있다.

    # more 명령어를 이용한 방법
    bandit1@bandit:~$ more -
    263JGJPfgU6LtdEvgfWU1XP5yac29mFx

     

     

     

    Question

    왜 cat 명령어로는 - 파일을 읽을 수 없고, more 명령어로는 읽을 수 있을까?

     

    이는 명령어의 설계 목적을 알게되면 이해되는 문제이다. 리눅스에서 -는 일반적으로 stdin이나 stdout을 나타낸다.

     

    cat 명렁어는 리디렉션과 파이프에서 자주 사용되므로, -를 표준 입력으로 처리하도록 설계되어있다. 따라서 cat 명령어를 사용하면 -를 파일 이름이 아닌 표준 입력으로 이해하기 때문에 cat - 는 사용자가 입력할 내용을 기다리는 표준 입력 대기 상태가 된다.

     

    반면 more은 주로 파일 내용을 페이지 단위로 표시하기 위해 사용되는 명령어이다. 따라서 -를 파일 이름으로 이해하여 -의 내용이 출력되는 것이다.

     

    그렇다면 more과 비슷한 기능을 가지는 less 명령어로도 - 파일을 읽을 수 있을까?

     

    결론부터 말하자면 아니다. less는 more과 비슷한 기능이라 가능할 것 같이 보이지만 less 또한 cat처럼 -를 표준 입력으로 처리한다.


    01. 셸(Shell)

    셸이란, 키보드의 명령을 받아 운영체제에 전달하여 실행하는 프로그램이다. 대부분의 linux 배포판은 bash 셸 프로그램을 제공한다.

     

    02. 터미널 에뮬레이터(Terminal Emulators)

    GUI를 사용할 경우, 셸과 상호작용 하기 위해서는 터미널 에뮬레이터라는 프로그램이 필요하다.

     

    03. 셸 프롬프트(Shell prompt)

    셸 프롬프트는 셸이 입력을 수락할 준비가 되면 나타난다. 배포판에 따라 모양이 다소 다를 수 있지만 일반적으로 [username]@[machinename] [현재 작업 디렉토리] $ 형태로 되어있다. 

    프롬프트의 마지막 문자가 $가 아닌 #인 경우는 root 사용자로 로그인 했거나 수퍼유저(관리자) 권한을 제공하는 터미널 에뮬레이터를 선택했음을 의미한다.

     

     

    0.4. I/O 리디렉션(redirection), 파일 디스크립터

    리디렉션이란, linux/unix에서 명령어의 입력고 출력을 기본값(터미널) 대신, 파일이나 다른 명령어로 변경하는 기능을 의미한다. 이는 명령어 실행 시 데이터를 읽거나 쓰는 방식을 유연게 조정할 수 있게 해준다.

     

    I/O는 input/output을 의미하며, 이 기능을 사용하면 명령의 입출력을 파일로 리다이렉션 할 수 있고, 여러 명령을 pipeline으로 연결할 수도 있다.

     

    리눅스에서 모든 프로세스는 stdin, stdout, stderr 총 세 가지의 데이터 스트림을 가지고 있으며, 각각 0, 1, 2로 표현된다. 그리고 이를 파일 디스크립터(descripter) 라고 부른다.

    파일 디스크립터 번호 이름  
    0 stdin(표준 입력) 키보드 입력 또는 리다이렉션된 입력(<)
    1 stdout(표준 출력) 프로그램의 일반(정상) 출력
    2 stderr(표준 오류) 에러 메시지 출력

     

     

    05. Linux Redirection

    파일 디스크립터(0,1,2)와 redirection 기호(>, >>, <, <<)를 사용하여 입출력 동작을 자유롭게 변경하여 사용할 수 있다.

    > 결과를 파일로 저장(덮어쓰기)
    >> 결과를 파일로 저장(덮어쓰지 않고 기존 파일에 추가)
    < 입력을 명령어에 실행(덮어쓰기)
    << 입력을 명령어에 실행(덮어쓰지 않고 기존 파일에 추가)

     

     

    06. /와 ./

    /는 루트 디렉토리를 의미한다. /a.sh는 루트 디렉토리에 있는 a.sh 파일을 실행하라는 의미가 된다.

    ./는 현재 디렉토리를 나타낸다. ./a.sh는 현재 디렉토리에 있는 a.sh 파일을 실행하라는 의미가 된다.

     

     

    07. 디렉토리 구조(/home, ~)

    https://slowsteadystat.tistory.com/17

    ┌──(kali㉿kali)-[~]
    └─$ cd / 
                                                                                                 
    ┌──(kali㉿kali)-[/]
    └─$ ls
    bin   home            lib32       mnt   run       swing    usr
    boot  initrd.img      lib64       opt   sbin      swing32  var
    dev   initrd.img.old  lost+found  proc  srv       sys      vmlinuz
    etc   lib             media       root  swapfile  tmp      vmlinuz.old
                                                                                                 
    ┌──(kali㉿kali)-[/]
    └─$ cd home

     

    ~에서 cd/를 통해 root 디렉토리로 이동하는 것을 보고 의문점이 생기기 시작했다.

    Q1) ~(홈 디렉토리)가 root 디렉토리보다 상위 디렉토리인가?

    -> 아니다. root가 최상위 디렉토리이다.

     

    Q2) ~도 홈 디렉토리인데, 그럼 / 아래에 있는 home 디렉토리는 뭐지?

    -> ~ 디렉토리는 /의 하위 디렉토리 중 하나인 /home/[사용자] 디렉토리이다.

     

    정리하자면 /home은 모든 사용자의 홈 디렉토리를 포함하는 디렉토리, ~(/home/[사용자 명])은 특정 사용자의 홈 디렉토리이다.

    사용자 명 ~ 디렉토리
    user1 /home/user1
    root /root

     

    'PRIVATE > bandit' 카테고리의 다른 글

    Level 4 -> Level 6  (0) 2024.12.27
    Level 2 -> Level 4  (1) 2024.12.27
    Level 0-SSH  (0) 2024.12.25
    댓글