| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- web hacking
- 블루팀
- 리눅스 기초
- CTF
- 리눅스
- 해커
- 모의해킹
- XSS
- Cyber Security
- Blue Team
- write-up
- cert
- OverTheWire
- 보안 관제
- 해킹 스터디
- 해킹
- 정보보안
- THM
- 정보보호
- Cross-Site Scripting
- Web
- http
- TryHackMe
- Bandit
- 사이버 보안
- 워게임
- linux
- SoC
- IR
- 보안 스터디
- Today
- Total
AnbyMata의 해킹 노트
[THM] HTTP in Detail - EP.2 (Task 5~7). 完 본문
TryHackMe - "HTTP in Detail". Task 5~7. Write-up + Extra Study!

출처: https://tryhackme.com/room/httpindetail
HTTP in Detail
Learn about how you request content from a web server using the HTTP protocol
tryhackme.com
[5] Headers
Headers = 웹 서버에 request를 보낼 때 함께 전송할 수 있는 추가 데이터
[5-1] Common Request Headers
1. Host
- 하나의 웹 서버가 여러 웹 사이트를 호스팅하는 경우, Host 헤더를 사용해 어떤 웹 사이트를 요청하는지 서버에 알려줌
- Host 헤더가 없거나 명시되지 않으면, 서버의 기본 (Default) 웹사이트를 받게 됨
| [보충 설명] Host 헤더는 Virtual Hosting (가상 호스팅) 때문에 필요합니다. Virtual Hosting은 하나의 웹 서버/IP로 여러 개의 웹 사이트 (도메인)을 운영하는 기술입니다. (IP = 서버 라고 이해하세요) IP address(주소)는 한정되어 있기 때문에, IP를 적게 사용하기 위해서 IP 하나 + 여러 도메인 구조를 사용합니다. 즉, IP가 같더라도 Host 값이 다르다면 다른 사이트를 제공해줍니다. 이 점 때문에 Host 헤더 조작은 Virtual Host 기반 취약점 테스트에서 자주 사용됩니다. |
2. User-Agent
- 사용 중인 브라우저 종류와 버전을 서버에 알려줌
- 서버는 이를 기반으로 브라우저에 맞게 웹 사이트를 구성함
- 일부 HTML, JS, CSS 요소는 특정 브라우저에서만 동작
| [보충 설명] 브라우저는 Google의 Chrome, Mozilla의 Firefox, Microsoft의 Edge, Apple의 Safari, Naver의 Whale 등을 말합니다. 우리가 흔히 사용하는 Naver, Google 같은 검색 엔진들은 브라우저 내에서 실행되는 웹 사이트입니다. 즉, Naver, Google은 브라우저는 아닙니다. HTML, CSS, JS는 웹 프로그래밍에서 사용되는 코드들로 웹 사이트를 구성하고 있습니다. 즉, 서버가 브라우저 호환성을 판단하기 위해 일부 요소는 특정 브라우저에서만 작동합니다. |
3. Content-Length
- Form 데이터처럼 서버로 데이터를 보낼 때, request에 얼마나 많은 데이터가 들어있는지 서버에 알려줌
- 이를 통해 서버의 데이터 수신 완료 여부를 판단함 (= 값이 틀리면 request에 오류가 있다고 판단)
4. Accept-Encoding
- 브라우저가 지원하는 압축 방식을 서버에 알려줌
- 전송 데이터를 더 작게 만들 수 있도록 함 → 전송 속도 개선
5. Cookie
- 사용자의 정보를 기억하기 위해 서버로 전송되는 데이터
- 덕분에 로그인 상태를 유지하며 세션(session)을 유지함
- 웹 해킹에서 매우 중요!
| [보충 설명] 우리가 로그인을 한 뒤에도 다른 페이지로 이동할 수 있는 이유는, 로그인 상태를 유지하기 위해 필요한 정보가 계속 전달되기 때문입니다. 이 필요한 정보는 Cookie에 저장됩니다. 이 정보가 없으면, 페이지를 이동하는 순간, 서버는 사용자를 로그인하지 않은 상태로 인식합니다. |
[5-2] Common Response Headers
1. Set-Cookie
- Client에 저장할 정보를 지정함
- Request마다 서버로 다시 전송됨
- 즉, 서버가 Cookie를 생성/갱신할 때 사용
2. Cache-Control
- 브라우저의 cache에 response(응답) 내용을 얼마나 오래 저장할지를 지정함
- 저장 시간을 지정함으로 성능을 최적화 시킴
3. Content-Type
- 서버가 반환하는 데이터의 형식
- 이를 바탕으로 브라우저는 데이터 처리 방식을 결정함
4. Content-Encoding
- 전송 데이터를 작게 만들기 위해 사용된 압축 방식을 나타냄
- Accept-Encoding 내용에 대한 서버의 응답 결과
[6] Cookies
Cookies = 사용자의 컴퓨터 (=브라우저)에 저장되는 작은 데이터 조각
- 웹 서버로부터 'Set-Cookie' Header를 받을 때 저장됨 (브라우저가 자동 저장함)
- 이후 모든 Request에서 브라우저는 Cookie 데이터를 다시 웹 서버로 전송함
- 일반적으로 웹 사이트 authentication(인증)에 사용됨
Cookies가 필요한 이유
- HTTP는 stateless protocol = 이전 요청을 기억하지 않음
- Cookies를 사용해 웹 서버에 사용자가 누구인지, 개인 설정, 예전 방문 여부 등을 알려줄 수 있음
- 즉, 로그인 상태를 유지시켜주는 역할
| [보충 설명] 로그인 시 브라우저는 서버에게 아이디와 비밀번호를 보내 인증을 요청합니다. 로그인에 성공하면, 서버는 브라우저에게 Cookie 값 (session 식별자)을 보내고 브라우저는 이 session 값을 저장합니다. 이후, 브라우저는 모든 request마다 session 값을 Header에 포함하여 보냄으로 서버에게 로그인한 사용자임을 알려줍니다. 즉, Cookie != 아이디/비밀번호 |
[6-1] HTTP Request 예시
1) 첫 페이지 요청 (GET Request)
- 브라우저가 웹 페이지를 요청
- 아직 Cookie 없음 = 서버는 사용자가 누구인지 모름
GET / HTTP/1.1
Host: anbymata.com
User-Agent: ????
2) 서버 Response(응답) → Form 제공
- 단순 HTML 페이지
- 사용자 이름을 입력받는 폼이 있음
HTTP/1.1 200 OK
Server: ?????
Date: ????
Content-Type: text/html; charset=UTF-8
...
3) Form 제출 (Post Request)
- 사용자가 사용자 이름 (아이디)를 입력 (name=anby)
- 브라우저가 서버로 데이터 전송
POST / HTTP/1.1
Host: anbymata.com
User-Agent: ????
Content-Type: application/x-wwwform-urlencoded
Content-Length: 9
name=anby
4) 서버가 Cookie 설정 (Set-Cookie)
- 서버가 사용자가 "anby"임을 인지
- 'Set-Cookie'로 사용자 정보를 Cookie에 저장하라고 브라우저에게 지시
HTTP/1.1 200 OK
Server: ?????
Date: ????
Set-Cookie: name=anby
Content-Type: text/html; charset=UTF-8
...
5) 이후 Request(요청) (Get + Cookie)
- 브라우저는 자동으로 Cookie를 포함하여 요청함
GET / HTTP/1.1
Host: anbymata.com
User-Agent: ????
Cookie: name=anby
6) Cookie를 통해 사용자를 식별한 서버의 응답
- 사용자 정보를 알기에 입력 Form 페이지를 보여주지 않음
- 비유하면, 로그인된 상태라 아이디와 비밀번호를 입력하는 페이지를 안 보여주는 느낌
HTTP/1.1 200 OK
Server: ?????
Date: ????
Content-Type: text/html; charset=UTF-8
<html><body>Welcome anby!</body></html>
- 입력 Form 대신 "Welcome anby!"라는 텍스트가 출력되는 페이지
[6-2] Cookies 확인하기
(Naver Whale 환경 기준)
1) F12 키를 눌러 개발자 도구 열기

2) 'Network' 탭 클릭

3) 각 요청을 클릭해보면서 상세 정보 확인하기

= 보통 보안을 위해서 Cookie 값들이 암호화되어 있습니다.
[7] Making Requests
0. 기본 정보

- 서버에 "tryhackme.com" 웹 사이트를 요청하고 있습니다.
- 1) 좌측 상단의 'GET' 부분을 클릭해 원하는 메서드로 변경 (GET, POST DELETE 등..)
- 2) "http://tryhackme.com/" URL 뒤에 이동하고자 하는 페이지 입력
+ "/example" 페이지로 이동한다고 하면, "http://tryhackme.com/example"로 URL 완성
- 3) 톱니바퀴 아이콘을 눌러 원하는 파라미터(parameter) 입력 (필요하다면)
+ 'key : value' 쌍으로 구성됨. [6-1]에서의 "user=anby"를 생각해보면 됨 (user : anby)
- 4) GO 버튼을 눌러 Request 전송
아래 내용을 보기 전, TryHackMe 사이트에서 실습해보세요!
1. '/room' 페이지에 GET Request 보내기
- GET = 웹 서버로부터 정보를 가져오는 method(메서드)
- 즉, '/room' 페이지에 대한 정보를 가져옴

2. id 패러미터(parameter)를 '1'로 설정하여 '/blog' 페이지에 GET Request 보내기
- 먼저 id 패러미터 값을 '1'로 설정

- '/blog' 페이지에 "id:1"을 포함한 GET Request 보내기
- 즉, 'id=1'인 '/blog' 페이지에 대한 정보를 가져옴

3. '/user/1' 페이지에 DELETE Request 보내기
- DELETE = 웹 서버의 정보나 레코드를 삭제하는 method(메서드)
- 즉, '/user/1' 페이지를 삭제함

4. username 패러미터(parameter)를 'admin'로 설정하여 '/user/2' 페이지에 PUT Request 보내기
- PUT = 웹 서버의 기존 정보를 수정/업데이트하는 method(메서드)
- 먼저, username 패러미터 값을 'admin'으로 설정

- '/user/2' 페이지에 "username:admin"을 포함한 PUT Request 보내기
- 즉, '/user/2' 페이지의 username 값을 "admin"으로 변경함

5. username은 'thm', password는 'letmein'으로 설정하여 '/login' 페이지에 POST Request 보내기
- POST = 웹 서버에 데이터를 보내거나 새로운 데이터나 레코드를 생성하는 method(메서드)
- 먼저, username은 'thm', password는 'letmein'으로 설정

- '/login' 페이지에 "username:thm", "password:letmein"을 포함한 POST Request 보내기
- 즉, '/login' 페이지에 "username=thm", "password=letmein"이란 데이터를 보냄

[TryHackMe] HTTP in Detail - EP.2 (Task 5~7). END.
[TryHackMe] HTTP in Detail. Finish!
'TryHackMe > Web & Networks 기초' 카테고리의 다른 글
| [THM] Web Application Basics - EP.2 (Task 5~6) (1) | 2026.01.21 |
|---|---|
| [THM] Web Application Basics - EP.1 (Task 1~4) (1) | 2026.01.20 |
| [THM] HTTP in Detail - EP.1 (Task 1~4) (0) | 2026.01.13 |
| [THM] DNS in Detail - EP.2 (Task 4~5). 完 (0) | 2026.01.07 |
| [THM] DNS in Detail - EP.1 (Task 1~3) (1) | 2026.01.06 |