Study/Ping!

6주차 과제: 드림핵 비기너즈, 네트워크

이응이응잉 2025. 3. 2. 20:57

Dream Beginners | 로드맵 | Dreamhack

 

Dream Beginners

처음 해킹을 공부하는 사람들에게 필요한 가이드를 제공합니다.

dreamhack.io

 

Netcat (nc)

보안을 공부하는 많은 실습의 경우 서버에서 특정 포트를 통해 서비스를 동작시키는 환경을 구성한다.

이런 경우에 클라이언트가 이 프로그램과 통신하기 위해서 사용하는 것이 Netcat (nc) 이라는 도구다.

 

사용 방식: nc <hostname(ip)> <port>

nc 활용법: " Exercise: Welcome-Beginners " 문제 풀이, 하단에 Flag가 나온다.


SSH

원격 서버(컴퓨터)에 연결할 수 있도록 해 주는 암호화된 네트워크 프로토콜.

클라이언트가 원격 서버의 터미널에 접속하여 명령어를 입력하면, 호스트가 명령 실행 결과를 클라이언트에게 전달

 

윈도우는 따로 ssh를 설치해야 명령어로 사용할 수 있다. 설치되었다면 cmd로 가서 ssh를 입력해 확인한다. 하지만 우리가 문제를 풀이할 땐 Linux Ubuntu 환경에서 풀이하므로, 기본적으로 ssh가 설치되어있으니 따로 확인할 필요가 없다.

 

사용 방식: ssh <user@HOST -p> <PORT -i [개인 키 파일 경로]>

입력하고 yes를 입력하면 chall의 계정으로 접속된다.
flag 파일을 cat하면 되므로 입력해주면 플래그 발견!


Docker

컨테이너를 만들고, 실행하고, 배포할 수 있는 가상화 플랫폼

도커의 컨테이너란, 가상의 환경이 구축되어 있는 하나의 박스를 말한다.

  • 도커 이미지: 도커 컨테이너의 전 단계로, 컨테이너를 생성하고 실행하기 위한 모든 것을 포함
  • 도커 컨테이너: 도커 이미지로부터 만들어진 실행 가능한 인스턴스
  • 도커 레지스트리: 도커 이미지를 저장하는 저장소

 

도커 명령어

1. docker build: Dockerfile을 이용하여 이미지를 생성

  • docker build [옵션] <경로>
  • docker build -t <이미지명:태그> <경로> →  -t 옵션은 이미지의 이름과 태그를 지정

2. docker images: 도커 이미지 목록 출력

 

3. docker run: 도커 이미지로 컨테이너를 생성하고 실행

  • docker run [옵션] <이미지명|ID> [명령어]
  • docker run -p <호스트 PORT>:<컨테이너 PORT> <이미지명|ID>   -p 옵션은 도커 컨테이너의 포트와 호스트의 포트를 매핑

4. docker ps: 실행 중인 컨테이너 목록 출력

  • docker ps -a   -a 옵션은 종료된 컨테이너까지 모두 출력

5. docker create: 도커 이미지로 컨테이너를 생성 (run에서 생성만 하고 싶을 때 사용)

  • docker create [옵션] <이미지명|ID> [명령어]

6. docker start: 중단된 컨테이너를 시작

  • docker start [옵션] <컨테이너명|ID>

7. docker exec: 실행 중인 컨테이너에 접속하여 명령을 수행

  • docker exec [옵션] <컨테이너명|ID> [명령어]

8. docker stop: 실행 중인 컨테이너를 중단

  • docker stop [옵션] <컨테이너명|ID>

9. docker pull: 레지스트리(Docker Hub)에 존재하는 도커 이미지를 다운

  • docker pull [옵션] <이미지명>

10. docker rm: 도커 컨테이너 삭제

  • docker rm [옵션] <컨테이너명|ID>

11. docker rmi: 도커 이미지 삭제

  • docker rmi [옵션] <이미지명|ID>

12. docker inspect: 도커 이미지 혹은 컨테이너의 자세한 정보 출력

  • docker inspect [옵션] <이미지 혹은 컨테이너명|ID>

도커 설치 완료!

 

Dockerfile

Dockerfile은 이미지를 생성하는데 필요한 명령어를 포함하여 모든 설정이 정의된 파일

 

Dockerfile 명령어

1. FROM: 생성할 이미지의 기반이 되는 base 이미지를 지정

  • FROM 이미지:태그

2. ENV: Dockerfile 내에서 사용하는 환경 변수를 지정

  • ENV 변수명 값 or ENV 변수명=값

3. RUN: 이미지를 빌드할 때 실행할 명령어를 작성, 필요한 패키지를 설치하거나, 파일 권한 설정 등의 작업을 수행

  • RUN 명령어 or RUN ["명령어", "인자1", "인자2"]

4. COPY: src 파일이나 디렉토리를 이미지 파일 시스템의 dest로 복사

  • COPY <src> <dest>

5. ADD: src 파일이나 디렉토리, URL을 이미지 파일 시스템의 dest로 복사합니다.

  • ADD <src> <dest>

6. WORKDIR: Dockerfile 내의 명령을 수행할 작업 디렉토리를 지정합니다. 리눅스의 cd 명령어와 유사합니다.

  • WORKDIR 디렉토리

7. USER: 명령을 수행할 사용자 혹은 그룹을 지정합니다.

  • USER 사용자명|UID or USER 사용자명|UID[:그룹명|GID]

8. EXPOSE: 컨테이너가 실행 중일 때 들어오는 네트워크 트래픽을 리슨할 포트와 프로토콜을 지정

사용할 수 있는 프로토콜은 TCP와 UDP이며, 기본적으로 TCP가 지정

  • EXPOSE 포트 or EXPOSE 포트/프로토콜

9. ENTRYPOINT: 컨테이너가 실행될 때 수행할 명령어를 지정

  • ENTRYPOINT 명령어 인자1 인자2 or ENTRYPOINT ["명령어", "인자1", "인자2"]

10. CMD: 컨테이너가 실행될 때 수행할 명령어를 지정하거나, ENTRYPOINT 명령어에 인자를 전달

  • CMD 명령어 인자1 인자2 or CMD ["명령어", "인자1", "인자2"] or CMD ["인자1", "인자2"]

 

Docker Hub

도커의 공식 레지스트리로, 도커 이미지를 저장하는 저장소.

Docker Hub를 이용하면 Dockerfile이 아닌 이미지 그 자체를 보관하고 공유할 수 있다.

→ 자신만의 문제 풀이 환경을 구축해 두고 사용하고 싶거나, 워게임을 직접 제작하여 다른 사람들과 공유하고 싶은 경우 등에 유용

 


정규 표현식(Regular Expression)

특정한 패턴으로 문자열을 표현하는 식,  주로 로직을 수행하기 전에 이용자가 입력한 값을 검증하기 위해 사용

정규 표현식 패턴

정규 표현식은 '패턴' 혹은 /패턴/ 의 형태로 작성

 

매치


패턴 
설명
예시
문자 혹은 문자열
해당 문자 혹은 문자열과 매치합니다.
dreamhack → Hello dreamhack
/c/ → Hello dreamhack
.
모든 문자와 매치합니다.
d.eamhack → Hello dxeamhack
|
앞 또는 뒤의 패턴과 매치합니다.
hi|dream → Hello dreamhack
[]
[]안의 문자와 매치합니다.
[aeiou] → Hi
[^ ]
^뒤의 패턴을 제외한 나머지와 매치합니다.
[^aeiou] → Hi
^
어떤 문자열의 시작이 특정 패턴인 경우 매치합니다.
^dream → dreamhack Hello
^dream → Hello dreamhack
$
어떤 문자열의 끝이 특정 패턴인 경우 매치합니다.
hack$ → dreamhack Hello
hack$ → Hello dreamhack
\
\뒤의 특수 문자와 매치합니다.
특별한 목적으로 사용되는 특수 문자를 문자 그대로 쓰기 위한 이스케이핑입니다.
hack\$ → Hello dreamhack$
[a-z]
[A-Z]
[0-9]
두 문자 사이 범위의 문자와 매치합니다.
[b-d] → hack
\w
알파벳 또는 숫자 또는 _와 매치합니다.
[A-Za-z0-9_] 
\w → a!
\d
숫자와 매치합니다.
[0-9]
\d → a1
\s
공백 문자와 매치합니다.
[\b\f\n\r\t\v]

 

수량자

 

패턴
 설명
예시
*
앞에 나온 문자가 0개 이상이면 매치합니다.
Hac*k → Hak
Hac*k → Hack
+
앞에 나온 문자가 1개 이상이면 매치합니다.
Hac+k → Hak
Hac+k → Hack
?
앞에 나온 문자가 0개 혹은 1개이면 매치합니다.
Hac?k → Hak
Hac?k → Hack
수랑자?
수량자 뒤에 ?를 붙이면 게으른 수량자로, 최소한의 문자만 매치합니다.
<p>.*</p> → <p>Hello</p><p>Hi</p>
<p>.*?</p> → <p>Hello</p><p>Hi</p>
Hack+? → Hack
Hack+? → Hackk
{n}
앞에 나온 문자가 정확히 n개이면 매치합니다.
Hac{3}k → Haccck
{n, }
앞에 나온 문자가 n개 이상이면 매치합니다.
Hac{2,}k → Haccck
{n1, n2}
앞에 나온 문자가 n1개 이상, n2개 이하면 매치합니다.
Hac{2,3}k → Hacck
Hac{2,3}k → Haccck

 

그룹화

 

패턴
설명 
예시
()
()로 감싼 부분을 그룹화하여 하나의 문자처럼 여깁니다.
(ha)+ck → hahahac

 

정규 표현식 플래그

검색의 옵션을 지정하는 역할, 일반적으로 /패턴/플래그 형식

 

플래그
설명 
예시
g
global search
매치하는 모든 문자/문자열을 검색합니다.
/[aeiou]/ → Hello dreamhack
/[aeiou]/g → Hello dreamhack
i
ignore case
대소문자를 구분하지 않고 검색합니다.
/h/g → Hello dreamhack
/h/ig → Hello dreamhack
m
multiline
여러 줄에서 검색합니다.
/^Hello/g → Hello dream
Hello hack
/^Hello/gm → Hello dream
Hello hack
s
single line(dotall)
메타문자 .가 개행문자도 포함합니다.
/Hello.+hack/g → Hello dream
Hello hack
/Hello.+hack/s → Hello dream
Hello hack

 

  •