본문 바로가기
프로그래밍/NETWORK HACKING

[네트워크 보안] HTTP 개념 및 프로토콜 분석

by B T Y 2017. 7. 31.
반응형

HTTP 개념 및 프로토콜 분석에 대해서 정리한다.

 

- HTTP/1.1 표준안

RFC2616.pdf


HTTP/1.1

 

  - 웹 해킹 수업의 기본지식을 전달
  - 프로토콜의 취약점

  - 1999년도 표준안
  - 15년 이상을 계속 사용중

 


- 웹 서버 구축

 

1. 웹 서버 설치

  - 아파치 웹 서버(httpd)


2. 기본 사용자와 홈 디렉터리

  - 기본 사용자: 아파치(httpd)
    ( ftp와 다르게 http를 이용할때 apache 계정을 기본적으로 사용한다 )
    * 그러므로 모든 사용자는 웹서버에 접속 했을때 아파치의 기본권한을 갖게 된다.

  - /etc/httpd/conf/httpd.conf httpd의 여러가지 설정이 들어있는 설정파일이다.

  - 문서 홈 디렉터리: 292 DocumentRoot "/var/www/html"


3. 기본 페이지

  - 402 DirectoryIndex index.html index.html.var

    * 웹서버에 접속하면 맨처음 자동으로 접속하는 파일을 설정하는 부분이다.


4. 웹의 기본동작: TCP 기반의 통신

  - TCP 동기화 -> 요청 -> 응답 -> TCP 세션 종료

 


* FTP의 기본동작: TCP 기반의 통신

  - TCP 동기화 -> 인증 -> 명령어 전송 -> 응답 -> 대기 -> 명령어 전송 -> 응답 ... ->
    종료 명령어 전송 -> TCP 연결 종료

 

  ! 대부분의 TCP를 이용한 통신들은 세션을 계속 유지한다. ( 설정에 따라서 바뀔 수 있다 )

  ! 웹은 세션을 계속 유지하지 않는다. ( 데이터를 보냈다면 TCP 연결종료 과정을 통해 종료한다 )

 

 

( 아파치가 제대로 동작하는지 확인을 해보기 위해선 netstat -ant 명령을 이용해서 80포트가 열려있는지 확인해 본다 )

 

 

( 윈도우에서 웹브라우저를 통해서 리눅스 웹서버로 접속해보면 정상적으로 설치가 되어

실행이 되고 있을땐 위와 같은 페이지가 나타난다 )

 

 

( 아파치 DocumentRoot인 문서 홈디렉토리에 간단한 html파일을 만들어서 이름을 index.html로 저장시켜

아파치 설정파일에 있는 DirectortyIndex에 대한 부분을 확인 해봤다 )

 

 

( DirectoryIndex에 index.html로 설정이 되있기 때문에 뒤에 해당 웹서버 자원에 대한 식별자를 적어주지 않아도

해당 페이지가 뜨게 되고 적어줘도 따로 상관은 없다 )

 

 

( wireshark를 통하여 http를 덤프한걸 보면 wireshark info는 http 요청과 응답 헤더의 start-line을 보여주는걸 알수 있다 )

 

 

* URI vs URL

  - 요청하려는(접근) 자원에 대한 표현 방법

예).
             
http://192.168.6.112/index.html
             http://istore.tistory.com/927

 

  - URI( Uniform Resource Identifier )
  - URL( Uniform Resource Location )
  - URN( Uniform Resource Name )

 

 http         ://         istore.tistory.com         /         927
 ----         ----            ------------------------            ---        ------
   1            2                       3                                4            5

 

1: 프로토콜 타입
2: 구분자( 프로토콜 타입과 도메인/ip )
3: 서버의 위치
4: 구분자
5: 자원에 대한 식별자


 

* Request Message Sample

 GET /index.html HTTP/1.1
Host: 192.168.6.112
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4
If-None-Match: "5ff63-61-555a29dab202d"
If-Modified-Since: Mon, 31 Jul 2017 20:10:01 GMT

 
* 각 message-header field와 message-header의 끝은 CRLF로 끝난다.
    ( message-body는 message-header가 끝나고 CRLF 이후에 온다 )
* 브라우저나 웹서버마다 요청하는 헤더에 대한 내용은 달라질수 있다.

 

 

* method

 

  1. GET : 자원에 대한 조회
  2. POST : 확장된 형태(자원에 대한 조회) 메시지 바디를 포함한다.

   * 웹에서는 자원을 조회할때 이 2가지 메서드만을 이용해서 조회한다.

  3. OPTIONS : 서버가 지원하는 메서드를 확인
  4. HEAD : 자원에 대한 조회와 동일, 그러나 메시지 바디를 포함하지 않는다.
                  즉, 응답 메시지 헤더만 확인하는 경우
  5. PUT : 특정 자원을 서버에 전송하는 경우
                  업로드라 보면 된다.
  6. DELETE : 특정 자원에 대한 삭제를 요청하는 경우
  7. TRACE : 요청 헤더를 그대로 돌려준다.

 

    * PUT, DELETE 메서드 같은 경우에는 안전상의 이유 때문에 일반적으로 default로는 지원하지 않는다.

 


 

 

반응형

댓글