AnbyMata의 해킹 노트

[THM] Web Application Basics - EP.2 (Task 5~6) 본문

TryHackMe/Web & Networks 기초

[THM] Web Application Basics - EP.2 (Task 5~6)

AnbyMata 2026. 1. 21. 22:00

TryHackMe - "Web Application Basics". Task 5~6. Write-up + Extra Study!

출처: https://tryhackme.com/room/webapplicationbasics

 

Web Application Basics

Learn the basics of web applications: HTTP, URLs, request methods, response codes, and headers.

tryhackme.com

 

[5]  HTTP Request: Request Line and Methods

HTTP Request = 사용자가 Web Application을 사용하기 위해 웹 서버에 보내는 메시지

HTTP Request 예시

HTTP Request 예시를 봤을 때, 가장 첫 번째 줄인 "POST https://anbymata.com/ HTTP/1.1"이 Request  Line입니다.

 

Request Line

- HTTP Request의 가장 윗줄이자 첫째 줄

- 서버에게 어떠한 타입의 요청을 하고 있는지 알려줌

- "POST https://anbymata.com/ HTTP/1.1" 부분에 해당함

- HTTP Method(메서드), URL (Path) (요청 대상), HTTP의 버전. 총 3가지를 내용으로 가짐

- 형식을 정리하면,

[HTTP Method] [Path] [HTTP_버전]
예시) GET /documents/hacking.html HTTP/1.1
[보충 설명]
HTTP RequestHTTP Method + URL (Path) + HTTP_Version 의 3요소 구성됩니다.
각각의 순서는 HTTP Method, URL, HTTP 버전이 왼쪽부터 순서대로 적혀있고, 공백으로 구분됩니다.

즉, "POST https://anbymata.com/ HTTP/1.1"에서
HTTP Method = "POST"
URL (Path) = "https://anbymata.com/
HTTP_Version = "HTTP/1.1" 입니다.

 

 

[5-1] Request Line의 3가지 구성 요소

1. HTTP Methods (메서드)

 - 서버에 어떤 작업을 요청하는지 명시하는 명령어

 - 즉, 이 resource(리소스)에 대해 어떤 행동을 하겠다는건지 알려줌

 

 HTTP Methods 종류

 + GET = 서버에서 원본 데이터를 그대로 가져옴

 + POST = 서버에 새로운 무언가를 만들거나 업데이트를 위해 데이터를 전송함

 + PUT = 서버에 기존 정보를 수정하거나 업데이트

 + DELETE = 서버에서 데이터를 삭제함

 + PATCH = 리소스의 일부를 업데이트

 + HEAD = 원본 데이터 중에서 Header만을 가져옴

 + OPTIONS = 특정 리소스에서 사용하능한 메서드들을 보여줌

 + TRACE = OPTIONS와 비슷하게 허용된 메서드들을 보여줌. 보통 디버깅에 사용 가능한지 여부를 보여줌

 + CONNECT =  보안 연결을 만들 때 사용. HTTPS가 대표적 예시

[보충 설명]
- GET: 원본 데이터가 그대로 노출되어 보안 상 위험합니다. 민감한 정보들은 GET하지 마세요!
- POST: 공격의 주 대상이 될 가능성이 높습니다. 항상 검증을 잘해야 됩니다.
- PUT: 사용 전에 사용자에게 변경 권한을 부여해야 사용할 수 있습니다.
- DELETE: PUT과 마찬가지로 변경 권한이 필요합니다.
- HEAD: GET처럼 원본 데이터를 가져오지만 전체가 아닌 Header만을 가져옵니다. Header만으로 메타데이터를 확인할 수 있습니다.
- OPTIONS: 사용 가능한 메서드 목록을 통해 사용자가 서버에서 할 수 있는 것들을 알 수 있습니다.
- TRACE: 디버깅에 사용 가능한 메서드 목록 확인을 위해 사용하지만, 보안 상 위험해서 요새는 잘 쓰이지 않습니다.

 

 

2. URL (Path)

 - 웹에서 resource(자원)의 위치를 식별하기 위한 주소

 - 즉, 사용자가 요청한 리소스의 위치를 서버에게 알려줌

 - URL 예시

  + "https://hackingsite.com/main/user/anby" 라는 URL에서 "main/user/anby" 부분을 통해 서버가 어떤 사용자 관련 리소스를 요청하는지를 판단할 수 있음

 

 

3. HTTP Version(버전) (크게 중요하지 않음)

 - HTTP/0.9 (1991):
   + 최초 버전. 오직 GET 요청만 지원
   + 헤더(Header) 없음

   + 즉, 단순한 텍스트 응답만 가능

 - HTTP/1.0 (1996):
   + 헤더 추가, 다양한 콘텐츠 타입 지원 (HTML, 이미지 등)
   + 캐싱 기능 개선

 - HTTP/1.1 (1997):
   + 가장 널리 사용되는 버전.
   + Persistent Connection(지속 연결) 도입 → 여러 요청을 한 연결로 처리
   + Chunked Transfer Encoding, 더 향상된 캐싱 지원

 - HTTP/2 (2015):
   + Multiplexing(다중 요청 병렬 처리), Header 압축, 요청 우선순위(Prioritization) 도입
   + 속도와 효율성 크게 향상

 - HTTP/3 (2022):
   + HTTP/2 기반으로 발전했으나, 전송 프로토콜을 TCP → QUIC(UDP 기반)으로 변경
   + 더 빠르고 안정적인 연결, 향상된 보안성 제공

 

 


[6]  HTTP Request: Headers and Body

HTTP Request 예시

HTTP Request 예시를 봤을 때,

"Host: tryhackme.com", "User-Agent: Mozilla/5.0 Firefox/87.0", "Content-Length: 29"

이 세 줄이 Headers입니다.

그리고 가장 아래 "type=Python&country=kor&level=easy" 부분이 Body입니다.

 

HTTP Request = Headers + Body 로 구성됨

- Headers = Metadata. (= 추가 정보)를 담는 곳

- Body = Payload. (= 실제 데이터)를 담는 곳

 

 

[6-1] Request Headers

- 웹 서버에게 사용자가 Request(요청)에 관한 추가 정보를 전달하는 부분

- Metadata = Request에 관한 추가 정보

- Metadata(추가 정보)에는 브라우저 종류, 콘텐츠 형식, 인증 정보 등이 있음

 

Request Headers 예시

HTTP Request 예시

- Host : "ihatecoding.com"

  + 사용자가 요청하고자 하는 웹 서버의 이름

 

- User-Agent : "Mozilla/5.0"

  + 요청을 받은 웹 브라우저에 대한 정보

 

- Referer : " https://www.anbymata.thm"

  + Request Message가 담겨있던 URL

 

- Cookie : "code_type=python; country=kor; level=easy"

  + 웹 서버가 웹 브라우저에게 사전에 저장하라고 요청한 정보들. 이 정보들은 쿠키의 형식으로 저장됨

 

- Content-Type : "application/json"

  + 사용자가 요청한 데이터의 타입이나 형식

[보충 설명]
Header의 종류는 굉장히 많습니다.
'Host', 'User-Agent', 'Accept', 'Authorization', 'Cookie' 같은 요청에 대한 환경과 조건, 정보를 전달하는 Request Headers
'Server', 'Set-Cookie', 'Content-Type', 'Content-Length' 같은 응답에 대한 정보와 정책을 전달하는 Response Headers
'Date', 'Connection', 'Cache-Control' 같은 메시지 전체에 대한 정보를 전달하는 General Headers
'Content-Type', 'Content-Encoding', 'Content-Length' 같은 실제 데이터에 대한 설명을 전달하는 Entity Headers 등이 있습니다.
Entity HeadersRepresentation Headers라 불리기도 합니다.

이 중, General HeadersEntity Headers는 Request와 Response 모두에서 사용 가능합니다.

 

 

 

[6-2] Request Body

- 보통 POST, PUT 요청에서 서버에 전송할 실제 내용 및 데이터를 담는 부분

- Payload = Request의 body에 해당하는 실제 데이터

- Body의 형식에는 다양한 종류가 존재

- 'URL Encoded', 'Form Data', 'JSON', 'XML'이 대표적인 Body 형식

- Header의 Content-Type 부분에 어떤 형식이 사용되었는지 적혀있음

 

Body의 대표적인 4가지 형식에 대해 알아보자면,

 

1. URL Encoded (application/x-www-form-urlencoded)

 - 이 형식은 데이터가 key와 value의 쌍으로 이뤄짐 ([key]=[value])

 - 이 쌍들이 여러개 존재할 경우 '&'을 사용해 구분함 (key1=value1&key2=value2)

 - URL Encoded 예시:

[보충 설명]
빈 줄의 윗부분은 Header입니다. 이는 나머지 3가지 형식에서도 동일합니다.
빈 줄의 아랫부분이 Body로 형식마다 다른 형태를 가집니다.
Content-Type을 통해 Body의 형식을 알 수 있습니다.
Content-Length는 Body 데이터 크기를 byte로 나타낸 것입니다.

 

 

2. Form Data (multipart/form-data)

 - 여러 개의 데이터 블록으로 구성된 요청 본문을 전송할 때 사용함

 - 각 데이터 블록은 경계 문자열(boundary) '--'로 구분됨

 - 이 경계선이 데이터 블록의 구분자 역할을 함

 - 경계 문자열 자체가 Header의 구분 기준이기에 별도의 Header가 필요 없음

 - 주로 이진 (binary) 데이터를 웹 서버에 전송할 때 사용됨

 - 파일이나 이미지 업로드 등이 이에 해당됨 (binary 데이터 = 0과 1로 구성된 데이터)

 - Form Data 예시:

[보충 설명]
"boundary=----WebKitFormBoundary123A777SMIA001" 부분이 경계 문자열, 즉, boundary입니다.
boundary
의 값은 각 요청마다 랜덤으로 새롭게 생성됩니다.
boundary
의 값은 데이터가 섞이는 것을 방지하기 위해 요청마다 다른 값을 가집니다.
같은 HTTP 메시지 내
에서는 boundary 값이 동일합니다.
boundary 아래부터 빈 줄까지가 한 데이터 블록입니다.

 

 

3. JSON (application/json)

 - 이 형식은 JSON (JavaScript Object Notation)을 활용해 데이터를 보냄

 - URL Encoded와 비슷하면서도 다르게 데이터가 name과 value의 쌍으로 이뤄짐

 - 쌍이 여러개 존재할 경우 ' , ' (comma, 쉼표)를 이용해 구분함

 - 모든 쌍들은 나중에 하나의 '{ }' (중괄호) 안에 묶임

 - JSON 예시:

[보충 설명]
' { } ' 중괄호 안쪽 부분이 본문, 즉, Body입니다.
JSONContent-Length도 Body의 데이터 크기를 Byte(바이트)로 나타냅니다.
추가적으로 중괄호와 쉼표도 데이터 크기에 포함됩니다.

 

 

4. XML (application/xml)

 - 이 형식은 데이터가 tags라 불리는 label(라벨) 안에 구조화된 상태로 존재함

 - Tag들은 각각 시작점끝점이 존재함

 - ex) <name>AnbyMata</name> (HTML 인가?)

- 이 label들은 서로 중첩될 수 있음

 - XML 예시:

[보충 설명]
<user>라는 tag 안에 다른 tag들이 있는 것을 확인할 수 있습니다.
Tag의 시작점은 표시하고자 하는 정보의 이름을 적습니다 (ex. <name>)
Tag의 끝점에는 시작점의 이름 앞에 ' / ' 를 붙입니다. (ex. </name>)
HTML이랑 굉장히 유사해보입니다.

 

 


[TryHackMe] Web Application Basics - EP.2 (Task 5~6). END.

 

[TryHackMe] Web Application Basics - EP.3 (Task 7~8). Continue...

https://anbymata.tistory.com/44

 

[THM] Web Application Basics - EP.3 (Task 7~8)

TryHackMe - "Web Application Basics". Task 7~8. Write-up + Extra Study!출처: https://tryhackme.com/room/webapplicationbasics Web Application BasicsLearn the basics of web applications: HTTP, URLs, request methods, response codes, and headers.tryhackme.co

anbymata.tistory.com