본문 바로가기
스터디/server

웹해킹을 하기전에 알아야하는 기초! HTTP 프로토콜

by 깝태 2011. 1. 27.

안녕하세요! 완소풉 입니다. 몇 일까지 언어를 배우고 이제 보안공부에 다시 몸을 던지게 되었습니다.
그래서 이 Network / Web 게시판에서는 웹해킹에선 빠져서는 안되는 기초를 알려드릴 생각입니다. 물론 제가 가지고 있는
서적을 참고하였으며 파로스에 관한 내용까지 담을 예정 입니다.

 HTTP 프로토콜이란, Hyper Text Transfer Protocol은 TCP 기반으로 WWW(World Wide Web)에 접속하기 위해 사용되는
통신수단이며 오늘날 웹에 적용되어 현재까지 사용되고 있습니다.

그리고 HTTP 프로토콜에서 사용되는 TCP 는 다른 것들과 차이가 있습니다. HTTP 에서는 State-Less 방식이라고 정보를
전달한 후 바로 끊켜버립니다. 그래서 이런 점을 보완하기 위해 로그인 같은것들을 인증하기 위해 사용자 정보를 임시의 값으로
저장해주는 쿠키가 있습니다. 쿠키는 클라이언트에 저장이 됩니다.

웹 브라우저는 사용자 IP 를 웹 서버에 전달하면 TCP 세션(웹서버) 연결이 시작됩니다. 일단 세션이 연결되면
HTTP Request Header와 Body에 주소와 데이터를 포함하여 웹서버에 전달합니다. 그리고 웹서버가 이를 받은 후 이상 없는지
확인하고 나면 HTTP Response Header, Body 에 문서를 만들어 사용자에게 전달합니다.

Request(요청) : 웹브라우저 -> 웹서버
Response(회신) : 웹서버 -> 웹브라우저



위 사진은 세션 연결 및 데이터 전송과정 순서를 나타낸 사진입니다. (꽤 오래전에 강의 쓸려고 다운받아놨는데
지금 와서 출처를 찾아볼려고 하니깐 모르겠습니다. 혹시나 출처를 아시는 분은 댓글 부탁드리겠습니다.)
번호 순서대로 설명하겠습니다.

아래 나오는 TCP 헤더의 컨트롤 비트는 아래 링크에 있는 글을 참고하세요!
2011/01/27 - [ 정보기술/  Network / Web] - [네트워크갤] TCP 헤더 (TCP Header)

① 웹 서버가 기본 80 포트를 열어놓고 대기 중 입니다.
② 사용자가 웹서버에 접속 요청을 합니다.
③ 사용자에게 SYN과 ACK 를 전송합니다.
④ 응답을 잘 받았는지 확인 후 확인메세지를 재전송합니다.

-----> 이제부터 웹 브라우저와 웹 서버가 데이터를 주고받습니다.

⑤ GET 메소드를 이용해 PUSH 옵션을 통해 기본페이지를 요청한다.
⑥ 사용자 요청 데이터에 이상이 없는지 점검하고 사용자에게 잘 받았다고 ACK를 전송한다.
⑦ PUSH 옵션을 통해 페이지를 사용자에게 전송한다.
⑧ 사용자 측에서도 데이터에 이상이 없는지 점검하고 웹서버에 ACK를 전송한다.


 
위 사진은 세션 연결 해제과정을 나타낸 사진 입니다. 아까 말씀드렸듯이 HTTP 는 State-Less 방식이라 데이터 전송을
완료하면 바로 연결이 끊어집니다.

① 사용자는 세션 종료 요청을 위해 FIN, ACK 를 전송한다.
(연결을 시도한자가 종료 요청까지 해야한다.)
② 세션 종료 요청을 프로그림, 웹 애플리케이션에 전송한다.
③ 웹 서버의 답변을 기다립니다.
④ 웹 서버는 종료 합의의 의미로 FIN, ACK 를 전송한다.
⑤ 혹시나 늦게 뒤떨어져 올 수 있는 데이터가 있을지 모르니 ACK 를 웹서버로 전송하기전에 대기한다.
⑥ 데이터 전송이 완료되면 자동으로 종료된다.

제가 정말 설명이 잘 되어있는 글이 있기에 퍼왔으나 혹시나 읽지 않으시는 분들을 위해... 귀찮지 않게 살짝 서술해드리겠습니다.
TCP 헤더에 메세지 상태를 알리든 컨트롤 비트 입니다.

URG - 긴급처리를 요청하는 BIT
ACK - 잘 받았다는 메세지 처리를 위한 BIT
PSH(PUSH) - 빠른 처리 요구를 위한 BIT
RTS - 강제 종료 BIT
SYN - TCP 세션을 시작하기 위한 BIT
FIN - 정상 종료 BIT


이만 오늘 강의를 마치겠습니다, 정작 중요한 HTTP Request, Response 에 대한 강의를 서술하지 못했습니다.
강의가 매우 길어질것 같아 그랬습니다, HTTP Request, Response 에 대한 내용은 2강에서 서술하겠습니다! ^^