오늘은 Blind SQL Injection 공격에 대해서 알아 볼 것이다.
우선 전에 알아보았던 SQL Injection에 대해서 간단히 설명하자면 SQL 문으로 공격해서 한번에 정보를 얻어낼 수 있지만,
Blind SQL Injection은 SQL 문으로 공격함으로써 서버에서 참과 거짓의 반응으로 정보를 얻어오는 기술이다.
예를 들어 이런 SQL을 보낸다
SELECT ascii(substring(table_name, 1, 1)) from infromation_schema.tables where table_schema=database() limit 1,1;
이 SQL은 테이블 이름을 알아낼 때 쓰인다.
아스키 숫자로 테이블 이름을 한글자씩 얻어와서 조합하는 것이다.
한마디로 노가다가 조금 필요하다는 뜻이다.
하지만 SQL Injection과는 다르게 테이블 명을 몰라도 칼럼 이름, 심지어는 칼럼 안에 있는 내용까지 얻어와 원하는 정보를 얻어낼 수 있다.
그렇다면 몇가지 SQL문을 더 설명하고 끝내보자.
테이블 이름 = admin_area, 칼럼 이름 = id 라고 가정 할 것이다.
1. DB에 있는 테이블 중 첫번째 테이블의 이름 길이를 얻어온다.
SELECT length(table_name) from information_schema.tables where table_schema=database() limit 0,1;
2. admin_area에 있는 칼럼의 갯수를 얻어온다.
SELECT count(column_name) from information_schema.columns where table_name = "admin_area";
3. admin_area의 id 칼럼에 있는 값에 첫번째 요소의 첫글자를 얻어온다.
SELECT ascii(substring(id, 1, 1)) from admin_area;
위와 같이 여러 공격 SQL문들의 종류가 있다.
이러한 공격들이 있다는 걸 알게되니 SQL문을 잘배워둬야 하겠다는 생각이 들기에 다음에는 SQL에 대해서도 정리해봐야겠다.
'오늘의 공부 > 보안' 카테고리의 다른 글
[보안] SQL Injection (0) | 2022.03.19 |
---|