본문 바로가기
보안

Chapter 01. 웹과 HTTP 기초

qbang 2019. 2. 25.

'화이트해커를 위한 웹 해킹의 기술'이라는 책으로 공부한 내용을 정리하여 게시할 예정입니다. 

웹 해킹 사이트에서 직접 실습을 할 수 있고, 강의를 제공하기 때문에 더 빠른 이해가 가능할 것 같아 선정하게 되었습니다.

 

 

Chapter 01. 웹과 HTTP

웹 아키텍처

1. 클라이언트 영역

1.1        프레젠테이션 티어

 

2. 서버 영역

2.1        로직 티어: HTTP 요청 처리 및 응답(ex: 웹 서버와 웹 프레임워크)

2.2        데이터 티어: 데이터 처리 및 결과 응답(ex: DBMS, DB)

 

HTTP 요청 메시지

1. 요청 메시지의 구성

1.1         <바디>를 통해 데이터가 전송됨

1.2        데이터를 전송할 필요가 없는 경우에는 <바디> 부분 없이 구성

//헤더와 바디가 구분될 때 빈 줄에 줄 바꿈을 위해 CRLFCRLF 사용되는데, CRLF를 강제로 전송하여 의도치 않은 결과를 초래하도록 만드는 것 -> CRLF 인젝션, HTTP 응답 스플리팅

 

2. 메소드

- 서버에게 어떤 명령을 실행할지 알려주는 역할

2.1        GET: 지정된 리소스를 요청

2.2        POST: 클라이언트 쪽에서 데이터를 서버 쪽으로 전달

2.3        PUT: 지정된 리소스에 데이터를 저장

2.4        DELETE: 지정된 리소스를 삭제

2.5        HEAD, OPTIONS…

 

3. 요청 URI

- 요청이 파라미터를 전달하는 경우에는 ?가 사용됨(ex: /sqli/?id=1&Submit=Submit)

 

4요청 헤더

※ 이미지출처: https://mer-bleu.tistory.com/13

            - 헤더는 리스트의 형태로 여러 개 전송 가능

 

헤더이름헤더 값

 



 

 

 

 

 

 

 

 

 

 

 

 

5. 헤더 예제

 

 

 

 

 

 

 

 

 

 

 

 

            5.1        HOST

-  서버의 도메인 이름과 포트를 명시, 생략될 경우에는 웹 서비스 포트(80)로 이해

5.2        User-Agent

-   클라이언트를 식별할 수 있는 헤더

-   User-agent 헤더에 따라 서버의 동작이 달라지는 경우, 특정 앱들은 호환성을 위해 다른 User-agent 정보를 사용하기도 함

//악성 봇들이나 자동화 프로그램도 가짜 User-agent 헤더를 사용하는 경우가 많음 -> User-agent Spoofing

5.3        Accept, Accept-Language, Accept-Encoding

5.3.1   Accept 헤더는 클라이언트가 어떤 컨텐트 타입을 처리할 수 있는지 서버에게 알려줌

5.3.2   Accept-Language 헤더는 클라이언트가 어떤 언어를 처리할 수 있는지 서버에게 알려줌

5.3.3   Accpet-Encoding 헤더는 클라이언트가 처리할 수 있는 인코딩 방식이나 압축 알고리즘 정보 알려줌

5.4        Referer

-   리퍼러 헤더는 이전 웹 페이지의 주소를 알려줌, 요청이 웹사이트 내부인지 외부인지 판단 가능 -> CSRF 대응

5.5        Content-Type, Content-Length

-   바디가 존재하는 경우 바디의 종류와 길이 알려줌

5.6        Cookie

5.6.1   쿠키를 전달하는 헤더, 변수와 값의 쌍으로 구성

5.6.2   여러 요청에 걸쳐 클라이언트에서 동일한 데이터를 전달할 필요가 있을 때 사용

 

 

 Cookie: cookie1=value1, cookie2=value2

 

 

      5.7        바디//특정 사용자의 세션 ID를 알아내어 해당 사용자만 권한을 가지고 있는 정보에 접근하는 것 -> 세션 하이재킹

- 데이터가 전송되는 부분

 

 

 

HTTP 응답 메시지

 

<버전> <응답 코드> <응답코드텍스트>
<헤더>
 
<바디>

        1. 응답 코드/응답 코드 텍스트

- 헤더와 바디 부분 형식 동일

1.1        응답코드

1.1.1   100번대: 정보 전달 목적

1.1.2   200번대: 요청 처리 성공

1.1.3   300번대: 다른 웹페이지로 리다이렉트 필요

1.1.4   400번대: 클라이언트가 원인이 되어 에러 발생

1.1.5   500번대: 서버 에러

 

2응답 헤더

2.1        Server

- 웹 서버와 웹 프레임워크의 버전 정보 알려줌

2.2        Set-cookie

- 서버에서 클라이언트로 쿠키를 전달할 때 사용, 쿠키 이름과 값 설정은 필수

 

 

Set-Cookie: <쿠키 이름>=<쿠키 값>; Expires=<날짜>; Path=<경로>; Secure; HttpOnly

 

 

   2.2.1   Expires

- 쿠키의 유효기간 설정설정되어 있지 않으면 세션이 종료될 때까지의 유효기간을 가짐

2.2.2   Path

- 쿠키를 전송할 리소스의 경로 짖어, 서브 디렉토리까지 같이 매칭

2.2.3   Secure

- 해당 옵션을 지정한 쿠키는 HTTPS 요청 시에만 전달 -> 네트워크 스니핑 대응

2.2.4   HttpOnly

- 해당 키워드를 통해 쿠키 값이 자바스크립트에 의해 접근되는 것을 방지 -> XSS 방지

2.2.5   X-Frame-Options

- <frame> or <iframe>를 사용한 웹 페이지 출력 제어 -> 클릭재킹 공격 방지

- ex: X-Frame-Options: Deny, X-Frame-Options: SAMEORIGIN

2.2.6   X-XSS-Protection

- XSS 공격이 탐지되었을 때, 웹 페이지가 로딩되는 것을 막아줌

- ex: X-XSS-Protection: 1; mode=block

2.2.7   X-Content-Type-Options

- MIME 스니핑을 차단하기 위해 사용하는 헤더, Content-Type에 설정된 형식으로만 처리

 

- ex: X-Content-Type-Options: nonsniff

'보안' 카테고리의 다른 글

Chapter 05. 정보 수집  (0) 2019.02.27
Chapter 04. 버프 수트  (0) 2019.02.26
Chapter 02. 웹 보안  (0) 2019.02.26
SQL Injection 이란? - (2)  (0) 2018.04.30
SQL Injection 이란? - (1)  (1) 2018.04.27

댓글