본문 바로가기

3. Pwnable (포너블)

[2024.09.21]PWN PWN 해 1주차 활동

1주차: 리눅스 사용법

 

1주차는 드림핵의 리눅스 사용법 강의를 공부했다.

https://dreamhack.io/lecture/courses/441

 

Dreamhack | 강의 | Dreamhack

 

dreamhack.io

 

 


(Shell): 유저가 리눅스 시스템을 이용할 수 있는 인터페이스

터미널 실행 단축키: Ctrl+alt+T (윈도우, 리눅스 기준)

 

<명령어>

1. sudo apt update

apt 명령어로 설치 가능한 소프트웨어 패키지 목록과 각 소프트웨어 패키지 별로 어떤 버전을 설치할 수 있는지를 업데이트한다.

 

2. sudo apt upgrade

리눅스에 설치된 소프트웨어 패키지의 버전을 업그레이드한다.

 

3. id

현재 유저의 유저 ID와 해당 유저가 속해있는 그룹 ID를 출력한다.

리눅스는 권한을 기반으로 파일을 읽고 쓰고 실행할 수 있기 때문에 주로 자신이 해당하는 권한을 가지고 있는지 확인하기 위해 사용하는 명령어

 

4. pwd

Print Working Directory의 줄임말로 현재 작업 중인 디렉토리의 경로를 출력한다.

 

5. ls

List의 줄임말로 디렉토리의 내용을 출력하는 명령어이다.

ls -l: #더 자세한 정보(권한 등) 출력

ls -l d: #d디렉토리의 내용 출력

 

6. cd

Change Directory의 줄임말로 작업중인 디렉토리를 변경하는 명령어이다.

절대 경로(Absolute Path) 상대 경로(Relative Path).

절대 경로는 루트 디렉토리 / 를 시작으로 모든 경로를 적어서 표현하는 경로

상대 경로는 현재 디렉토리를 기준으로 상위 디렉토리 또는 하위 디렉토리로 뻗어 나가는 경로

Ex) ex) .. :부모 디렉토리, ~ : 현재의 디렉토리, - : 이전에 위치했던 디렉토리*/

 

7. mkdir

Make Directory의 줄임말로 디렉토리를 생성하는 명령어이다.

 

8. touch

touch 명령어는 비어 있는 새로운 파일을 만드는 데 사용한다

 

9. mv

Move의 줄임말로 파일이나 디렉토리의 위치를 옮길 때 사용하는 명령어, 파일이나 디렉토리의 이름을 변경할 때에도 사용할 수 있다.

mv f/d f’/d’: #f파일/d디렉토리의 이름을 f’/d’으로 변경

mv f/d1 d2: #f파일/d1디렉토리를 d2디렉토리로 이동

 

10. rm

Remove의 줄임말로 파일이나 디렉토리를 삭제하는 명령어이다.

rm -r d: #d디렉토리를 삭제

 

11. cat

파일의 내용을 출력하는 명령어이다.

 

12. file

파일의 유형을 출력하는 명령어이다.

 

13. echo

셸에 유저가 입력한 텍스트를 출력한다.

Echo 명령문 끝에 > 파일명을 이어 붙여 실행하면, 파일명 을 이름으로 갖는 파일을 생성, 뒤에 입력한 내용을 파일 내용으로 저장한다.

echo “t” > f: #f파일을 생성하고 t를 저장

 

14. cp

Copy의 줄임말로 파일이나 디렉토리를 복사하는 명령어

cp f f’: #f파일을 f’란 이름으로 복사

cp -r d d’: #d디렉토리를 d’란 이름으로 복사

 

15. grep

전체에서 특정 문자열을 찾을 때 사용한다.

grep t f : #f파일에서 t가 포함된 행을 출력

 

16. man

Manual의 줄임말로 특정 명령어의 매뉴얼을 보여주는 명령어이다.

 

17. curl

client URL의 줄임말로 서버에 데이터를 보내거나 서버로부터 데이터를 받는 데이터 전송 명령어이다. (curl option URL)

 

주요 curl 명령어 옵션

  • -o file : 전송 받은 데이터를 파일에 저장
  • -i : 결과 값에 HTTP 응답 헤더를 포함
  • -X "method" : HTTP 요청 메소드를 지정
  • -d "key=value" : HTTP POST 메소드로 데이터를 전송

 


와일드카드

와일드카드(wildcards)는 리눅스에서 임의의 다른 문자를 나타낼 수 있는 특수 문자들을 의미 주로 명령어를 다른 문자열로 대체하기 위해 사용

? : a-z, 0-9 범위 내 임의의 1개 문자로 대체

* : a-z, 0-9 범위 내 임의의 0개 이상 문자로 대체

[] : [문자1-문자2] 혹은 [문자1, 문자2, …] 형태로 범위를 지정하고 범위 내 모든 문자로 대체

 

리다이렉션

리다이렉션(redirection)모니터에 나타나는 표준 출력 혹은 키보드로 입력하는 표준 입력을 다른 곳으로 변경하는 작업,  주로 어떤 명령어의 결과를 파일로 저장하거나, 다른 명령어의 입력으로 전달하는 형태로 리다이렉션한다.

명령어 > 파일

명령어 표준 출력을 파일로 변경하거나 파일이 없으면 새로 만들고, 있으면 덮어쓴다.

명령어 >> 파일

명령어 표준 출력을 파일로 변경하거나 파일이 없으면 새로 만들고, 있으면 이어서 쓴다.

명령어 < 파일

명령어 표준 입력을 파일로 변경하거나 파일로부터 표준 입력을 받아 명령어를 수행한다.

 

파이프

파이프(pipe)는 리다이렉션의 한 형태로, 명령어 결과 표준 출력을 다른 명령어의 표준 입력으로 보낼 때 사용한다

 

권한

유저(user)와 그룹(group)

리눅스에서 유저와 그룹은 리눅스의 권한 시스템을 설명하기 위해 빠뜨릴 수 없는 개념이다.

파일이나 디렉토리와 같은 시스템 자원에 유저가 접근하면 유저의 UID와 해당 유저가 속한 그룹의 GID를 확인하여 정당한 권한을 가지고 있는지를 판단해 접근을 제어한다.

-      /etc/passwd: 리눅스의 유저 정보를 담고 있는 텍스트 파일 ex) cat /etc/passwd

-      /etc/group: 리눅스의 그룹 정보를 저장하는 텍스트 파일 ex) cat /etc/group

-       

 

파일 및 디렉토리 권한

리눅스는 사용자가 파일과 디렉토리에 접근하는 행위에 대해 권한으로 제어하며 각 파일과 디렉토리는 소유자(owner) 와 소유 그룹(group)을 가지고 있다. 소유자는 파일 또는 디렉토리의 권한을 수정할 수 있는 능력과 소유자는 이를 통해 소유자 또는 소유 그룹에 포함된 유저가 해당 파일 또는 디렉토리에 대해서 얼마만큼 접근 권한을 가질 것인지 설정할 수 있으며 접근 권한을 보기 위해선 ls -l을 사용하면 된다.

다음과 같은 권한이 있다.

  • 읽기 r (Read): 파일 또는 디렉토리의 내용을 볼 수 있게 허용
  • 쓰기 w (Write): 파일 또는 디렉토리의 내용을 수정하거나 삭제하는 것을 허용
  • 실행 x (Execute): 파일이 프로그램인 경우 실행할 수 있게 허용합니다. 디렉토리의 경우, 디렉토리의 내용에 접근할 수 있도록 허용

 

. 첫 번째 열 drwxrwxr-x : 권한 플래그

  • r: 소유자(또는 소유 그룹에 포함된 유저들 또는 그외 유저)가 파일 또는 디렉토리에 읽기(Read) 권한.
  • w: 소유자(또는 소유 그룹에 포함된 유저들 또는 그외 유저)가 파일 또는 디렉토리에 쓰기(Write) 권한
  • x: 소유자(또는 소유 그룹에 포함된 유저들 또는 그외 유저)가 파일 또는 디렉토리에 실행(Execute) 권한

d: 파일의 타입이 디렉토리임을 나타낸다.

첫 번째 rwx: 파일, 디렉토리의 소유자의 권한을 나타낸다.

두 번째 rwx: 파일, 디렉토리의 소유 그룹에 포함된 유저들의 권한을 나타낸다.

r-x: 나머지 유저들의 권한을 나타낸다.

번째 user : 소유자

네 번째 열 user : 소유 그룹

 

파일 및 디렉토리 권한 명령어

Chmod 권한 f

파일 권한을 변경하는 명령어로 root 유저나 파일 소유자만 실행 가능하다.

권한을 10진수로 표현하거나 기존 권한에 문자를 더하거나 뺀다.

ex) hello 파일의 소유자 권한 rwx(111), 소유 그룹 권한 rw-(110),
일반 유저 권한 r—
(100) 변경할 10진수로 나타내어 chmod 764 hello 실행

ex) hello 파일의 소유 그룹에 실행 권한을 부여 : chmod g+x hello
hello
파일의 소유 그룹에 실행 권한을 제거 : chmod
g-wx hello

 

Chown 시용자[그룹] f

chown은 파일 소유자 혹은 소유 그룹을 변경하는 명령어로 root 유저만 실행할 수 있다. 소유 그룹만 변경하려면 chgrp 명령어를 사용한다.

 

특수 권한

r, w, x 권한 외에 특수한 권한 3가지

setuid: 일반 사용자가 파일을 실행하면 파일 소유자 권한으로 실행. 소유자의 실행 권한에 x 대신 s 문자로 나타낸다. S로 표시되는 경우는 setuid가 걸려 있으나, 실행 권한이 없는 경우.

setgid: 일반 사용자가 파일을 실행하면 파일 소유 그룹 권한으로 실행되며, 소유 그룹의 실행 권한에 x 대신 s 문자로 나타낸다. S로 표시되는 경우는 setgid가 걸려 있으나, 실행 권한이 없는 경우.

sticky bit: 디렉토리에 sticky bit를 설정하면 파일 및 디렉토리 소유자와 root 사용자 외에 일반 사용자가 파일을 삭제할 수 없음. 일반 사용자의 실행 권한에 x 대신 t 문자로 나타낸다. T로 실행되는 경우는 sticky bit가 걸려 있으나, 실행 권한이 없는 경우.

 

-      특수 권한을 지정할 때는 권한 플래그 앞에 숫자를 붙여 나타낸다.

Ex) setuid 4, setgid 2, sticky bit 1

 

디렉토리 구조

루트 디렉토리 (/): 리눅스의 최상위 디렉토리를 말하며, 절대 경로는 /

/bin: 기본적인 명령어나 프로그램

/boot: 시스템 부팅에 필요한 파일들

/dev: 컴퓨터에 부착된 물리적인 장치들

/etc: 운영체제나 운영체제 위에서 동작하는 서비스의 설정 파일들

/home: 일반 유저의 디렉토리

/lib: 시스템에 필요한 라이브러리 파일들

/opt: 소프트웨어 패키지들