웹/웹 보안

[웹 모의해킹 및 시큐어코딩 진단가이드] HTTP프로토콜

비니화이팅 2017. 12. 7. 15:08

< HTTP Request>

* GET 메소드

- 데이터 전송용량의 한계(IE에서는 2083자로 제한)로 인해 기본 페이지 및 그림 파일과 같은 간단한 데이터 전송에 사용

-  모든 정보가 헤더에 포함

형식 

 GET [request-uri]?query_string HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n


=> HTTP Request헤더에 포함될 수 있는 정보들

-> GET /index.jsp HTTP/1.1

- 데이터 처리방식(HTTP Method), 기본 페이지, 프로토콜 버전


-> user-agent: MSIE 6.0; Windows NT 5.0User-Agent:

- 사용자의 웹 브라우저 종류 및 버전 정보

- 공격툴인지 아닌지 확인 가능(쉽게 조작이가능하기때문에 신뢰할만하지는 않음)

-> accept: text/html; */*Accept:

- 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터 타입(MIME)을 의미

-  text/html는 text, html형태의 문서를, */*는 모든 문서를 처리할 수 있다라는 것을 의미


-> cookie: name=vlaue

- 프로토콜 자체가 세션을 유지하지 않는 State-Less(접속 상태를 유지하지 않는)방식이기 때문에 사용자 정보를 기억하기 위해 만든 인위적인 값


-> referer: http://www.xxx.xxx

- 경유지를 알려주는 도메인 혹은 URL정보


-> host: www.xxx.xxx

- 사용자가 요청한 도메인 정보


* POST 메소드

- 게시판 등과 같은 폼 데이터 및 CGI 프로그램으로 구성된 페이지의 대용량 데이터를 처리하기 위해 사용

- 웹 브라우저와 시스템 간 데이터 처리로 웹 브라우저에서는 페이지 정보만을 확인할 수 있으나 프록시 툴을 이용하면 전송 데이터도 확인 가능

- GET 방식과의 차이점은 바디(몸체)에 요청한 데이터 값(게시판의 제목, 글 내용)이 포함

- 헤더에는 페이지 정보만 존재하며 바디에 입력한 값 등이 포함

형식 

 POST [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 Content-Length : [Length in Bytes] \r\n

 Content-Type : [Content Type] \r\n

 \r\n

 [query-string] 혹은 [데이터]


* 기타 메소드

 종류

 전송 형태 

 설명 

 HEAD 

 HEAD [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 - GET과 유사

 - 웹 서버의 다운 유무 점검 및 웹 서버 정보 등을 얻기 위해 사용

 OPTIONS

 OPTIONS [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 - 시스템에서 지원되는 메소드 종류를 확인

 PUT

 PUT [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 Content-Length : [Length in Bytes] \r\n

 Content-Type : [Content Type] \r\n

 \r\n

 [데이터]

 - POST와 동일하게 헤더 및 몸체를 포함하며 몸체에 컨텐츠 내용을 덮붙여 원격지 서버에 지정한 컨텐츠를 저장하기 위한 목적으로 사용

 - 이를 악용하여 홈페이지 변조에 사용

 TRACE

 TRACE [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 \r\n

 - 원격지 서버에 Loopback 메시지를 호출하기 위해 사용

 CONNECT

 CONNECT [request-uri] HTTP/1.1\r\n

 Host : [Hostname] 혹은 [IP] \r\n

 \r\n

 - 웹 서버에게 프록시 기능을 요청할 때 사용



<HTTP Response>

* HTTP수신(응답) 필드 값들

=> HTTP/1.1 OK 200

- 웹 프로토콜 버전 및 응답코드


=> Server: NCSA/1.4.2

- 웹 어플리케이션 종류 및 버전 정보

  (보안설정에 따라 종류 및 버전 정보 등은 제한될 수 있음)


=> Content-type: text/html

- MIME 타입 정보가 포함


=> Content-length: 107

- 수신 Body 사이즈 정보가 포함


=> 컨텐츠 내용(사용자가 요청한 페이지 정보)

<HTML>

    <HEAD>

           <TITLE>My first HTML Document</TITLE>

    <HEAD>

    <BODY>

         <P>Hello World!

    </BODY>

</HTML>