| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- 사이버 보안
- cert
- CTF
- http
- 리눅스 기초
- Cyber Security
- 블루팀
- write-up
- 정보보안
- Web
- THM
- 워게임
- Blue Team
- 모의해킹
- 해킹 스터디
- XSS
- 보안 관제
- IR
- TryHackMe
- 보안 스터디
- 정보보호
- OverTheWire
- 리눅스
- Cross-Site Scripting
- 해커
- 해킹
- Bandit
- linux
- SoC
- web hacking
- Today
- Total
AnbyMata의 해킹 노트
[THM] Web Application Basics - EP.2 (Task 5~6) 본문
[THM] Web Application Basics - EP.2 (Task 5~6)
AnbyMata 2026. 1. 21. 22:00TryHackMe - "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 예시를 봤을 때, 가장 첫 번째 줄인 "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 Request는 HTTP 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 예시를 봤을 때,
"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 예시

- 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 Headers는 Representation Headers라 불리기도 합니다. 이 중, General Headers와 Entity 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입니다. JSON의 Content-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
'TryHackMe > Web & Networks 기초' 카테고리의 다른 글
| [THM] Web Application Basics - EP.4 (Task 9~11). 完 (0) | 2026.01.23 |
|---|---|
| [THM] Web Application Basics - EP.3 (Task 7~8) (0) | 2026.01.22 |
| [THM] Web Application Basics - EP.1 (Task 1~4) (1) | 2026.01.20 |
| [THM] HTTP in Detail - EP.2 (Task 5~7). 完 (0) | 2026.01.14 |
| [THM] HTTP in Detail - EP.1 (Task 1~4) (0) | 2026.01.13 |