본문 바로가기
about Security/웹보안과 해킹

[웹해킹] # SQL 인젝션

by saniii 2020. 10. 3.

SQL인젝션은 웹 공격 중에 가장 잘 알려져 있는 공격으로 

가장 심각한 리스크의 공격으로 선정된 인젝션 리스크의 대표적인 공격이다.

 

SQL인젝션 : 공격자가 데이터베이스에 전송되는 SQL쿼리문을 조작하여

데이터를 변조하거나 허가되지 않은 정보에 접근.

 

# WHERE 구문 우회 

-  WHERE구문 : WHERE 이하의 구문을 만족하면 쿼리문을 실행한다.

ex)
SELECT first_name, last_name FROM users WHERE ID='1'
//id=1 이 참이면 first_name과 last_name의 목록을 가져와라.

이런 WHERE문의 성격을 이용하여 정보를 캐낸다.

- WHERE 구문 우회 : WHERE의 조건이 항상 참이 되도록 퀴리를 조작하여 무조건 정보를 출력하도록 한다.

입력값 : 1' or '1'='1

//ex) WHERE 구문 우회
SELECT first_name, last_name FROM users WHERE ID='1' or '1'='1'
//'1'='1'이 항상 만족하므로 정보를 출력한다. 

이때 쿼리문은 입력값에 자동으로 ' '를 씌우므로

공격자는 입력을 1' or '1'='1 을 입력하여

' '로 인한 에러가 나지 않도록 한다.

 

# UNION 공격

- UNION : 합집합으로 만약 구문1 UNION 구문2 이면 구문1의 실행결과와 구문2의 실행결과가 모두 출력된다.

입력값 : 1' UNION SELECT first_name, last_name FROM users#

//ex) UNION 구문 우회
SELECT first_name, last_name FROM users WHERE ID='1' UNION SELECT first_name, last_name FROM users#'

UNION을 경계로 구문이 2개 존재한다.

따라서 앞의 구문이 WHERE을 만족하지 못하여 정보가 출력되지 않는다 하더라도 
뒤의 구문은 조건이 없기 때문에 뒤의 구문에서 원하는 정보를 출력한다.

 

마지막의 #는 자바나 C등에서 주석처리할 때 쓰는 // 와 같은 역할을 하므로

입력값의 마지막에 자동으로 붙는 ' 를 주석처리하여 

에러가 발생하지 않도록 한다.

 


# 실습 #

 

to be continue...............

오늘 밤(12:00) 안에 올라옴......

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

실습 정리는 내일 8pm전까지 편집됩니다...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글