융보공 과제

CTF 스터디 6주차

yooon81 2024. 5. 5. 20:00

컴퓨터과학기초 강의 수강하고 64se64 문제 풀기 + 리눅스 사용법 공부하고 & baby-linux 풀기

 

인코딩

데이터를 특정한 형식으로 변환하는 것. 데이터의 크기를 줄이거나, 컴퓨터가 이해하기 쉽게 변환할때 사용 

디코딩

인코된 데이터를 디코딩하여 원래의 값을 구할 수 있음

 

인코딩은 암호화와 비슷하지만, 암호화는 데이터의 기밀성을 목적으로 남이 데이터를 알아보지 못하도록 변환하지 때문에 비밀키가 있어야 원문을 복구할 수 있지만, 인코딩은 누구나 표준화된 방식을 사용해서 디코딩하여 원문을 구할 수 있다는 점이 다릅니다. 

 

아스키 코드

 

아스키 코드는 정보 교환을 위한 미국 표준 코드로, 문자를 숫자로 변환하는 문자 인코딩의 표준입니다. 아스키 코드를 사용하여 문자를 숫자로 인코딩하면 서로 다른 장치 간 데이터 전송을 더 쉽게 수행할 수 있습니다.

 

유니코드

아스키 코드는 미국에서 만든 표준 코드인 만큼 알파벳 대소문자, 숫자, 특수 문자, 제어 문자만을 포함하고 있습니다. 초반에는 이러한 코드도 문제가 없었으나, 점차 다양한 언어와 문자가 나타나면서 새로운 형식이 필요해졌고 유니코드가 등장했습니다.

 

유니코드는 영어 뿐만 아니라, 전세계 모든 언어의 문자에 고유한 번호를 부여하는 국제 표준 코드. 서로 다른 언어를 사용할 때 문자가 호환되지 않는 문제를 해결하기 위해 만들어졌습니다. 아스키 코드보다 용량을 크게 확장하여 최대 32 비트로 문자 1개를 표현하여, 현재 143000개 이상의 문자를 표현할 수 있습니다. 유니코드의 처음 128개 문자는 아스키 코드의 문자와 정확히 일치합니다. 즉, 유니코드 안에 아스키 코드가 포함된다고 볼 수 있습니다. 유니코드 값은 U+ 뒤에 16진수를 붙여 나타냅니다.

 

URL 인코딩 (퍼센트 인코딩)

 

base64 인코딩

 

운영체제 OS

사용자는 웹 브라우저, 엑셀, 메모장 등의 프로그램으로 원하는 작업을 수행하곤 합니다. 사용자를 위해 특정한 기능을 수행하는 이러한 프로그램을 응용 프로그램이라고 합니다. 이때 응용 프로그램의 동작을 수행하고, 응용 프로그램에게 시스템 자원을 할당하는 등의 복잡한 관리 작업은 사용자가 아니라 운영체제라는 소프트웨어에 의해 이루어집니다.

 

커널과 셀

운영체제는 크게 커널 로 나눌 수 있습니다. 먼저 커널은 운영체제의 핵심 기능인 하드웨어 관리를 실제로 수행하는 프로그램입니다. 커널은 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리하며, 시스템이 부팅될 때 메모리에 올라가서 꺼질 때까지 실행됩니다.

 

은 사용자와 운영체제의 커널 사이에서 사용자가 운영체제에 명령을 내릴 수 있도록 인터페이스 역할을 합니다. 사용자가 셸에 명령을 입력하면, 셸이 명령어를 해석하여 커널에 요청합니다. 커널은 명령을 수행하며 하드웨어를 조작하고, 수행 결과를 셸에 전송합니다. 셸은 이 결과를 해석하여 사용자에게 출력해 줍니다. 즉, 셸은 명령어를 해석하는 역할을 하여 사용자와 운영체제가 소통할 수 있도록 합니다. 셸을 획득하면 명령어를 통해 원하는 작업을 수행하고 시스템을 제어할 수 있게 됩니다. 따라서 일반적으로 셸을 획득하는 것을 시스템 해킹의 성공으로 여깁니다.

 

운영체제 종류

 

Windows는 마이크로소프트사에서 개발한 운영체제로, (GUI) 기능을 제공하여 사용자가 편리하게 사용할 수 있습니다. 2022년 통계에 의하면 대한민국 PC 운영체제 점유율의 90% 가까이를 Windows가 차지하고 있습니다. 그만큼 많은 한국인들은 어렸을 때부터 윈도우를 사용해왔으며 윈도우 사용법에 친숙할 것입니다.

 

UNIX는 벨 연구소에서 개발한 운영체제로, 대부분의 운영체제는 UNIX로부터 발전된 기술을 사용하고 있습니다. 따라서 현대 운영체제의 원형이라고 할 수 있습니다. 사용자가 키보드로 입력하는 명령에 의해 조작되는 (CUI) 기반의 대화식 운영체제

baby-linux

Sell

셸은 유저가 리눅스 시스템을 이용할 수 있는 인터페이스입니다. 셸은 유저에게 입력을 받고 운영체제가 그것을 프로그램으로 처리하면 그 결과를 유저에게 출력합니다.

 

셸 프롬프트(Shell Prompt)

1. sudo apt update

sudo apt update는 apt 명령어로 설치 가능한 소프트웨어 패키지 목록을 업데이트합니다. 그리고 각 소프트웨어 패키지 별로 어떤 버전을 설치할 수 있는지도 업데이트

2. sudo apt upgrade

리눅스에 설치된 소프트웨어 패키지의 버전을 업그레이드합니다. 오래된 소프트웨어 패키지에 존재하는 취약점은 보안 문제를 일으킬 수 있습니다. 따라서 주기적으로 소프트웨어 패키지를 업그레이드하여 보안 문제를 예방하는 작업이 중요합니다.

3. id

현재 유저의 유저 ID와 해당 유저가 속해있는 그룹 ID를 출력합니다. 리눅스는 권한을 기반으로 파일을 읽고 쓰고 실행할 수 있기 때문에 주로 자신이 해당하는 권한을 가지고 있는지 확인하기 위해 사용하는 명령어입니다.

4. pwd

Print Working Directory의 줄임말로 현재 작업 중인 디렉토리의 경로를 출력합니다. 아래 pwd 명령어 실행 결과에 따르면 현재 /home/user 디렉토리에 위치함을 알 수 있습니다.

5. ls

List의 줄임말로 디렉토리의 내용을 출력하는 명령어입니다. ls 명령어 실행 결과는 다음과 같습니다. -l 플래그를 추가한 형태인 ls -l 을 실행하면 다음과 같이 더 자세한 정보를 함께 출력합니다.

6. cd

Change Directory의 줄임말로 작업중인 디렉토리를 변경하는 명령어. 명령어 설명에 앞서 절대 경로 상대 경로에 대해 알아야 합니다.

 

절대 경로는 루트 디렉토리 / 를 시작으로 모든 경로를 적어서 표현하는 경로입니다. /home/user 도 절대 경로 입니다.

상대 경로는 현재 디렉토리를 기준으로 상위 디렉토리 또는 하위 디렉토리로 뻗어 나가는 경로를 말합니다. 예를 들어 cd 는 현재 디렉토리에서 부모 디렉토리로 이동합니다. 가령 현재 디렉토리가 /home/user 일 때 cd를 실행하면 /home 으로 이동합니다. 몇 가지 특별히 정해진 고유한 경로도 있습니다. 예를 들어 ~ 는 현재 유저의 홈 디렉토리이며, - 는 이전에 위치했던 디렉토리를 나타냅니다.

7. mkdir

Make Directory의 줄임말로 디렉토리를 생성하는 명령어. /home/user 디렉토리에 위치할 때 mkdir new_dir 명령어로 new_dir 디렉토리를 생성하면, 다음과 같이 new_dir 가 새롭게 추가됩니다. 

8. touch

touch 명령어는 비어 있는 새로운 파일을 만드는 데 사용합니다. 앞서 생성한 new_dir 디렉토리로 이동 후 ls -l 명령어를 실행해보면 아무런 파일도 존재하지 않습니다.

9. mv

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

 

10. rm

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

11. cat

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

12. file

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

13. echo

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

14. cp

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

15. grep

전체에서 특정 문자열을 찾을 때 사용합니다. grep 문자열 파일 형식으로 사용할 수 있습니다.

16. man

Manual의 줄임말로 특정 명령어의 매뉴얼을 보여주는 명령어입니다. 매뉴얼은 명령어 사용법, 옵션, 예제 등 유용한 정보를 담고 있습니다. 다음은 man cp 명령어 실행 결과입니다. 명령어를 실행하면 아래와 같이 cp 명령어의 매뉴얼을 보여줍니다.

17. curl

client URL의 줄임말로 서버에 데이터를 보내거나 서버로부터 데이터를 받는 데이터 전송 명령어입니다. curl [옵션] URL 형식으로 사용할 수 있으며, HTTP, HTTPS, FTP 등 다양한 프로토콜을 지원합니다. 

 

와일드 카드

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

 

리다이렉션

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

명령어 > 파일

파이프

 

파이프는 리다이렉션의 한 형태로, 명령어 결과 표준 출력을 다른 명령어의 표준 입력으로 보낼 때 사용합니다. 파이프는 | 문자로 나타냅니다. 다음은 ls -l 명령 결과에서 hello가 포함된 행을 찾아 출력하는 예시입니다.

 

유저(user)와 그룹(group)

 

리눅스에서 유저 그룹 리눅스의 권한 시스템을 설명하기 위해 빠뜨릴 수 없는 개념입니다. 리눅스의 각 유저는 이름과 고유한 사용자 ID(UID) 를 가지고 있습니다. 그룹은 말 그대로 여러 유저가 속할 수 있는 그룹으로, 이 역시 그룹 이름과 고유한 그룹 ID(GID) 를 가지고 있습니다.

 

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

 

파일 및 디렉코리 권한

 

리눅스는 사용자가 파일과 디렉토리에 접근하는 행위에 대해 권한으로 제어합니다. 각 파일과 디렉토리는 소유자(owner)  소유 그룹(group) 을 가지고 있습니다. 소유자는 파일 또는 디렉토리의 권한을 수정할 수 있는 능력을 가지고 있습니다. 소유자는 이를 통해 소유자 또는 소유 그룹에 포함된 유저가 해당 파일 또는 디렉토리에 대해서 얼마만큼 접근 권한을 가질 것인지 설정할 수 있습니다. 다음과 같이 세 종류의 접근 권한이 있습니다.

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

 

파일 및 디렉토리 권한

 

세번째 user : 소유자

 

위 결과에서 세 번째 열이 파일 또는 디렉토리의 소유자를 나타냅니다. 소유자는 파일 또는 디렉토리에 대한 제어권을 가지고 있습니다. 소유자는 파일 또는 디렉토리의 권한 플래그를 변경할 수 있고 파일의 소유자 또는 소유 그룹을 변경할 수도 있습니다. 위 dir 디렉토리의 소유자가 user 유저임을 알 수 있습니다.

 

네번째 열 user: 소유자

 

결론

앞서 배운 것들을 종합하여 아래의 ls -l 결과를 해석해보겠습니다.

 

 특수 권한

디렉토리 구조

루트 디렉토리/

루트 디렉토리는 리눅스의 최상위 디렉토리를 말하며, 절대 경로는 / 입니다.

 

 

 

 

 

'융보공 과제' 카테고리의 다른 글

CTF(baby-linux)  (0) 2024.05.06
CTF(64se64 문제 풀이)  (0) 2024.05.05
CTF 스터디 7주차  (0) 2024.05.05
3주차 과제  (0) 2024.03.31
2주차 과제  (0) 2024.03.25