본문 바로가기

웹해킹

웹해킹 #1 웹 기본 지식 (URL, HTML, SSS, CSS, HTTP, 쿠키와 세션)

1. URL (Uniform Resource Locator)

- 파일에 대한 인터넷 상의 고유 주소

- 프로토콜, 웹 서버, 경로, 파일 이름, 쿼리로 이루어짐

 

http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument

 

프로토콜 : 브라우저가 어떤 프로토콜을 사용해야 하는 지 알려주며, 웹에서 페이지나 파일에 접근할 때

                  사용되는 메소드 (HTTP 메소드 안에 또 다른 메소드들 존재)

웹 서버 : 어떤 웹 서버가 요구되는 지 알려주며, 연결할 파일이 위치한 서버

                 IP adress를사용할 수도 있음

port : 웹 서버에서 자원을 접근하기 위해 사용되는 입구이며, ‘:’ 포트번호 구분은

            표준 HTTP 포트 (HTTP80, HTTPS443) 를 사용하는 경우는 생략 가능!

경로(PATH) : 웹 서버에서 자원에 대한 경로이며, 연결할 파일이 들어 있는 폴더 디렉토리

                     여러 개의 폴더들은 ‘/’ 로 구분하며, 요즘에는 물리적 주소가 아닌 웹서버에서 추상화해서 보여줌

                    + 파일 이름 : 연결되어 보여줄 파일(페이지)의 실제 이름

쿼리 : 웹 서버에 제공하는 추가 파라미터이며, /값으로 짝을 이룸 (URL에 전달할 문자열 지정)

            경로 ‘?’ 이후 쿼리 세그먼트들로 구성되고, 여러 개의 쿼리 세그먼트는 ‘&’ 로 구분

Anchor : 자원 자체의 다른 부분에 대한 anchor이며, 브라우저에게 방향을 알려주는 역할

               ex) #bottom이면 밑부터. #chapter11이면 chapter11부터 보여줌

 

2. HTML (HyperText Markup Language)

- 웹페이지를 기술하기 위한 언어

- 웹의 마크업 언어이며, 웹페이지의 내용과 구조를 담당

- HTML 태그를 통해 정보를 구조화

- HTML은 로직을 이용한 작업 (마우스 클릭, 입력, 조건문) 이 불가능하므로 동적인 웹 서비스를 위해 스크립트 언어

  사용

 

* SSS HTML CSS

 : SSS 언어 안에 HTML이 코딩되어 있으며, 사용자가 서버에 접속하면 HTML을 보내주고, 사용자는 HTML을 받아

   웹 서비스를 이용. CSS HTML내에 포함됨

 

3. SSS (Server Side Script)

- CSS에서 받아온 정보 처리 후 DB에 저장하거나 삭제 등의 기능

- ASP, JSP, PHP와 같은 동적인 페이지를 제공하는 스크립트

  언어 서버 DBMS
Windows ASP IIS MSSQL
JAVA JSP TomCat Oracle
오픈소스 PHP Apach MYSQL

- 처리 과정

① 서버 스크립트가 포함된 페이지 코드 작성
② 클라이언트가 웹 페이지 요청
③ 웹 서버가 페이지 파일 검색
④ 웹 서버가 스크립트 엔진에 요청하여 스크립트와 일반HTML을 처리
HTML 스트림이 브라우저에 반환
⑥ 브라우저가 HTML을 처리

 

4. CSS (Client Side Script)

- 클라이언트의 웹 브라우저에 의해 해석되고 적용됨

- 서버에서 클라이언트가 요청하면 서버가 CSS로 만들어진 스크립트를 보내줌

- HTML, JavaScript, VisualBasic Script, Jscript (대부분 자바스크립트)

- 처리 과정

① 클라이언트 스크립트가 포함된 페이지 코드(HTML) 작성
② 클라이언트가 웹페이지 요청
③ 웹 서버가 페이지 파일 검색
HTML 스트림이 브라우저에 반환
⑤ 브라우저가 클라이언트 쪽 스크립트를 처리
⑥ 브라우저가HTML을 처리

 

웹 통신 과정

* CSSSSS를 구분하는 이유

- CSS에서는 소스보기를 통해 소스가 공개되므로, 로그인과 같이 보안상의 취약점이 될 부분은 SSS를 사용
- CSS
DB 연동이 , 사용자도 DB 접근이 가능해 취약점이 발생하므로, SSS에서만 DB와 연동이 가능해야
-
마우스 우 클릭 금지, 복사 방지 등과 같은 사용자 이벤트는 CSS에서만 관리
-
서버와 연동시키지 않아도 될 작업을 CSS에서 하므로, 서버의 불필요한 트래픽 발생이 감소

 

5. HTTP (Hyper Text Transfer Protocol)

- 하이퍼 텍스트 트랜스터 프로토콜 : 웹을 구현하기 위한 네트워크 프로토콜
- http://www.naver.com
에서 http:// HTTP 프로토콜을 사용한다는 뜻 (기본 포트 80)

- https://는 HTTPS로 접속한다는 뜻 (기본적으로 443번 포트 사용)
-
요청과 응답 두 가지로 구성

HTTP 요청/응답

- 요청 : 클라이언트 영역에서 서버 영역으로 HTTP 요청을 전송

- 응답 : 웹 서버가 해당 요청을 처리한 후 HTTP 응답을 통해 결과 반환

 

요청 메시지

HTTP 요청 메시지
요청 메시지 구조

-메소드, 요청 URI, 버전이 표시됨

-둘째 줄부터 빈 줄까지 여러 개의 헤더로 구성됨

-바디를 통해 데이터가 전송됨

 

① 메소드(Method)

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

HTTP 메소드 설명
GET 지정된 리소스 요청
POST 클라이언트 데이터를 서버에 전달
PUT 지정된 리소스에 데이터 저장
DELETE 지정된 리소스 삭제
HEAD 지정된 리소스의 응답 헤더만 요청 : 데이터는 전송 안되므로 데이터의 길이 확인하는 용도
OPTIONS 지원되는 메소드 표시

② 요청 URI

- 특정 리소스의 위치를 표기

- 프로토콜과 호스트명을 모두 포함하여 표기한 완전한 URI 또는 상대적인 경로만 표시 가능

Ex) http://www.host.com/index.html - 완전한 URI

      /index.html – 상대적 경로

- ? : 파라미터를 전달하는 경우 사용

  /dvwa/vulnerabilities/sqli/?id=1&Submit=Submit

- ‘?’ 부분을 쿼리스트링이라고 하며, 파라미터=값의 형태로 파라미터 전달

- & : 여러 개의 파라미터를 전달하는 경우 사용

 

③ 버전 (ex. HTTP/1.1)

- 요청 메시지가 사용하고 있는 HTTP 버전 표기

- 클라이언트와 서버가 프로토콜 버전 서로 확인 가능

 

④ 요청 헤더 (Header)

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

- 기본 형태 = 헤더이름 : 헤더 값

 

Host

서버의 도메인 이름과 포트 명시. 일반적으로 웹 서비스에서는 80번 포트 의미

Host.com:port(. 192.618.56.106:433)

User-Agent

클라이언트 소프트웨어를 식별할 수 있는 헤더

User-Agent 헤더에 따라 서버의 동작이 달라지는 경우, User-Agent를 조작하는 것을 유저 에이전트 스푸핑이라고 함

Accept, Accept-Language, Accept-Encoding

Accept 헤더는 어떤 contents 타입을 처리할 수 있는지 서버에게 알려주며, 서버에서는 이 헤더에 지정된 타입 중에서 하나를 정하여 응답

Accept-Language 헤더는 클라이언트가 어떤 언어를 처리할 수 있는지, Accpet-Encoding 헤더는 클라이언트가 처리할 수 있는 인코딩 방식이나 압출 알고리즘 정보 알려줌

Referer

이전 웹 페이지의 주소를 알려줌. 링크를 제공한 페이지의 주소이며, 요청이 웹사이트 내부에서 요청된 것인지, 외부에서 요청된 것인지 알 수 있음

Content-Type, Content-Length

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

(application/x-www-form-urlencoded, multipart/form-data, application/json, text/xml )

Content-Length는 바디 전체 길이를 알려줌

Cookie

밑에서 설명!

 

⑤ 바디

- 데이터가 전송되는 부분

- Content-Type에 따라 형태 달라짐

 

응답 메시지

HTTP 응답 메시지
응답 메시지

① 버전 (ex. HTTP/1.1)

- 응답 메시지의 HTTP 버전 알려줌

 

② 응답 코드/응답 코드 텍스트

- 숫자와 텍스트로 표시됨

- 숫자는 스테이터시 코드 (status code) 또는 응답 코드라고 하며,

   요청이 성공된 것을 알려주거나, 에러가 발생하면 에러 종류 알려줌

- 텍스트는 사용자가 응답 코드를 좀 더 알아보기 쉽게 해줌

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

③ 응답 헤더

Server

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

Set-Cookie

서버에서 클라이언트로 쿠키를 전달할 때 사용됨. 이렇게 전송 된 쿠키는 웹 브라우저에 저장되고, 정해진 유효기간 동안 이후 요청 메시지의 Cookie 헤더를 통해 다시 전송됨

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

- Expires : 쿠키의 유효기간 설정

- Path : 쿠키를 전송할 리소스의 경로 지정

- Secure : HTTPS 프로토콜이 사용됨

- HttpOnly : 쿠키 값이 자바스크립트에 의해 접근되는 것 방지

X-Frame-Options

<frame>이나 <iframe> 등을 사용하여 웹 페이지가 출력되는 것 제어

  X-Frame-Options:DENY

  X-Frame-Options:SAMEORIGIN

- DENY : 어떠한 경우에도 프레임 내에서 웹 페이지를 표시하지 않도록

- SAMEORIGIN : 같은 도메인 안에서 요청된 웹 페이지만 프레임으로 표시

X-XSS-Protection

리플렉티드 크로스 사이트 스크립팅 공격이 탐지되었을 때, 웹 페이지가 로딩되는 것 막아줌

  X-XSS-Protection: 1; mode-block

X-Content-Type-Options

MIME 스니핑 차단하기 위해 사용

Content-Type 헤더에 설정된 형식으로만 리소를 처리하게 됨

  X-Content-Type-Options: nosniff

 

응답 메시지와 요청 메시지의 버전이 다를 경우에 오류가 생기는지 조사해봐야 할 것 같다..

 

6. CookieSession

 

Cookie

- 이전 상태를 저장하지 않는 (stateless : 페이지를 연결하고 나면 클라이언트와 서버 간의 통신이 끊김 -> 비연결적)

  프로토콜인 HTTP 보완

- 웹 사이트에 접속할 때 자동적으로 생성되는 임시 파일

- 변수와 값의 쌍으로 구성된 집합

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

- 4kb 이하의 파일용량

- 브라우저 종료해도 사용자의 HDD에 저장됨
  ex)
자동 로그인, 팝업 창 하루동안 띄우지 않기

 

Session (Session Cookie)

- 보안의 취약점을 보완하기 위해 SID(Session ID)를 식별자로 중요한 정보를 서버에 저장

- SID로는 쿠키나 도메인 파라미터를 사용

- 웹 클라이언트 캐시에 임시로 저장

- 서버에서 삭제하거나 로그아웃할 때 삭제됨

- 세션은 서버에 저장이 되고 로그아웃 시 삭제되므로 쿠키보다는 안전
   ex)
일반적인 로그인

 

* Cookie vs Session

: 지속적인 쿠키, 지속적이지 않은 세션

쿠키 vs 세션