Dreamhack/Web hacking

Background:HTTP/ HTTPS

壓倒 2023. 1. 9. 02:12
해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=2를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.

통신 프로토콜


웹 서버에 있는 리소스를 클라이언트가 받기 위해서는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 한다.

요청이 들어올 경우 서버는 요청을 이해하고 대응하는 동작을 수행해 클라이언트에게 리소스를 반환한다.

이러한 클라이언트의 행위를 요청(Request), 서버의 행위를 응답(Response)라고 한다.

프로토콜

프로토콜은 규격화된 상호작용에 적용되는 약속을 의미한다.

🏏
규격화된 상호작용에 적용되는 약속이란? 우리가 일상생활 전화 통화를 할 때 “여보세요”로 시작하여 “끊을게”로 종료하는 것과 같은 것을 말한다. 일상생활에서는 “여보세요”, “끊을게”와 같은 말이 생략될 수 있지만 컴퓨터의 경우 생략될 경우 치명적인 오류가 발생한다.

HTTP


HTTP(Hyper Text Transfer Protocol)이란 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜이다.

HTTP의 기본 메커니즘은 클라이언트가 서버에게 요청하면 서버가 응답하는 것이고 웹 서버는 HTTP서버를 일반적으로 TCP/80, TCP/8080 서비스 포트에 대기시킨다.

RequestResponse의 예시는 다음과 같다.

Request
GET /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Response
HTTP/1.1
 
200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>

HTTP 메시지


HTTP 메시지에는 클라이언트가 전송하는 HTTP 요청, 그리고 서버에서 반환되는 HTTP 응답이 존재한다. 이들은 모두 HTTP 헤드와 바디로 구성된다는 공통점을 지니고 있다.

HTTP 헤드

HTTP 헤드의 경우 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 부른다.

HTTP 바디

헤드의 끝을 나타내는 줄바꿈된 줄 뒤 모든 줄을 바디라고 말한다. 해당 부분에는 클라이언트나 서버가 전송하려는 데이터가 포함되어 있다.

HTTP 메시지(dreamhack)

HTTP 요청


HTTP 요청은 서버에게 특정 동작을 요구하는 메시지이다.

HTTP 요청의 시작 줄은 메소드(Method), 요청 URL(Request-URL), HTTP 버전으로 구성되어 있다. 각각은 띄어쓰기로 구분한다.

GET /index.html HTTP/1.1 <- 해당 부분
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
POST /index.html HTTP/1.1
Host: dreamhack.io
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Content-Length: 19
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
foo=bar&hello=world

메소드는 URL이 가리키는 리소스를 대상으로, 서버가 수행하길 바라는 동작을 나타낸다. 자주 사용되는 메소드는 GETPOST 메소드가 존재한다.

GET, POST 메소드 GET 메소드는 리소스를 가져오라는 메소드이다. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면 새로운 페이지를 렌더링하기 위해 리소스가 필요하게 된다. 이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아온다. POST 메소드는 리소스로 데이터를 보내라는 메소드이다.

요청 URL메소드의 대상, HTTP 버전클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타낸다.

HTTP 응답


HTTP 응답은 HTTP 요청에 대한 결과를 반환하는 메시지이다. 반환하게 되는 정보는 요청을 수행하였는지, 하지 않았는지, 하지 않았다면 이유는 무엇인지와 같은 다양한 정보가 포함된다.

HTTP 응답의 시작 줄은 HTTP 버전, 상태 코드(Status Code), 처리 사유(Reason Phrase)로 구성된다. HTTP 요청과 동일하게 띄어쓰기로 구분한다.

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>

HTTP 버전은 서버에서 사용하는 HTTP 프로토콜의 버전을 나타낸다.

상태 코드는 요청에 대한 처리 결과를 세 자릿수로 나타낸다. 크게 5개의 클래스로 구분되는데 세부적인 상태 코드는 다음과 같다.

상태 코드설명대표 예시
1xx요청을 제대로 받았고, 처리가 진행 중
2xx요청이 제대로 처리됨200: 성공
3xx요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함.302: 다른 URL로 갈 것
4xx클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다.400: 요청이 문법에 맞지 않음 403: 클라이언트가 리소스에 요청할 권한이 없음 404: 리소스가 없음
5xx클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했습니다.500: 요청을 처리하다가 에러가 발생함 503: 서버가 과부하로 인해 요청을 처리할 수 없음

HTTPS


HTTP(HTTP over Secure socket layer)은 HTTP의 보안 상 단점을 보완하기 위해 나온 프로토콜로 TLS(Transport Layer Security) 프로토콜을 도입하여 HTTP의 보안 상 단점을 보완하였다.

TLS서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화하여 공격자가 중간에서 메시지를 탈취하더라도 해석하는 것을 불가능하게 한다.

HTTP의 보안 상 단점

HTTP의 경우 응답과 요청이 평문으로 전달되기 때문에 중요 정보의 유출 가능성이 존재한다. 예를 들어, 로그인 시 전송한 POST 요청에는 이용자의 ID 및 비밀번호가 포함되기 때문에 공격자가 중간에서 가로챌 경우 계정이 탈취될 수 있다.

HTTP

HTTP 패킷(dreamhack)

HTTPS

HTTPS 패킷(dreamhack)

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T