X3XOR CTF 후기

CTF 후기 2017. 7. 31. 15:35

SecurityPlus와 보안 프로젝트의 연합 오픈 카톡방(?)에 어떤 분이 해당 대회를 공유해줘서 우연하게 출전하게 되었다. 올해 대회에서 제대로된 문제를 하나도 못풀며 좌절해있던 터라 걱정이 앞섰다. 팀원과 모여서 풀때는 역시나 안풀리는구나라는 생각에 또다시 좌절을 할뻔했으나, 다 흩어지고 각자 집에서 단톡방에 정보 공유 하면서 풀다보니 어느덧 네문제나 풀게 되었다. 많은 참가자들이 풀었기에 배점이 낮은 문제들이였으나, 풀었다는 것에 자신감을 얻을 수 있는 대회였다고 생각한다. 안드로이드 문제를 거의 다 풀었으나 마지막에 막혀서 못푼게 가장 아쉬웠으나 앞으로 더 열심히 공부하여 본선 진출 및 입상까지 바라볼 수 있도록 노력해야겠다는 다짐을 했다.

'CTF 후기' 카테고리의 다른 글

2017 Christmas CTF 후기  (0) 2018.01.02
2017 HDCON 예선 후기  (0) 2017.09.18
Secuinside CTF 2017 후기  (0) 2017.07.03
블로그 이미지

꼴통보안인

,

데이터 정의어(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
블로그 이미지

꼴통보안인

,