반응형
SQL Injection
- Union, Error Based, Blind SQL Injection
- 예제와 시나리오 JSP, ORACLE 기준
- 의도하지 않는 쿼리 삽입 하여 악의적인 SQL 문을 실행시키는 공격
- Oracle ⇒ user_tab, all_table 테이블 정보 칼럼 정보
SQL (Structured Query Language)
- 데이터베이스 관리용 언어
- DDL, DCL, DML로 구분
DDL (데이터 정의어)
- 스키마,, 테이블, 인덱스등 정의, 변경, 삭제할 때 사용
- CREATE, ALTER, DROP…
DCL (데이터 제어어)
- 데이터 대한 접근 권한 부여 등 관리 목적으로 사용
- COMMIT, ROLLBACK, GRANT, REVOKE
DML 데이터 조작어
- DB에 저장된 데이터를 실질적으로 처리하는데 사용
- SELECT, INSERT, UPDATE, DELETE
- UPDATE,DELETE 쿼르는 데이터 변경, 삭제할 수 있으므로 주의
Oracle DB
- dual - 공백의 테이블
CREATE user c##test identiied by 1234;
GRANT connect, resource, dba tp c## test;
# 왼쪽 사이드바 test 우클릭 -> 속성
# 사용자 이름 c##test, 비번 1234
# 테스트 -> 성공 -> 접속
CREATE TABLE 테이블 이름
(
컬럼이름 자료형
);
#ctrl + enter -> 한줄
#f5 -> 전체 스크립트 실행
#SELECT 조회할 칼럼 FROM 테이블;
SELECT name,age from friends;
INSERT 문법
INSERT INTO 테이블명
(
컬럼1,
컬럼2,
컬럼3
) #생략가능
VALUES
(
값1, ('홍길동')
값2, (18)
값3 ('서울')
);
#where 조건 (=if), 1=1 -> 항상 참, 모든 데이터 출력, and = 여러개
#and - 양쪽이 참일 때 참
#or - 한쪽이 참이여도 참
SELECT * from friends where age > 10;
#UPDATE 테이블명 SET 컬럼 = 값, 컬럼2 = 값, WHERE 조건;
UPDATE friends set addr = '서울' WHERE age>22;
#정렬
select * from friends order by age desc; #내림차순
select * from friends order by age; #오름차순
select * from friends order by addr asc desc; #내림차순
select * from friends order by addr, age desc;
시스템 테이블
- DBMS에서 DB관리 목적 제공
- 사용자 정보, 테이블 정보, 시스템 정보
- 공격 시 공격 테이블 확인을 위해 사용
SELECT * from all_tables where owner ='C##TEST';
SELECT * from user_tables;
SELECT * from all_tab_columns where table_name = 'FRIENDS';
집계 함수
- 특정 칼럼의 데이터 개수, 합, 최대값, 최소값 등 산술적인 연산이 필요한경우 함수를 사용하여 결과 출력
SELECT count(*) from friends where age > 22;
SELECT count(*) from all_tab_columns where table_name = 'FRIENDS';
#length(숫자) <- 숫자의 갯수
SELECT length(name) from friends;
SELECT length(age) from friends;
#()-> 서브 쿼리
select 컬럼 from (Select 컬럼 from 테이블 where 조건1) where 조건2
select name from (Select * from friends where age>20) where addr = '서울';
서브 쿼리
- 문장 하부 절에 쿼리를 사용 , Inner Query 라고함
- 연산자 오른쪽 위치, 괄호로 묶음
Create table member (ID varchar2(10), PASSWORD varchar(20));
INSERT INTO MEMBER(id,password) values('홍길동','1234');
INSERT INTO MEMBER(id,password) values('admin','root');
#if 입력한 id,pw 가지고 db 서치 -> 결과가 있으면 로그인
#else: 로그인 실패;
#결과
SELECT COUNT(*) from member where ID = "입력한 ID" AND PASSWORD = '입력한 PW';
#로그인 조건
if #결과 = 참:
로그인
else:
실패
SELECT COUNT(*) from member where ID = '홍길동' AND PASSWORD = '1234';
#인증 우회
SELECT * from member where ID = 'aaa' AND PASSWORD = 'aaa' or 1=1;
Stored Procedure
- 저장 프로시저, 쿼리를 하나의 함수처럼 실행하기 위한 쿼리 집합
UNION SELECT
- 컬럼 수 추출 - null 갯수로 컬럼수 파악
- 데이터형을 추출 → 해당 컬럼이 문자형인지 숫자형인지
SELECT * from friends union select 1, null, null from dual
- 이제 원하는 데이터를 추출하기 위한 시스템 테이블의 정보 추출
- ex) admin의 password 빼오기
- 시스템 테이블
- user_tables → 테이블 이름
- all_tab_columns → 컬럼명 확인 가능 한 곳
반응형
'WEB' 카테고리의 다른 글
XSS 의 대응방안 (1) | 2023.08.03 |
---|---|
XSS (4) | 2023.05.15 |