본문 바로가기

ETC/EVI$ION

EVI$ION 웹 CTF 제작 - #1

https://dreamhack.io/lecture/roadmaps/1

 

Web Hacking

웹 해킹을 공부하기 위한 로드맵입니다.

dreamhack.io

 

이전에 웹 해킹 로드맵을 반 정도 수강해본 적이 있는데,

과제 제출을 위해 대충 들었던 기억이 있어서 

이번엔 제대로 공부하며 이 로드맵을 따라가보려고 합니다...

사실 웹해킹 쉬운 문제도 혼자 힘으로 못 풀고 있기 때문에 문제 제작을 위해서 열심히 공부해보겠습니다...//

 

  Backgroud : Web

(World Wide Web, W3, Web) : 인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스

웹 서버 (Web Server) : 정보를 제공하는 주체

웹 클라이언트 (Web Client) : 정보를 받는 이용자

HTTP : 웹상에서 서로 통신하기 위해 정해둔 일종의 규칙

 

 

프론트엔드(Front-end) : 이용자의 요청을 받는 부분 -> 웹 리소스(Web Resource)로 구성됨.

백엔드(Back-end) : 요청을 처리하는 부분

 

 

웹 리소스(Web Resource)  : 웹에 갖춰진 정보 자산을 의미한다.

- 모든 웹 리소스는 고유의 Uniform Resource Identifier (URI)을 가지며, 이를 이용해 식별된다.

 

 

[ 웹 서비스의 통신 과정 ]

1. (Client) 이용자가 웹 서버에 접속

2. (Client) 브라우저가 이용자의 요청을 해석해서 HTTP 형식으로 웹 서버에 리소스를 요청

3. (Server) HTTP로 전달된 이용자의 요청을 해석

4. (Server) 요청에 따라서 적절한 동작을 함. 

5. (Server) 이용자에게 전달한 리소스를 HTTP 형식으로 이용자에게 전달

6. (Client) 브라우저는 응답받은 HTML, CSS, JS 등의 웹 소스를 시각화해 이용자에 보여줌

 

 

Backgroud : HTTP/HTTPS

[ 인코딩 ]

- 컴퓨터의 모든 데이터는 0과 1로 구성e

- 0과 1로 우리의 문자를 표현하는 것 -> 인코딩(Encoding)

- 아스키(Ascii) & 유니코드(Unicode)

 

1. 아스키(Ascii)

- 7비트 데이터에 대한 인코딩 표준

 

- 알파벳과 특수 문자 등을 표현할 수 있다.

 

2. 유니코드(Unicode)

- 초기에 각 문자권마다 고유의 인코딩 표준을 사용하면서 발생하는 문제점들을 고치기 위해 만든 새로운 표준

- 한 문자는 최대 32개의 비트로 표현됨.

- 32비트 표현할 수 있는 정보의 가짓수 -> 42억 개

 

 

 

[ 통신 프로토콜 ]

 

- 요청(Request)  : 웹 서버에 있는 리소스를 클라이언트가 받으려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야함.

- 응답(Response) : 서버가 해당 요청을 이해하고, 대응되는 동작을 통해 클라이언트에게 리소스를 반환

 

- 프로토콜(Protocol) : 위와 같이 규격화된 상호작용에 적용되는 약속

  • 컴퓨터 통신 프로토콜은 각 통신 주체가 교환하는 데이터를 명확히 해석할 수 있도록 문법(syntax)을 포함함.
  • 일반적으로이 문법에 어긋나는 메시지는 잘못 전송된 것으로 취급하여 무시됨.

- 표준 통신 프로토콜 

  • 네트워크 통신의 기초가 되는 TCP/IP
  • 웹 애플리케이션이 사용하는 HTTP
  • 파일을 주고 받을 때 사용하는 FTP

 

 

[ HTTP (Hyper Text Transfer Protocol) ]

 

: 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜

- 클라이언트가 서버에게 요청하면, 서버가 응답하는 것

- 웹 서버는 HTTP 서버를  HTTP 서비스 포트(TCP/80, TCP/8080)에 대기시킨다.

 

- 네트워크 포트(Network Port) : 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소

- 서비스 포트(Service Port) : 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트

( HTTP가 80번 포트를 점유 -> HTTP의 서비스 포드는 80번 포트)

 

- 포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따름

- 서비스 포트를 표기할 때는 서비스가 사용하는 전송 계층 프로토콜을 같이 표기하기도 함.

(TCP/80 -> 서비스를 80번 포트에서 TCP로 제공하고 있음)

 

 

< HTTP 메세지 >

 

[ HTTP 헤드 ]

- HTTP 헤드의 각 줄은 CRLF로 구분되며, 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 부른다.

- 헤더는 필드와 값으로 구성되며 HTTP 메세지 또는 바디의 속성을 나타냄.

 

[ HTTP 바디 ]

- 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄

 

💡 CRLF 

- Carriage Return(CR) + Line Feed(LF)

- CR은 커서를 현재 줄의 맨 앞으로 이동시키는 문자, LF는 커서를 다음 줄로 이동시키는 문자

- 텍스트 파일에서 줄 바꿈을 나타내는 데 사용되는 제어 문자열

- 줄을 종결하기 위해서 사용됨

 

 

< HTTP 요청 >

시작 줄 : 메소드(Method), 요청 URI(Request-URI), HTTP 버전

 

1) 메소드(Method)

: URI가 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작

GET 리소스 조회에 사용, 리소스를 가져오라는 뜻
POST 메세지 바디를 통해 서버로 요청 데이터를 전달, 리소스로 데이터를 보내라는 뜻
PUT 목적 리소스를 현재 메시지의 값으로 생성하거나 만약 존재한다면 기존 리소스를 삭제하고 덮어쓰기
POST와 다르게 클라이언트가 리소스의 위치를 알고 URI를 지정해주어야함.
PATCH 리소스를 부분적으로 변경
DELETE 리소스의 삭제를 요청

 

2) 요청 URI : 메소드의 대상

 

3) HTTP 버전

 

 

< HTTP 응답 >

: HTTP 응답은 HTTP 요청에 대한 결과를 반환하는 메시지

시작 줄 : HTTP 버전, 상태 코드(Status Code), 처리 사유(Reason Phrase)

 

1) HTTP 버전

: HTTP 프로토콜의 버전

 

2) 상태 코드

: 요청에 대한 처리 결과를 세 자릿수로 나타냄.

 

3) 처리 사유

: 상태 코드가 발생한 이유

 

 

[ HTTPS (HTTP over Secure socket layer)  ]

- HTTP의 응답과 요청은 평문으로 전달

TLS(Transport Layer Security) 프로토콜을 도입하여 HTTP 메세지를 암호화

 

💡TLS 표준

- 공개 키 암호 시스템, 대칭 키 암호를 기반으로 만들어짐

 

 

Backgroud : Web Browser

- 웹 브라우저 서버와 HTTP 통신을 대신해주고, 수신한 리소스를 시각화

- 뛰어난 이용자 경험(User eXperience, UX)을 제공하는 소프트웨어

 

< 웹 브라우저가 하는 기본 동작 > 

  1. 웹 브라우저의 주소창에 입력된 주소를 해석 (URL 분석)
  2. 주소 탐색 (DNS 요청) 
  3. HTTP를 통해 주소에게 요청
  4. 주소의 HTTP 응답 수신
  5. 리소스 다운로드 및 웹 렌더링 (HTML, CSS, Javascript)

 

[ URL (Uniform Resource Locator) ]

: 웹에 있는 리소스의 위치를 표현하는 문자열

 

 

[ Domain Name ]

- Host는 Domain Name, IP Address의 값을 가질 수 있다

- IP Address : 네트워크 상에서 통신이 이루어질 때 장치를 식별하기 위해 사용되는 주소

- IP Address는 외우기 어려우므로, 도메인의 특성을 담은 이름의 정의해 IP 대신 사용

 

- 브라우저는 Domain Name Server(DNS)에 Domain Name을 질의하고, DNS가 응답한 IP Address를 사용함

 

 

[ 웹 렌더링 ]

: 서버로부터 받은 리소스를 이용자에게 시각화하는 행위

- HTML을 파싱하고 CSS를 적용하여 이용자에게 보여준다.

'ETC > EVI$ION' 카테고리의 다른 글

EVI$ION 러닝 세션 과제 - #2 (4/6)  (1) 2024.04.06
EVI$ION 정규 세션 과제 - #3  (0) 2024.04.04
EVI$ION 정규 세션 과제 - #2  (0) 2024.03.28
EVI$ION 러닝 세션 과제 - #1 (3/23)  (0) 2024.03.23
EVI$ION 정규 세션 과제 - #1  (0) 2024.03.21