'Web Hacking'에 해당되는 글 41건

SQL Injection이란 웹 애플리케이션에서 입력받아 데이터베이스로 전달하는 SQL 쿼리를 바꾸거나, 다른 SQL 문장을 추가하여 불법 로그인, DB 데이터 추출, 시스템 명령 실행 등을 수행하는 공격 기법이다. Blind SQL 인젝션, 에러 기반 SQL 인젝션, Union SQL 인젝션 등 종류도 다양하다.

 

SQL Injection 특징

  - DB에 악성코드를 대량으로 삽입

  - 자동 삽입 스크립트를 사용하여 한번에 악성코드를 대량 삽입

  - POST나 HTTP Header를 이용한 경우는 공격 로그를 찾기 어려움

  - 악성코드 삽입 과정에서 데이터의 손실 또는 유실 발생

 

SQL Injection 공격 종류

  - 인증 우회 (AB : Auth Bypass)

보통 아이디와 비밀번호를 입력하는 로그인 페이지를 목표로 하는 공격이다. SQL 쿼리문의 true/false의 논리적 연산 오류를 이용하여 로그인 인증 쿼리문이 무조건 true의 결과 값이 나오게 하여 인증을 무력화 시키는 원리이다.

 

  - 데이터 노출 (DD : Data Disclosure)

목표 시스템의 주요 데이터 절취를 목적으로 하는 방식이다. Error based, Union, Blind, Time 방식이 있다. 시스템의 에러는 개발자에게 버그를 수정하는 면에서 많은 도움을 주지만 역으로 에러를 이용할 수 있다. 악의적인 구문을 삽입하여 에러를 유발시키는 것이다.

 

  - 원격명령 실행 (RCE : Remote Command Excute)

 

대응방안

  - 문자열 필터링 길이 제한

데이터베이스와 연동하는 스크립트의 모든 파라미터를 점검하여 사용자의 입력 값에 이용되는 특수문자(‘, “, \, ;, :, %, space, --, # ) SQL 관련 문자열(select, union, insert, delete, update )을 필터링한다. 또한, 문자열의 길이를 제한하고, 숫자는 숫자인지 점검하는 함수를 사용한다.

 

  - 확장 프로시저 제거

MS-SQL의 경우 확장 프로시저(mater, xp_cmdshell, xp_startmail, xp_sendmail 등)는 운영체제 명령 실행 및 SQL 인젝션에 이용되기 때문에 제거하는 것이 안전하다.

 

  - DB 사용자 권한 제한

웹 프로그램을 사용하는 DB 사용자의 권한을 제한한다.

 

  - 선처리 질의문(Prepared Statement) 이용

선처리 질의문을 이용하면 SQL 쿼리문을 선처리하여 이후 입력되는 변수 값을 항상 문자열 변수로 다루기 때문에 사용자가 악의적인 SQL 구문을 삽입하더라도 SQL 문에 영향을 미치지 않아 SQL 인젝션이 발생하지 않는다.

 

  - hash function 사용

사용자의 입력값을 DB 그대로 저장하고 사용하지 말아야 한다. 특히 비밀번호의 경우 그렇다. 무조건 SHA-256 이상의 보안성을 갖는 해시함수로 해싱한 뒤 저장해야 한다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

CSRF(Cross Site Request Forgery)란?  (0) 2017.09.08
XSS란?  (2) 2017.09.01
DCL(데이터 제어어)란?  (0) 2017.08.11
데이터 조작어(DML)이란?  (0) 2017.08.03
데이터 정의어(DDL)이란?  (0) 2017.07.27
블로그 이미지

꼴통보안인

,

데이터 제어어(Data Control Language)는 DB에 접근하고 객체들을 사용하도록 권한을 부여, 해제하는 명령어이다.

 

1. Grant문

- DB권한을 부여하는 명령어

     ex) Grant 권한_리스트 on 개체 to 사용자 [with grant option];

      * with grant option : 부여받은 권한을 다른 사용자에게 다시 부여할 수 있는 권한을 부여

 

2. Revoke문

  - DB권한을 해제하는 명령어

     ex) Revoke [grant option for] 권한_리스트 on 개체 from 사용자 [cascade];

      * grant option for : 다른 사용자에게 권한을 부여할 수 있는 권한을 취소

      * cascade : 권한 취소 시 권한을 부여받았던 사용자가 다른 사용자에게 부여한 권한도 연쇄적으로 취소

 

3. Commit문

  - 데이터를 DB에 저장하고 트랜잭션을 성공적으로 종료하는 명령어

 

4. Rollback문

  - 데이터의 변경 사항을 취소하고 원상태로 복귀한 후 트랜잭션을 종료하는 명령어

 

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

XSS란?  (2) 2017.09.01
SQL Injection이란?  (0) 2017.08.24
데이터 조작어(DML)이란?  (0) 2017.08.03
데이터 정의어(DDL)이란?  (0) 2017.07.27
SQL이란?  (0) 2017.07.19
블로그 이미지

꼴통보안인

,

데이터 조작어(Data Manupulation Language)는 DB에 있는 데이터를 검색, 등록 삭제, 갱신하기 위한 언어이다.

 

1. Select문

- DB에 있는 데이터를 검색하는 명령어

     ex) select [all/distinct] from 테이블 where 조건;

      * all : default 옵션, 중복된 데이터가 있어도 표시

      * distinct : 중복된 데이터가 있는 경우 1건으로 처리하여 표시

 

2. Insert문

  - DB에 데이터를 삽입하는 명령어

     ex) Insert into 테이블명 (속성명, ...) values (속성값, ...);

 

3. Delete문

  - DB에 있는 데이터를 삭제하는 명령어

     ex) delete from 테이블명 where 조건;    

 

4. Update문

  - DB에 있는 데이터를 갱신하는 명령어

     ex) update 테이블명 set 수정할 컬럼명 = 변경할 값;

 

4. Murge문

  - DB에 있는 여러 테이블의 데이터를 병합하는 명령어

     ex) murge into 테이블명 on 병합조건절 when matched then

update set 업데이트 내용 delete where 조건

when not matched then insert values (컬럼명);

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

SQL Injection이란?  (0) 2017.08.24
DCL(데이터 제어어)란?  (0) 2017.08.11
데이터 정의어(DDL)이란?  (0) 2017.07.27
SQL이란?  (0) 2017.07.19
OWASP Top 10 2017  (0) 2017.07.10
블로그 이미지

꼴통보안인

,

데이터 정의어(Data Definition Language)는 DB 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 데이터 구조와 관련된 명령어들을 말한다.

 

1. Create문

- 테이블, 뷰, 인덱스 등 객체를 생성하는데 사용

  1-1. 스키마

    - 하나의 사용자에 속하는 테이블과 기타 구성 요소 등을 그룹짓기 위한 것이다.

       ex) Create schema 스키마명 authoriztion 사용자_ID;

  1-2. 도메인

    - 하나의 속성이 취할 수 있는 동일한 타입의 원자값들의 집합이다.

    - 임의의 속성에서 취할 수 있는 값의 범위가 SQL에서 지원하는 전체 데이터

      타입의 값이 아니고 일부분일 때, 사용자는 그 값의 범위를 도메인으로 정의할

      수 있다.

    - 정의된 도메인 명은 일반적인 데이터 타입처럼 사용한다.

       ex) Create DOmain 도메인명 데이터_타입

[Default 기본값]

[Constraint 제약조건명 check (범위 값)];

  1-3. 테이블

    - 기본 테이블에 포함될 모든 속성에 대하여 속성명, 속성의 데이터 타입,

      Not Null을 지정한다.

    - 제약조건

      * PRIMARY KEY (기본키, PK) : 테이블 내의 개별 데이터를 식별하기 위해

        정의된 제약조건이다. 이 조건을 설정한 컬럼의 데이터는 컬럼 내에서 중복

        될 수 없으며 Null값을 허용하지 않는다. 즉 PK는 Unique + Not Null의 제약

        조건을 갖는다.

      * FOREIGN KEY (외래키, FK) : 부모 테이블과 자식 테이블 간의 관계를 정의하기

        위해 부모 테이블의 PK값을 참조하는 자식 테이블의 제약조건이다.

      * UNIQUE KEY (고유키, UK) : 테이블 내의 개별 데이터를 고유하게 식별하기

        위한 제약조건이다.

      * NOT NULL (NN) : 해당 컬럼의 데이터값에 Null을 허용하지 않는

        제약조건이다. 즉 필수입력을 의미한다.

      * CHECK (CK) : 해당 컬럼에 허용할 수 있는 데이터 값의 범위를 제한한다.

      * On Delete 옵션 :  참조 테이블의 튜플이 삭제되었을 떄 기본 테이블에 취해야

        할 사항을 지정한다. 옵션에는 No Action, Cascade, Set Null, Set Default가

        있다.

      * On Update 옵션 : 참조 테이블의 참조 속성 값이 변경되었을 떄 기본 테이블에

        취해야 할 사항을 지정한다. 옵션에는 No Action, Cascade, Set Null, Set

        Default가 있다.

       ex) Create Table 테이블명

(속성명 데이터_타입 [Not Null], ...

[, Primary key (기본키_속성명, ...)]

[, Unique (대체키_속성명, ...)]

[, Foreign Key (외래키_속성명, ...)

References 참조테이블(기본키_속성명, ...)]

[On delete 옵션]

[On update 옵션]

[, Constraint 제약조건명] [Check (조건식)]);

  1-4. 뷰

    - 하나 이상의 기본 테이블로 유도되는 이름을 갖는 가상 테이블이다.

    - Select문을 서브쿼리로 사용하여 Select문의 결과로서 뷰를 생성한다.

    - 서브쿼리인 Select문에는 Union, Order by 절을 사용할 수 없다.

    - 속성명을 기술하지 않으면 Select문의 속성명이 자동으로 사용된다.

       ex) Create View 뷰명[(속성명 [, 속성명, ...])]

      As Select문;

  1-5. 인덱스

    - 검색을 빠르게 하기 위해 만든 보조적인 데이터 도구이다.

    - Unique

      * 사용 : 중복 값이 없는 속성으로 인덱스를 생성

      * 생략 : 중복 값을 허용하는 속성으로 인덱스 생성

    - 정렬 여부 지정

      * Asc : 오름차순

      * Desc : 내림차숨

      * 생략 : 오름차순으로 정렬됨

    - Cluster : 지정된 키에 따라 튜플들을 그룹으로 지정하기 위해 사용한다.

       ex) Create [Unique] Index 인덱스명

On 테이블명(속성명 [Asc | Desc], ...)

[Cluster]

  1-6. 트리거

    - DB시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때 마다 자동적

      으로 수행되는 사용자 정의 프로시저다.

    - 동작시기 옵션 : 트리거가 실행될 때를 지정한다. 옵션에는 AFTER와 BEFORE가

      있다.

      * AFTER : 테이블이 변경된 후 트리거 실행

      * BEFORE : 테이블이 변경되기 전에 트리거 실행

    - 동작옵션 : 트리거가 실행되게 할 작업의 종류를 지정한다.

      * INSERT : 테이블에 새로운 레코드를 삽입할 때 트리거 실행

      * DELETE : 테이블의 레코드를 삭제할 때 트리거 실행

      * UPDATE :  테이블의 레코드를 수정할 때 트리거 실행

    - 테이블 선택 옵션 : 트리거가 적용될 테이블의 종류를 지정한다.

      * NEW : 새로 추가되거나 변경에 참여할 튜플들의 테이블에 트리거가 적용

      * OLD : 변경될 튜플들의 테이블에 트리거 적용

    - WHEN : 트리거가 실행되면서 지켜야할 조건을 지정한다.

    - 트리거 BODY : 트리거의 본문 코드를 입력하는 부분이다.

      * BEGIN으로 시작해서 END로 끝나는데 적어도 하나 이상의 SQL문이 있어야

        한다. 그렇지 않으면 오류가 발생한다.

      * 변수에 값을 치환할 때에는 예약어 SET를 사용한다.

       ex) Create Trigger 트리거명 [동작 시기 옵션][동작 옵션] On 테이블명

Referencing [New | Old] Table as 테이블명

for Each Row

When 조건식

트리거 Body

 

2. Alter문

  - 테이블에 대한 정의를 변경하는 명령문이다.

     ex) Alter Table 테이블명 Add 속성명 데이터_타입 [Default] '기본값]; : 새로운

         속성 추가

   Alter Table 테이블명 Alter 속성명 [Set Default '기본값']; : 속성의 기본 값을

   변경한다. 

   Alter Table 테이블명 Drop 속성명 [Cascade]; : 속성을 제거한다.

3. Drop문

  - 스키마, 도메인, 테이블, 뷰, 인덱스, 트리거를 제거하는 명령문이다.

  - Drop Constraint : 제약 조건을 제거한다.

  - Cascade : 제거할 개체를 참조하는 다른 모든 개체를 함께 제거한다.

  - Restrict : 다른 개체가 제거할 개체를 참조중일 경우 제거가 취소된다.

     ex) Drop [Constraint] [제거할 것] 제거할 것 이름  [Cascade | Restrict] ;

 

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

DCL(데이터 제어어)란?  (0) 2017.08.11
데이터 조작어(DML)이란?  (0) 2017.08.03
SQL이란?  (0) 2017.07.19
OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
블로그 이미지

꼴통보안인

,

SQL 정의

관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. SQL은 데이터베이스로부터 정보를 얻거나 갱신하기 위한 표준 대화식 프로그래밍 언어이다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다.

 

SQL 특징

- ANSI, ISO에서 선정한 관계 데이터베이스 표준 언어이다.

- 관계 대수와 관계 해석을 기초로 한 혼합 언어이다.

- 데이터 정의, 조작, 제어 기능을 모두 갖추고 있다.

- 비절차적 언어이며 대화식 질의어로 사용할 수 있다.

- 다른 프로그램 언어에 삽입된 형태로 사용 가능하다.

 

SQL 자료형

구분

타입명 

설명 

비트형

비트열

 BIT(n)

 고정 길이로 Bit 단위로 할당

 VARBIT(n)

 가변 길이로 Bit 단위로 할당 

문자형

문자열

 CHAR(n)

 고정 길이로 n개 할당

 VARCHAR(n)

 가변 길이로 n개 할당

수치형

정수형

 SMALLINT

 2바이트 고정 소수점 형식

 INT 또는 INTEGER

 4바이트 고정 소수점 형식

실수형

 FLOAT

 4바이트 부동 소수점 형식

 DOUBLE

 8바이트 부동 소수점 형식

10진형

 DEMICAL(i, j)

 i는 10진수의 개수, j는 소수점 이하 자리수

기타형

그래픽형

 GRAPHIC(n)

 그림 형태의 내용을 기억시킬 기억 장소 할당

논리형

 LOGICAL

 TRUE, FALSE를 기억시킬 기억 장소

날짜형

 DATE

 YY-MM-DD 형식

시간형

 TIME

 HH : MM : SS 형식

 

SQL 명령어(ddl, dml, dcl)

구분

명령어 

설명 

데이터 정의어

(DDL) 

 CREATE

 TABLE, INDEX, VIEW의 생성

 ALTER

 TABLE의 변경 

 DROP

 TABLE, INDEX, VIEW의 제거

데이터 조작어

(DML)

 SELECT

 DB의 데이터 검색

 UPDATE

 DB의 데이터 갱신

 INSERT

 DB의 데이터 삽입

 DELETE

 DB의 데이터 삭제

데이터 제어어

(DCL)

 GRANT

 사용자에게 권한 부여

 REVOKE

 사용자의 권한 해제

 COMMIT

 데이터를 DB에 저장하고 트랜잭션을 성공적으로 종료

 ROLLBACK

 데이터의 변경 사항을 취소하고 원상태로 복귀한 후

 트랜잭션 종료

 

SQL 기본 함수

종류

의미

사용예

 INITCAP

 문자열의 첫번째 문자만 대문자로 변환

 INITCAP(student) -> Student

 LOWER

 문자열 전체를 소문자로 변환

 LOWER(ABC) -> abc

 UPPER

 문자열 전체를 대문자로 변환

 UPPER(abc) -> ABC

 LENGTH

 문자열의 길이를 반환

 LENGTH('홍길동') -> 3 

 LENGTHB

 문자열의 바이트 수를 반환

 LENGTHB('홍길동') -> 6

 CONCAT

 두 문자열을 결합. ||와 동일

 CONCAT('sql', 'plus') -> sqlplus

 SUBSTR

 특정 문자 또는 문자열 일부를 추출

 SUBSTR('SQL*PLUS', 5, 4) -> PLUS

 INSTR

 특정 문자가 출현하는 첫번째 위치 반환

 INSTR('SQL*Plus', '*', 1, 1) -> 4

 LPAD

 오른쪽 정렬 후 왼쪽에 지정한 문자 삽입

 LPAD('sql', 5, '*') -> **sql

 RPAD

 왼쪽 정렬 후 오른쪽에 지정한 문자 삽입

 RPAD('sql', 5, '*') -> sql**

 LTRIM

 왼쪽의 지정 문자를 삭제

 LTRIM('*sql', '*') -> sql

 RTRIM

 오른쪽의 지정 문자를 삭제

 RTRIM('sql*', '*') -> sql

 REPLACE

 첫번째 인수를 두번째 인수로 바꿔주는 함수

 REPLACE('*ql', '*', 's') -> sql

 ROUND

 지정한 자리 이하에서 반올림

 ROUND(123.17, 1) -> 123.2

 TRUNC

 지정한 자리 이하에서 절삭(버림)

 TRUNC(123.17, 1) -> 123.1

 MOD(m, n)

 m을 n으로 나눈 나머지 값

 MOD(12, 10) -> 2

 CEIL

 지정한 값보다 큰 수 중에서 가장 작은 정수

 CEIL(123.17) -> 124

 FLOOR

 지정한 값보다 작은 수 중에서 가장 큰 정수

 FLOOR(123.17) -> 123

 SYSDATE

 시스템의 현재 날짜

 날짜

 MONTHS_BETWEEN

 날짜와 날짜 사이의 개월을 개산

 숫자

 ADD_MONTHS

 날짜에 개월을 더한 날짜 계산

 날짜

 NEXT_DAY

 날짜 후의 첫 월요일 날짜를 계산

 날짜

 LAST_DAY

 월의 마지막 날짜를 계산

 날짜

 ROUND

 날짜를 반올림

 날짜

 TRUNC

 날짜를 절삭(버림)

 날짜

 날짜 + 숫자

 날짜에 일수를 가산하여 날짜 계산

 날짜

 날짜 - 숫자

 날짜에 이루를 감산하여 날짜 계산

 날짜

 날짜 - 날짜 

 날짜와 날짜를 감산하여 일수 계산 

 일수 

 날짜 + 숫자 / 24 

 날짜에 식나을 가산하여 날짜 계산 

 날짜 

 

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

데이터 조작어(DML)이란?  (0) 2017.08.03
데이터 정의어(DDL)이란?  (0) 2017.07.27
OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
블로그 이미지

꼴통보안인

,

OWASP2017Top10-2017rc1.pdf

 

OWASP(The Open Web Application Security Project)는 오픈소스 웹 애플리케이션 보안 프로젝트이다. 주로 웹에 관한 정보노출, 악성 파일 및 스크립트, 보안 취약점 등을 연구하며, 10대 웹 애플리케이션의 취약점을 발표했다.

 

그동안 3년 주기(2004, 2007, 2010, 2013)로 나왔던 OWASP Top 10이 올해는 1년 더 늦춰서 2017로 나왔습니다. 아직 정식 한글 번역본은 나오지 않았으나 구글링하여 정식은 아니지만 번역이 되어있는 버전의 문서를 찾았습니다. 문서의 경우 정식 번역본이 나오게 되면 다시 업로드를 하도록 하겠습니다.

(출처-http://www.certit.kr/?p=1459)

 

1. 2013과 다른점

우선 2013의 A4(취약한 직접 개체 참조), A7(기능 수준의 접근통제 누락)이 2017에서 A4(취약한 접근제어)항목으로 통합되었습니다. 그리고 A7(공격 방어 취약점), A10(취약한 API)가 추가되었습니다.

 

정보보안기사, 산업기사에도 앞으로 시험문제로 출제될 것으로 예상되며, 취업시 면접에서도 꼭 물어보는 사항 중에 하나이기 때문에 숙지하시면 될 것 같습니다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

데이터 정의어(DDL)이란?  (0) 2017.07.27
SQL이란?  (0) 2017.07.19
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
HTTP 구조 정보  (0) 2017.06.19
블로그 이미지

꼴통보안인

,

쿠키(Cookie)란 인터넷 사용자가 어떠한 웹 사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일이다. 쿠키에 담김 정보는 인터넷 사용자가 같은 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀐다. 쿠키는 S/W가 아니다. 그래서 컴퓨터 내에서 프로그램처럼 실행될 수 없으며 바이러스를 옮길 수도, 악성코드를 설치할 수도 없다. 하지만 스파이웨어를 통해 유저의 브라우징 행동을 추적하는데에 사용될 수 있고, 누군가의 쿠키를 훔쳐서 해당 사용자의 웹 계정 접근권한을 획득할 수도 있다.

 

1. 서버와 클라이언트 간 쿠키의 흐름

 

 

2. 쿠키 종류

- Session Cookie : 보통 만료시간(Expire date) 설정하고 메모리에만 저장되며 브라우저 종료 시 쿠키를 삭제한다.

- Persistent Cookie : 장기간 유지되는 쿠키파일로 저장되어 브라우저 종료와 관계없이 사용한다.

- Secure Cookie : HTTPS에서만 사용, 쿠키 정보가 암호화되어 전송한다.

- Third-Party Cookie : 방문한 도메인과 다른 도메인의 쿠키, 광고 배너 등을 관리할 때 유입 경로를 추적하기 위해 사용한다.

 

3. 쿠키 단점

- 쿠키에 대한 정보를 매 헤더에 추가하여 보내기 때문에 상당한 트래픽을 발생시킨다.

- 결제 정보 등을 쿠키에 저장하였을 때 쿠키가 유출되면 보안에 대한 문제점도 발생할 수 있다.

 

4. 웹 브라우저 별 쿠키 경로

 

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

SQL이란?  (0) 2017.07.19
OWASP Top 10 2017  (0) 2017.07.10
Session이란?  (0) 2017.06.26
HTTP 구조 정보  (0) 2017.06.19
HTTP 개요  (0) 2017.06.12
블로그 이미지

꼴통보안인

,

세션(Session)이란 일정 시간동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장하는 것이다. 서버에 저장되기 때문에 사용자 정보가 노출되지 않는다.

 

1. 세션의 원리

- 세션 ID를 서버에서 클라이언트가 자시 웹사이트에 접속시 발급해준다.

- 서버에서 클라이언트로 발급해준 세션 ID를 쿠키를 사용해서 저장합니다.

- 클라이언트는 다시 접속시, 이 쿠리를 이용해서 세션 ID값을 전달합니다.

 

2. 세션의 장점

- 각 클라이언트에게 고유 ID를 부여합니다.

- 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스를 제공할 수 있습니다.

- 사용해봤던 정보들을 서버에 저장하기 때문에 보안성이 쿠키보다 우수합니다.

 

3. 세션의 단점

- 서버에 저장되기 때문에 서버에 처리를 요구하는 부하와 저장 공간을 필요로 한다.

 

4. HTTP 세션 동작 순서

- 클라이언트가 서버로 접속을 시도한다.

- 서버는 접근한 클라이언트의 request-header field인 쿠키를 확인해 클라이언트가 해당 session-id를 보내왔는지 확인한다.

- 만약 클라이언트로부터 발송된 session-id가 없다면, 서버는 session-id를 생성해 클라이언트에게 response-header field인 set cookie 값으로 session-id를 발행한다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
HTTP 구조 정보  (0) 2017.06.19
HTTP 개요  (0) 2017.06.12
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,

앞서 저번주에 HTTP에 대하여 간략하게 공부하였습니다. 오늘은 조금 더 들어가서 HTTP의 구조에 대해 알아보겠습니다.

 

HTTP헤더와 바디로 구성되어 있습니다.

헤더는 웹 서버 및 클라이언트 사이에서, 일반 문서 데이터 외에 추가적인 정보를 교환할 수 있도록 맨 앞에 삽입되는 요소입니다. 종류가 굉장히 다양합니다.

바디는 실제 HTTP의 내용이 들어가는 부분입니다. 일반 텍스트 형태 외에도 이진 데이터 형식도 가능합니다.

헤더와 바디는 개행(CR+LF)으로 구분을 합니다.

 

헤더는 요청 헤더(Request Header), 응답 헤더(Response Header), 일반 헤더(General Header), 엔티티 헤더(Entity Header) 총 4가지로 구성되어 있다.

 

1. 요청 헤더(Request Header)

요청 메시지 내에서만 나타나며 가장 양이 많습니다.

- From : 클라이언트 사용자 메일 주소

- Cookie : 서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보

- Referer : 바로 직전에 머물렀던 웹 링크 주소

- User-Agent : 클라이언트 S/W(브라우저) 명칭 및 버전 정보

- Accept : 클라이언트 자신이 이해 가능한 미디어 타입 및 우선순위

- Accept-Charset : 클라이언트 자신이 이해 가능한 문자 인코딩 방식

- Accept-Encoding : 클라이언트 자신이 이해 가능한 압축 방식

- Accept-Language : 클라이언트 자신이 이해 가능한 언어

- Host : 요청하는 호스트에 대한 호스트 명 및 포트 번호

- If-Modified-Since : 제시한 시간 이후에만 해당 리소스를 취득 요청

 

2. 응답 헤더(Response Header)

특정 유형의 HTTP 요청이나 특정 헤더를 수신했을때 나타납니다.

- Server : 서버 S/W 정보를 나타냄

- Set-Cookie : 서버 측에서 클라이언트에게 세션 쿠키 정보를 설정

- Expires : 지정된 일시까지 응답이 캐시로써 유효함

- Location : 리다이렉트 할때 이동 주소 혹은 새로 생성된 리소스 주소

- Allow : 해당 리소스가 지원 가능한 HTTP 메소드들을 나타냄

- Accept-Range : URI를 위한 요청 범위의 승인을 나타냄

- Age : 해당 문서의 나이를 나타냄

- ETag : 요청된 변종 엔티티 태그의 현재 값을 제공

- Proxy-authenticate : 현재 연결에 대해 프록시에 대한 적용할 수 있는 매개변수를 나타냄

 

3. 일반 헤더(General Header)

요청 및 응답 메시지 모두에서 사용 가능

- Date : 메시지를 생성한 날짜

- Connection : 클라이언트와 서버가 요청/응답 연결에 대한 옵션을 정하게 해줌

- Cache-Control : 메시지와 함께 캐시 지시자를 전달하기 위해 사용

- Pragma : 메시지와 함께 캐시 지시자를 전달하기 위해 사용(HTTP 1.1 버전에서는 사용 안함

- Trailer : 헤더 필드가 chunked transfer coding으로 인코딩 된 메시지의 trailer에서 표현된다는 것을 나타내는 필드

 

4. 엔티티 헤더(Entity Header)

메시지 내에 포함된 엔티티에 대한 구체적인 설명 등

- Content-Encoding : 개체 데이터의 압축 방식

- Content-Type : 개체에 포함되는 미디어 타입 정보

- Content-Language : 개체와 가장 잘 어울리는 언어

- Content-Length : 전달되는 메시지의 바이트 길이 또는 크기

 

HTTP 메소드는 저번주에 조금 봤기 때문에 HTTP 상태코드를 보겠습니다. HTTP 상태코드는 HTTP의 응답 메시지의 첫째 줄에 결과 응답 상태에서 서버가 코드 값을 알려주는 것입니다. 코드는 크게 1xx(처리중), 2xx(성공), 3xx(리다이렉트), 4xx(클라이언트 에러), 5xx(서버 에러) 5개로 분류되며 해당 분류 마다 굉장히 많은 종류가 있습니다.(-> IAMA 공식 HTTP Status Code Registry)

그 중에서 평소에도 흔히 볼 수있는 몇가지 상태코드만 확인해보겠습니다.

- 3xx (리다이렉트)

301 Move Permanently (영구 이동됨)

302 Found (일시 이동됨)

303 See Other (일시 이동된 사이트에 가서, GET 메소드로 리소스를 얻음)

304 Not Modified (리다이렉트와는 별 관련 없음)

307 Temperary Redirect (302와 의미적으로 같음)

- 4xx (클라이언트 에러)

400 Bad Request (요청 오류)

401 Unauthorized (권한 없음)

403 Forbidden (금지됨)

404 Not Found (발견되지 않음, 요청 리소스 없음)

- 5xx (서버 에러)

500 Internal Server Error (서버 내부 오류)

502 Bad Gateway (접속한 프록시 서버에서 내부 망의 웹서버로부터 잘못된 응답을 받음)

503 Service Unavailable (서비스 불가)

 

이상으로 HTTP 구조 정보에 대해 공부해보았습니다. 다음엔 쿠키와 세션에 관하여 공부해보겠습니다. 감사합니다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
HTTP 개요  (0) 2017.06.12
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,

HTTP(HyperText Transfer Protocol) 웹상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었다.

HTTP는 클라이언트 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.

 

HTTP 전송 방식

HTTP 버전에 따라 전송방식이 약간 다릅니다. 기본적으로는 DNS를 통하여 IP주소를 확인하고 3-Way Hnadshake 접속 이후 데이터를 송수신 합니다.

이때 1.0 버전은 세션을 연결한 이후 하나의 데이터를 받고 이후 세션을 종료 한 이후에 다시 세션을 맺고 다음 데이터를 받게 됩니다. 속도가 느린 것이 단점입니다.

 

1.1 버전은 세션을 한 번만 연결하면 keep-alive기능을 이용하여 지속적으로 데이터를 받아올 수 있습니다. 따라서 1.0에 비해 속도가 빠릅니다.

 

Pipelining 방식도 있습니다. 여러 개의 세션을 연결한 이후에 여러 개의 요청을 받아올수 있습니다.

 

HTTP 메소드

HTTP 메소드는 클라이언트가 서버에 요청하는 메시지에 대한 메소드로서 GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH로 총 9가지가 존재한다. 하지만 보안상의 이유로 GET, POST 2개 또는 OPTIONS 포함 3개만을 허용하는 경우가 대부분입니다..

GET - 요청 URI의 정보를 가져온다.

HEAD - 요청 URI의 헤더정보만 가져온다.

POST - 요청 URI의 리소스의 새로운 정보를 보낸다.

PUT - 요청 URI에 저장될 정보를 보낸다. (전체 저장)

DELETE - 요청 URI의 리소스를 삭제한다.

CONNECT - 프록시에 사용하기 위해 예약된 메소드이다.

OPTIONS - 요청 URI에서 사용할 수 있는 METHOD를 물어본다.

TRACE - 보낸 메시지를 다시 돌려보낸다(loopback)

PATCH - 요청 URI에 저장될 정보를 보낸다. (일부 저장)

 

HTTP Response code

클라이언트에서 HTTP Request 시 서버에서 클라이언트로 보내는 응답 코드입니다.

1XX (Information)  : 정보교환

2XX (Success)       : 성공

3XX (Redirection)  : 자료의 위치 바뀜

4XX (Client Error)  : 클라이언트 오류

5XX (Server Error)  : 서버 오류

 

이상 간단하게 개요를 통하여 HTTP에 대하여 알아보았습니다.

HTTP의 경우에는 좀 더 심도있게 공부해야할 필요성을 느껴서 HTTP Header와 메소드별 요청 정보, 그리고 수 많은 응답 코드에 대해 글을 쓰며 공부를 진행하도록 하겠습니다.

'Web Hacking > 이론적인 내용' 카테고리의 다른 글

OWASP Top 10 2017  (0) 2017.07.10
쿠키(Cookie)란?  (0) 2017.07.07
Session이란?  (0) 2017.06.26
HTTP 구조 정보  (0) 2017.06.19
Web 개요  (0) 2017.06.05
블로그 이미지

꼴통보안인

,