보안

[웹모의해킹] 4. SQL Injection

Mara7 2021. 6. 10.
반응형
LIST

1. SQL Injection

1. 정의

악의적인 사용자가 보안상의 취약점을 이용하여 임의의 SQL문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위

 

2. 종류

1. Error Based SQL Injection

논리적 오류를 발생시킬 수 있는 SQL 쿼리를 요청하여 오류 발생시 표시되는 정보를 기반으로 데이터베이스 및 쿼리 구조 등의 정보를 획득할 수 있는 공격

 

2. Union Based SQL Injection

2개 이상의 SQL쿼리에 요청하여 결과를 합칠 수 있는 Union SQL 연산자를 이용한 공격이며 원래 요청에 한개의 추가 쿼리를 삽입하여 정보를 얻어낼 수 있음.

3. Time Based SQL Injection

SQL 쿼리 결과를 특정 시간 만큼 지연시키는 방법을 이용한 공격

 

4. Stored Injection

데이터베이스의 Stored Procedure을 이용하여 일련의 쿼리를 실행하는 공격 방법

 

5. Boolean Based Blind SQL Injection

데이터베이스의 참, 거짓 구문을 이용한 공격방법으로 SQL쿼리 결과에 따른 웹 서버의 참과 거짓의 반응을 이용해 공격을 수행.

 

3. 실습

소스코드 캡처

user_id 입력 값이 빨간 네모박스 안에 입력됨.

특정 사용자 확인

User ID에 1을 입력하면 admin 이 나옴 => 1이라는 ID가 존재함을 확인.

전체 사용자 확인

전체 사용자 확인을 위해, ' or'1'='1 "을 통해 우회함. => user_id가 공란(' ')이거나, 1인 사용자의 first_name과 surname이 출력됨. => 사용자의 아이디가 출력

데이터베이스 버전 및 호스트 명 확인

데이터베이스 버전 및 호스트 명 확인을 위하여 union 구문 사용

컬럼 기준 오름차순 정렬

3번째 컬럼을 기준으로 정렬하라는 표시이며, 결과로 3번째 칼럼이 없다고 나옴.

컬럼기준 오름차순 기준

order by 뒤의 값을 2로 변경하여 검색한 결과, 컬럼의 개수가 2개 라는 것을 확인 할 수 있음.

시스템 사용자 확인

system_user(), user() 함수로 시스템 사용자 확인.

현재 데이터 베이스명 확인

database()함수를 사용하여 현재 데이터 베이스 명을 확인 할 수 있음.

mysql 내 존재하는 데이터베이스 확인

Information_schema를 통해 mysql 내 존재하는 데이터베이스 확인.

user id와 password 확인

Information Schema를 통한 user id와 password 확인

 

 

 

반응형
LIST

댓글