CS 지식/○ Database

(3) SQL Injection

코르시카 2021. 7. 2. 00:29

1. SQL Injection이란?

1-1) 정의

해커에 의해 쿼리문이 서버영역까지 그대로 전달되어 비정상적인 명령을 실행시키는 공격 기법

 

1-2) 공격 방법

(a) 인증 우회

참조

6-1)에 Authentication 이후 Authorized되어야 하는데, Unauthorized임에도 Authorized 하게 하는 방식
: https://korshika.tistory.com/158?category=974498 

 

(13) HTTP - HTTP 상태코드

1. 상태코드란? 1-1) 정의 HTTP 응답을 서버에서 받았을 때 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 > 모든 응답 번호 3xx : 요청을 완료하려면 추가 행동이 필요 4xx : 클라이

korshika.tistory.com


※ EX) 서버가 사용중인 인증정보 조회 쿼리문

SQL = "Select * From Users"

       + " Where UserID = '"+ UserID +"' And Password = '" + Password + "'"

 

> 일반적인 인증 방법
정상적으로 id와 pswd를 입력 후 db에서 query로 조회하는 경우

SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; 

 

> 비정상적 SQL Injection

비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력

-- 1)
1234; DELETE * FROM USER WHERE ID = "1"; // 모든 db 내용 삭제

-- 2)
-- 입력값
UserID: admin'--
Password: 아무거나
-- 실행쿼리문
Select * From Users Where UserID = 'admin'-- And Password = '아무거나'
// admin이라는 계정이 있을 시 pswd를 몰라도 통과

--3)
-- 입력값
UserID: test
Password: 1234' or '1'='1
-- 실행쿼리문
Select * From Users Where UserID = 'test' And Password='1234' or '1'='1'
// test 계정이 없어도 true처리되어 통과

 

(b) 데이터 노출

시스템에서 발생하는 에러 메세지를 고의로 노출시켜 서버의 구조를 유추하여 추후 해킹에 활용하는 방식

> 보통 이런 에러 메세지 / 출력은 개발자 버그 수정 때 사용하는 것, 개발 이후 배포시 안나타나도록 해야 함

 

 

2. 방어 방법

2-1) input 검사

input 값을 받을 때 특수문자 여부 검사하여

로그인전 검증로직을 통해 미리 설정한 특수문자들이 들어왔을 때 요청을 막음

 

2-2) 에러 메세지 감추기

SQL 서버 오류메세지를 감추기 위해

view를 활용하여 원본 테이블에 접근하는 권한을 세팅하고, 일반 사용자는 view의 권한으로만 접근하여
에러 메세지를 볼 수 없도록 함

 

2-3) Pre-parse-statement 활용하기

Preparsestatement를 활용하면, 특수문자를 자동으로 escaping 해줌
// 특수문자를 그대로 문자로 받는 형식
이를 활용해 서버 측에서 필터링을 통해 공격을 방어한다

 


참조

https://gyoogle.dev/blog/computer-science/data-base/SQL%20Injection.html

 

SQL Injection | 👨🏻‍💻 Tech Interview

SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 공격 방법 1) 인증 우회 보통 로그인을 할 때, 아이디와 비밀번호를 input 창

gyoogle.dev

https://m.mkexdev.net/427

 

[웹보안] SQL Injection

SQL 인젝션은, 웹 보안 하면 가장 대중적으로 언급되는 공격 기법입니다. XSS와 함께 쌍두마차급으로 유명한 기법이지요. 꽤 오래전에, 이 공격에 대한 글을 한번 다룬적이 있는데요. 벌써 12년도

m.mkexdev.net

 

반응형