HTTP 개념 및 프로토콜 분석에 대해서 정리한다.
- HTTP/1.1 표준안
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로는 지원하지 않는다.
'프로그래밍 > NETWORK HACKING' 카테고리의 다른 글
[네트워크 보안] wireshark를 이용한 샘플 패킷 분석 / 파일 카빙 기법 (0) | 2017.08.03 |
---|---|
[네트워크 보안] HTTP header 분석 및 관련 공격 실습 (0) | 2017.08.01 |
[네트워크 보안] FTP 통신 동작 / ncat(netcat) (0) | 2017.07.29 |
[네트워크 보안] DNS Spoofing 실습 / FTP 개념 및 서버 구축 (0) | 2017.07.28 |
[네트워크 보안] DNS Spoofing 개념 및 DNS Spoofer를.py 이용한 실습 (0) | 2017.07.27 |
댓글