Web hacking/기법

SQL injection_(1) 공격 개요

jin_li 2023. 4. 18. 01:00

 

SQL injection

데이터베이스에 전송되는 SQL 쿼리문을 조작하여
데이터를 변조하거나 허가되지 않은 정보에 접근하는 공격

 

진짜 광기... 위키 읽다가 인상깊어서 들고 왔다. 출처 https://xkcd.com/327/

 
 
SQL 인젝션 공격의 기본적인 두 가지 유형을 살펴보자.
이제부터 소개할 모든 그림의 출처는 [화이트 해커를 위한 8가지 웹 해킹의 기술]이다.
 
 
 
 
 
 
 
1. WHERE문 우회 공격
 
 
다음과 같이 ID=1 을 입력하면
서버에서 SELECT name, email FROM users WHERE ID='1' 이라는 쿼리문이 실행된다고 하자.

이에 데이터베이스에서 ID=1인 사용자정보를 웹api로 전달하고, 서버는 이 사용자정보를 클라이언트로 전달한다.
 
 
 
 
 
만약 해커가 ID=1' or '1'='1 을 입력한다고 하자.
그러면 SELECT name, email FROM users WHERE ID='1' or '1'='1' 이 실행되는데,

이 쿼리문을 해석하면 ID=1이거나 1=1이면 모든 사용자의 이름과 email 정보를 출력하라는 뜻이 된다.
1=1은 항상 참이니 사용자들의 이름과 이메일 정보가 모두 리턴된다.
 
 
 
 
 
 
 
2. UNION문 이용한 공격
 
아까와 같은 쿼리문에서, 해커가 1' union select name,pw from users# 을 입력하면
SELECT name, email FROM users WHERE ID='1' union select name,pw from users#' 가 실행된다.

union 은 합집합을 뜻한다. 따라서 위의 변조된 쿼리문은 두 개의 select문을 포함하게 된다.
#은 SQL에서 주석 담당이다. 따라서 # 뒤에 또 있을지도 모르는 쿼리문은 주석처리 하고 있다.
 
즉, ID가 1인 사용자 정보 뿐만 아니라 모든 사용자의 이름 및 이메일 정보도 리턴하게 된다.
이렇듯 union을 이용하면 데이터도 빼낼 수 있고 다른 테이블에도 접근할 수 있다.

'Web hacking > 기법' 카테고리의 다른 글

SQL injection_(3) column 개수 알아내기, UNION 공격  (0) 2023.04.18
SQL injection_(2) WHERE문 우회  (0) 2023.04.18
파일 인클루전  (0) 2023.04.03
CSRF(2)  (0) 2023.03.23
CSRF(1)  (0) 2023.03.23