Bandit Level 1 → Level 2

Minchae Kim·2023년 4월 29일
0

📌 Level 1 → Level 2


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

🚩 Level Goal

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

🚩 Problem Solving

level 1의 password를 구할 때와 동일하게 ls 명령어를 사용하려고 했으나, 예상과 다르게 출력하는 사실을 알 수 있다. 그 이유는 file name이 '-'이기 때문에, ls 옵션을 사용할 때 쓰는 '-'와 기호가 겹치게 된다. 그렇기에 'dashed filename'인 경우에는 별도의 명령어를 사용해야 한다. 'Helpful Reading Material'에 나와있는대로, 구글에 "How to read dash files"라고 검색하면 필요한 명령어를 학습할 수 있다.

🔹 Process

'>'과 '>>'(반대 방향 포함)와 같은 기호들을 "Redirect"라 부르며, 이를 사용하면 password를 얻어낼 수 있다.

cat > -

이외에 현재 디렉토리를 의미하는 './' 명령어를 사용하여 dashed filename인 파일 내부의 내용을 출력해낼 수 있다.

cat ./-

🔹 Password

Bandit2 Password : rRGizSaX8Mk1RTb1CNQoXTcYZWU6lgzi

📌 Linux Concept


  • Commands you may need to solve this level : ls , cd , cat , file , du , find
  • Helpful Reading Material : 1) Google Search for “dashed filename” 2) Advanced Bash-scripting Guide - Chapter 3 - Special Characters

🚩 File Discriptor (파일 기술자, FD)

파일 디스크립터는 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(process)가 파일(file)을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값이다. 다시 말해, 리눅스 운영 체계에서 파일에 대한 정보를 기술하고 유지하는 기억 장치의 영역이다. 리눅스 shell은 작업에 필요한 파일들을 일종의 번호를 붙여서 관리하는데, 그것이 아래 적힌 FD 테이블이다.

🔹 FD 테이블

프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일 디스크립터는 표준 입력(Standard Input), 표준 출력(Standard Output), 표준 에러(Standard Error)이다. 이들에게 각각 0, 1, 2라는 정수가 할당된다.

0, 1, 2의 숫자로 이루어져 있는 이유는, 이러한 숫자가 곧 프로세스가 유지하고 있는 FD 테이블의 인덱스이기 때문이다. 즉, FD 3번이라는 의미는, FD 테이블의 3번 항목이 가리키는 파일이라는 의미이다.

🚩 Redirection (재지정)

앞서 설명했듯이, 리눅스에서 명령어의 결과는 표준 출력 방식인 모니터에 출력된다. 그러나 Redirection을 이용하면 명령의 출력을 변경할 수 있다. '<'와 '<<' 기호는 입력이므로 좌측값 0을 기본으로, '>'와 '>>' 기호는 출력이므로 좌측값 1을 기본으로 한다.

🔹 입력 리디렉션 : "<"

지정된 파일의 내용을 표준 입력으로 넘겨준다. 즉 filename에 들어있는 내용을 출력한다고 보면 된다. 좌측값 0을 기본으로 한다.

cat < file1
→ file1의 내용 출력

🔹 덮어쓰기 출력 리디렉션 : ">"

표준 출력에 전달된 내용을 지정된 파일로 넘겨준다. 기존 file2의 내용에 hello가 덮어쓰여진다. 좌측값 1을 기본으로 한다.

file1 hello > file2
cat file2
→ hello

이외에 "<<"와 ">>" 리디렉션은 추후 level에서 등장할 때 다시 정리해둘 예정이다.

🚩 절대 경로 & 상대 경로

리눅스에서 명령어를 사용할 경우, 경로명까지 입력해야 하는 경우가 많으므로 경로에 대한 개념을 파악해야 한다. 리눅스의 디렉토리는 계층적 트리 구조이다. 이때 파일 시스템이 있는 최상위 디렉터리는 '/'이다.

🔹 절대 경로

최상위 디렉터리인 '/'부터 시작해서 목표 디렉터리까지 가는 경로를 전부 기술하는 방식이다. 절대 경로로 경로를 기술할 때에는 항상 맨 앞에 최상위 디렉터리 '/'가 붙는다는 것을 명심해야 한다. 예를 들어, 절대 경로를 이용하여 d 디렉터리로 이동해보자.

cd /a/b/c/d/
→ d로 이동

이처럼 절대 경로를 통해 이동할 때에는 현재 위치에 상관 없이 똑같은 명령어를 입력하여 이동하게 된다. 다시 말해, 최상위 디렉터리부터 해당 디렉터리가 위치하는 곳까지의 경로를 차례대로 적어주면 된다. (반드시 최상위 디렉터리부터 시작하는 경로이므로 현재 위치를 고려할 필요가 없다.)

🔹 상대 경로

상대 경로는 현재 자신이 위치한 디렉터리를 기준으로 하는 경로를 의미한다. 현재 자신이 있는 위치는 '.(마침표)'로 표기한다.

  • ./ : 현재 디렉터리
  • ../ : 상위 디렉터리

마찬가지로 예제를 통해서 상대 경로를 활용하여 b 디렉터리에서 d 디렉터리로 이동해보자.

cd ./c/d/
→ b에서 d로 이동

/a/b/c/d/ 중, /a/b/까지의 경로는 현재 자신의 위치이므로, '.(마침표)'로 표기했다. 그리고 나머지 경로 /c/d/를 입력하여 경로를 이동한 것이다. 다시 상대 경로를 활용하여 b 디렉터리로 이동해보자. b 디렉터리까지 이동하기 위해서는 상위 디렉터리로 2회 이동해야 한다.

cd ../../
→ 상위 디렉터리인 b로 이동

profile
Security Researcher 시켜줘 !

0개의 댓글