λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
βœ’οΈ Web Hacking/Dreamhack

[Dreamhack] 인코딩(Encoding) ν‘œμ€€ + 톡신 ν”„λ‘œν† μ½œ & μš”μ²­κ³Ό 응닡 + ν‘œμ€€ 톡신 ν”„λ‘œν† μ½œ + HTTP Request & Response + λ„€νŠΈμ›Œν¬ ν¬νŠΈμ™€ μ„œλΉ„μŠ€ 포트

by A Lim Han 2022. 9. 14.

1 - 0 - 1. 인코딩(Encoding) ν‘œμ€€ + 톡신 ν”„λ‘œν† μ½œ & μš”μ²­κ³Ό 응닡 + ν‘œμ€€ 톡신 ν”„λ‘œν† μ½œ + HTTP Request & Response + λ„€νŠΈμ›Œν¬ ν¬νŠΈμ™€ μ„œλΉ„μŠ€ 포트

 

 

 

# 인코딩(Encoding) ν‘œμ€€

: μ΄μ§„μˆ˜(0,1)둜 인간이 μ‚¬μš©ν•˜λŠ” 문자λ₯Ό ν‘œν˜„ν•˜λŠ” μ•½μ†μ˜ 집합

 

+ 인코딩을 톡해 μž‘μ„±ν•œ λ¬Έμž₯을 컴퓨터에 μ €μž₯ν•˜κ±°λ‚˜ ν‘œν˜„ν•  수 있음

+ 인코딩 정보λ₯Ό λ„€νŠΈμ›Œν¬λ₯Ό μ΄μš©ν•΄ 타인과 κ΅ν™˜ κ°€λŠ₯

 

ex) Ascii(μ•„μŠ€ν‚€), μœ λ‹ˆμ½”λ“œ(Unicode)

 

 

 

- Ascii(μ•„μŠ€ν‚€)

: 7λΉ„νŠΈ 데이터에 λŒ€ν•œ 인코딩 ν‘œμ€€μœΌλ‘œ, 특수 문자 및 μ•ŒνŒŒλ²³μ„ ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©

 

 

- μœ λ‹ˆμ½”λ“œ(Unicode)

: λ¬ΈμžκΆŒλ§ˆλ‹€ μ‚¬μš©ν•˜λŠ” 인코딩 ν‘œμ€€μ΄ 달라 λ°œμƒν•˜λŠ” ν˜Έν™˜μ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ μƒˆλ‘œμš΄ ν‘œμ€€

 

+ μœ λ‹ˆμ½”λ“œμ—μ„œ ν•œκ°œμ˜ λ¬ΈμžλŠ” μ΅œλŒ€ 32개의 λΉ„νŠΈλ‘œ ν‘œν˜„λ¨

+ ν•œκΈ€, μ•ŒνŒŒλ²³ λ“±μ˜ 문자뿐 μ•„λ‹ˆλΌ 이λͺ¨μ§€(Emoji)듀도 포함

 

 

 

 

# 톡신 ν”„λ‘œν† μ½œ & μš”μ²­κ³Ό 응닡

- μš”μ²­(Request)

: ν΄λΌμ΄μ–ΈνŠΈκ°€ μ›Ήμ—κ²Œ νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό μ§€μ •ν•˜μ—¬ μ œκ³΅ν•  것을 μš”κ΅¬ν•˜λŠ” ν–‰μœ„

 

- 응닡(Response)

: μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ΄ν•΄ν•œ ν›„ λŒ€μ‘λ˜λŠ” λ™μž‘μ„ μ·¨ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” μž‘μ—…

 

- ν”„λ‘œν† μ½œ(Protocol)

: μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 응닡과 μš”μ²­κ°™μ΄ κ·œκ²©ν™”λœ μƒν˜Έμž‘μš©μ— μ μš©λ˜λŠ” μ•½μ†μœΌλ‘œ, λŒ€κ°œ 톡신 였λ₯˜λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ 문법(syntax)λ₯Ό ν¬ν•¨ν•œλ‹€.

 

 

 

 

# ν‘œμ€€ 톡신 ν”„λ‘œν† μ½œ

λ„€νŠΈμ›Œν¬ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 파일 κ΅ν™˜
IP/TCP HTTP FTP

 

 

 

 

# HTTP(Hyper Text Transfer Protocol)

: μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄μ˜ 데이터 κ΅ν™˜μ„ μš”μ²­κ³Ό μ‘λ‹΅μ˜ ν˜•μ‹μœΌλ‘œ μ •μ˜ν•œ ν”„λ‘œν† μ½œλ‘œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μš”μ²­ν•˜λ©΄ μ„œλ²„κ°€ μ‘λ‹΅ν•˜λŠ” κΈ°λ³Έ λ©”μ»€λ‹ˆμ¦˜μ„ λ”°λ₯Έλ‹€.

 

 

ex) HTTP λ©”μ»€λ‹ˆμ¦˜ μ˜ˆμ‹œ

1. μ›Ή μ„œλ²„κ°€ HTTP μ„œλ²„λ₯Ό HTTP μ„œλΉ„μŠ€ 포트(일반적인 경우 TCP/80 or TCP/8080)에 λŒ€κΈ°μ‹œν‚΄

2. ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλΉ„μŠ€ ν¬νŠΈμ— HTTP μš”μ²­ 전솑

3. μ„œλ²„κ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ 해석

4. ν•΄μ„ν•œ 데이터λ₯Ό 기반으둜 μ μ ˆν•œ 응닡을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜

 

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ 보낸 μš”μ²­

 

ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ μ„œλ²„μ˜ 응닡

 

 

 

 

# λ„€νŠΈμ›Œν¬ ν¬νŠΈμ™€ μ„œλΉ„μŠ€ 포트

- λ„€νŠΈμ›Œν¬ 포트(Network Port)

: λ„€νŠΈμ›Œν¬μ—μ„œ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 정보λ₯Ό κ΅ν™˜ν•˜λŠ” μΆ”μƒν™”λœ μž₯μ†Œ

 

- μ„œλΉ„μŠ€ 포트(Service Port)

: λ„€νŠΈμ›Œν¬ 포트 쀑 νŠΉμ • μ„œλΉ„μŠ€μ— μ˜ν•΄ 점유된 μƒνƒœμ˜ 포트

 

- 특ꢌ 포트( Privileged port )( = 잘 μ•Œλ €μ§„ 포트( Well-known port ) )

: 0 ~ 1023 번 포트λ₯Ό μΌμ»«λŠ” λ‹¨μ–΄λ‘œ, 특ꢌ ν¬νŠΈμ— μ„œλΉ„μŠ€λ₯Ό μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ΄€λ¦¬μžμ˜ κΆŒν•œμ΄ ν•„μš”ν•˜λ‹€.

 

 

+ 포트λ₯Ό μ΄μš©ν•˜μ—¬ 데이터λ₯Ό κ΅ν™˜ν•˜λŠ” 방식은 전솑 계측(Transport Layer)의 ν”„λ‘œν† μ½œμ„ 따름

ex) TCP, UDP  <--  μ„œλ‘œ λ‹€λ₯Έ ν”„λ‘œν† μ½œλΌλ¦¬λŠ” ν˜Έν™˜ X

 

+ TCP/80 

-->  HTTP μ„œλΉ„μŠ€λ₯Ό 80번 ν¬νŠΈμ—μ„œ TCP둜 μ œκ³΅ν•œλ‹€λŠ” 의미

 

+ μš΄μ˜μ²΄μ œμ—μ„œ 포트 개수λ₯Ό μ •μ˜ν•  수 있음

 

 

 

 

# HTTP λ©”μ‹œμ§€

: HTTP 바디와 ν—€λ“œλ‘œ κ΅¬μ„±λ˜λ©°, 각 λ©”μ„Έμ§€λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ „μ†‘ν•˜λŠ”  HTTP μš”μ²­κ³Ό μ„œλ²„κ°€ λ°˜ν™˜ν•˜λŠ” HTTP 응닡을 ν¬ν•¨ν•œλ‹€.

 

 

- HTTP ν—€λ“œ

+ CRLF(μ€„λ°”κΏˆ)λŠ” ν—€λ“œμ˜ 각 쀄을 κ΅¬λ³„ν•˜κ±°λ‚˜ ν—€λ“œμ˜ 끝을 λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©

 

+ 첫 쀄  -->  μ‹œμž‘ 쀄(Start-line) 

+ λ‚˜λ¨Έμ§€ 쀄  -->  헀더(Header)

 

+ 헀더 (Header)

: HTTP λ©”μ‹œμ§€, λ°”λ””μ˜ 속성을 λ‚˜νƒ€λ‚΄λŠ” μ€„λ‘œ, ν•„λ“œμ™€ κ°’μœΌλ‘œ ꡬ성

 

 

 

 

- HTTP λ°”λ””

+ ν—€λ“œμ˜ 끝을 λ‚˜νƒ€λ‚΄λŠ” CRLF λ’€, λͺ¨λ“  μ€„λ‘œ μ„œλ²„λ‚˜ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 전솑될 데이터λ₯Ό μ €μž₯함

 

 

 

 

# HTTP μš”μ²­

: μ„œλ²„μ—κ²Œ νŠΉμ • λ™μž‘μ„ μš”κ΅¬ν•˜λŠ” 메세지

 

- HTTP μš”μ²­ μ‹œμž‘ μ€„μ˜ ꡬ성

λ©”μ†Œλ“œ(Method) μš”μ²­ URI(Request-URI) HTTP 버전

GET λ©”μ†Œλ“œ

 

 

 

- λ©”μ†Œλ“œ

: URI 이 κ°€λ¦¬ν‚€λŠ” λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μƒμœΌλ‘œ μ„œλ²„κ°€ μˆ˜ν–‰ν•΄μ•Ό ν•  λ™μž‘μ„ λ‚˜νƒ€λƒ„

 

+ HTTP ν‘œμ€€μ—μ„œλŠ” 총 8개의 λ©”μ†Œλ“œκ°€ μ •μ˜λ˜μ–΄ 있음

ex) GET λ©”μ†Œλ“œμ™€ POST λ©”μ†Œλ“œ

GET POST
λ¦¬μ†ŒμŠ€λ₯Ό κ°€μ Έμ˜€λΌλŠ” λ©”μ†Œλ“œ 데이터λ₯Ό λ¦¬μ†ŒμŠ€λ‘œ λ³΄λ‚΄λΌλŠ” λ©”μ†Œλ“œ
ex) 1. μ΄μš©μžκ°€ λΈŒλΌμš°μ €μ— μ›Ή μ„œλ²„ μ£Όμ†Œ μž…λ ₯ OR
ν•˜μ΄νΌλ§ν¬ 클릭

2. λΈŒλΌμš°μ €κ°€ GET μš”μ²­μ„ μ„œλ²„μ— μ „μ†‘ν•˜μ—¬
μƒˆ νŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜κΈ° μœ„ν•œ λ¦¬μ†ŒμŠ€λ₯Ό λ°›μ•„μ˜΄
ex) 둜그인 μ‹œ μž…λ ₯ν•˜λŠ” λΉ„λ°€λ²ˆν˜Έ,
κ²Œμ‹œνŒμ— μž‘μ„±ν•˜λŠ” κΈ€ 등이 POST 방식을 톡해 μ„œλ²„λ‘œ 전솑됨

 

+ λ Œλ”λ§μ΄λž€?
κ°œλ°œμžκ°€ μž‘μ„±ν•œ λ¬Έμ„œκ°€ λΈŒλΌμš°μ €μ—μ„œ 좜λ ₯λ˜λŠ” κ³Όμ •

POST λ©”μ†Œλ“œ

 

 

 

- μš”μ²­ URLκ³Ό HTTP 버전

: μ „μžλŠ” λ©”μ†Œλ“œμ˜ λŒ€μƒμ„, ν›„μžλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©ν•˜κ³  μžˆλŠ” HTTP ν”„λ‘œν† μ½œμ˜ 버전을 λ‚˜νƒ€λƒ„

 

 

 

- URLκ³Ό URI

URI URL
νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜λŠ” ν†΅ν•© μžμ› μ‹λ³„μž
(Uniform Resource Identifier)
λ₯Ό μ˜λ―Έν•˜λ©°,
μ›Ή κΈ°μˆ μ—μ„œ μ‚¬μš©ν•˜λŠ” 논리적 λ˜λŠ” 물리적 λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜λŠ” κ³ μœ ν•œ λ¬Έμžμ—΄ μ‹œν€€μŠ€μž„
μ›Ή μ£Όμ†Œ.
컴퓨터 λ„€νŠΈμ›Œν¬ μƒμ—μ„œ λ¦¬μ†ŒμŠ€κ°€ μ–΄λ”” μžˆλŠ”μ§€ μ•Œλ €μ£ΌκΈ° μœ„ν•œ κ·œμ•½μœΌλ‘œ, URI의 μ„œλΈŒμ…‹μ΄λ‹€.

 

 

 

 

 

# HTTP 응닡

: HTTP μš”μ²­μ— λŒ€ν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 메세지

 

 

- HTTP μ‘λ‹΅μ˜ μ‹œμž‘ 쀄 ꡬ뢄

HTTP 버전 μƒνƒœ μ½”λ“œ( Status Code ) 처리 μ‚¬μœ ( Reason Phrase )

+ 각각의 μš”μ†ŒλŠ” λ„μ–΄μ“°κΈ°λ‘œ ꡬ뢄

 

 

 

- HTTP 버전

: μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜λŠ” HTTP ν”„λ‘œν† μ½œμ˜ 버전

 

- μƒνƒœ μ½”λ“œ

: μš”μ²­μ— λŒ€ν•œ 처리 κ²°κ³Όλ₯Ό μ„Έ 자리수둜 λ‚˜νƒ€λ‚Έ 것

 

- 처리 μ‚¬μœ 

: μƒνƒœ μ½”λ“œκ°€ λ°œμƒν•œ 이유λ₯Ό μš”μ•½ν•˜μ—¬ κΈ°μˆ ν•œ 것

1XX μš”μ²­ 수용과 μ²˜λ¦¬κ°€ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰λ¨ X
2XX μš”μ²­μ΄ μ œλŒ€λ‘œ 처리됨 ex) 200 : 성곡
3XX μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 좔가적인 λ™μž‘μ„ μ·¨ν•΄μ•Ό 함 ex) 302 : ν΄λΌμ΄μ–ΈνŠΈκ°€ λ‹€λ₯Έ URL 둜 이동해야 함
4XX ν΄λΌμ΄μ–ΈνŠΈ μ „μ†‘ν•œ μš”μ²­μ΄ 잘λͺ»λ˜μ–΄ μ²˜λ¦¬μ— μ‹€νŒ¨ ex) 400 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ 문법에 λ§žμ§€ μ•ŠμŒ
403 : ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€μ— μš”μ²­ν•  κΆŒν•œμ΄ μ—†λŠ” μƒνƒœ
404 : λ¦¬μ†ŒμŠ€λ₯Ό 찾을 수 μ—†μŒ
5XX μ„œλ²„μ— μ—λŸ¬κ°€ λ°œμƒν•˜μ—¬ 처리 μ‹€νŒ¨ (단, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ€ μœ νš¨ν•œ μƒνƒœμž„) ex) 500 : μš”μ²­ 처리 κ³Όμ •μ—μ„œ μ—λŸ¬ λ°œμƒ
503 : μ„œλ²„ κ³ΌλΆ€ν•˜λ‘œ μš”μ²­ 처리 λΆˆκ°€ μƒνƒœ

 

ex) 200의 μƒνƒœ μ½”λ“œλ₯Ό κ°€μ§€λŠ” 경우

μš”μ²­ μ½”λ“œ

 

응닡 μ½”λ“œ

 

 

 

 

# HTTP μš”μ²­ 및 응닡 μ‹€μŠ΅

1. GET λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ‹€μŠ΅ν•œ 경우

GET 방식 호좜
GET 방식 μš”μ²­
GET 방식 응닡

 

 

 

2. POST λ©”μ†Œλ“œλ₯Ό μ΄μš©ν•˜μ—¬ μ‹€μŠ΅ν•œ 경우

POST 방식 호좜
POST 방식 μš”μ²­
POST 방식 응닡