SQL Injection이란?
웹 클라이언트의 반환 메시지를 이용하여 불법 인증 및 정보를 유출하는 공격. 웹 응용 프로그램에 강제로 구조화 조회 언어(SQL) 구문을 삽입하여 내부 데이터베이스(DB) 서버의 데이터를 유출 및 변조하고 관리자 인증을 우회할 수도 있다. 이 공격은 MS SQL 서버뿐만 아니라 모든 관계형 데이터베이스 관리 시스템(RDBMS)에서 가능하다.
[네이버 지식백과] SQL 주입 공격 [SQL injection, -注入攻擊] (IT용어사전, 한국정보통신기술협회)
방법1. 논리 기호 사용


로그인 페이지에서 아이디와 패스워드를 입력받고 입력받은 내용을 위와 같은 sql문에 삽입하여 실행한다.
만약 아이디로 user1, 패스워드로 password1을 입력했다고 가정을 해본다면 아래와 같은 sql문이 완성된다.
Select * From Users Where id='user1' and pw='password1';
그런데 논리 기호가 들어간 구문을 사용하면 아이디, 패스워드의 일치여부와 관계없이 로그인 인증을 우회할 수 있다.
ID값에 ' or 'a'='a'# 라는 값을 넣으면 패스워드에 아무런 값을 넣지 않아도 아래와 같은 sql문이 완성된다.
Select * From Users Where id='' or 'a'='a'# and pw='';
위와 같은 sql문이 실행되면 '#' 이후의 모든 내용들은 주석처리되어 무시된다.
또한 or 'a'='a' 라는 구문으로 인해 아이디에 어떤 값이 들어가도 상관없이 User 테이블에 있는 모든 튜플들이 출력되면서
로그인 우회가 가능해진다. 아래는 실제 테이블에 구문을 적용시켜본 예이다.

방법2. Union 사용
합집합을 나타내는 Union 집합 연산자는 컬럼 이름은 달라도 상관없지만, 컬럼 타입과 컬럼순서, 개수는 같아야 한다.
(단, 컬럼 이름이 다를 경우 처음 입력한 Select 절의 컬럼 이름을 따른다.)
따라서 이를 이용하면 아까와 같이 로그인 우회를 시도할 수 있다. ' union select 'testID','testPW' # 를 입력하면
Select * From Users Where id='' union select 'testID','testPW' # and pw='';

로 위처럼 로그인 우회에 성공하는 것을 확인할 수 있다.
'웹 모의해킹 > SQL Injection' 카테고리의 다른 글
Blind Based SQL Injection (0) | 2022.11.09 |
---|---|
ERROR Based SQL Injection (0) | 2022.11.09 |
UNION Based SQL Injection (0) | 2022.11.06 |
로그인 Case별 SQL Injection (0) | 2022.11.05 |
우분투에서 MySQL 사용법 (0) | 2022.11.01 |
SQL Injection이란?
웹 클라이언트의 반환 메시지를 이용하여 불법 인증 및 정보를 유출하는 공격. 웹 응용 프로그램에 강제로 구조화 조회 언어(SQL) 구문을 삽입하여 내부 데이터베이스(DB) 서버의 데이터를 유출 및 변조하고 관리자 인증을 우회할 수도 있다. 이 공격은 MS SQL 서버뿐만 아니라 모든 관계형 데이터베이스 관리 시스템(RDBMS)에서 가능하다.
[네이버 지식백과] SQL 주입 공격 [SQL injection, -注入攻擊] (IT용어사전, 한국정보통신기술협회)
방법1. 논리 기호 사용


로그인 페이지에서 아이디와 패스워드를 입력받고 입력받은 내용을 위와 같은 sql문에 삽입하여 실행한다.
만약 아이디로 user1, 패스워드로 password1을 입력했다고 가정을 해본다면 아래와 같은 sql문이 완성된다.
Select * From Users Where id='user1' and pw='password1';
그런데 논리 기호가 들어간 구문을 사용하면 아이디, 패스워드의 일치여부와 관계없이 로그인 인증을 우회할 수 있다.
ID값에 ' or 'a'='a'# 라는 값을 넣으면 패스워드에 아무런 값을 넣지 않아도 아래와 같은 sql문이 완성된다.
Select * From Users Where id='' or 'a'='a'# and pw='';
위와 같은 sql문이 실행되면 '#' 이후의 모든 내용들은 주석처리되어 무시된다.
또한 or 'a'='a' 라는 구문으로 인해 아이디에 어떤 값이 들어가도 상관없이 User 테이블에 있는 모든 튜플들이 출력되면서
로그인 우회가 가능해진다. 아래는 실제 테이블에 구문을 적용시켜본 예이다.

방법2. Union 사용
합집합을 나타내는 Union 집합 연산자는 컬럼 이름은 달라도 상관없지만, 컬럼 타입과 컬럼순서, 개수는 같아야 한다.
(단, 컬럼 이름이 다를 경우 처음 입력한 Select 절의 컬럼 이름을 따른다.)
따라서 이를 이용하면 아까와 같이 로그인 우회를 시도할 수 있다. ' union select 'testID','testPW' # 를 입력하면
Select * From Users Where id='' union select 'testID','testPW' # and pw='';

로 위처럼 로그인 우회에 성공하는 것을 확인할 수 있다.
'웹 모의해킹 > SQL Injection' 카테고리의 다른 글
Blind Based SQL Injection (0) | 2022.11.09 |
---|---|
ERROR Based SQL Injection (0) | 2022.11.09 |
UNION Based SQL Injection (0) | 2022.11.06 |
로그인 Case별 SQL Injection (0) | 2022.11.05 |
우분투에서 MySQL 사용법 (0) | 2022.11.01 |