SQL Injection은 SQL(DB언어) 구문 사이에 끼워넣는 것으로

이를 통해 DB 데이터를 추출하거나, [인증을 우회]할 수 있다.

 


 

# 로그인페이지

 

예시 로직 : 아이디와 비밀번호가 같으면 로그인 성공

 

예시 구문 : select * from member where id= '_입력한ID_' and pass= '_입력한PASS_'

사용자가 입력한 값을 해당 위치에 넣고, DB 있는지 물어보는 방식으로 동작한다.

 

위 값이 존재하면 로그인 성공, 없으면 실패

 

 


 

예시 구문이 오류가 나지 않으려면,

 

우리가 입력한 아이디 비밀번호를 어떻게 입력해야 해당 구문이 오류가 나지 않는지 생각해야한다.

 

구분하여 보자면 다음과 같다.

 

이미 입력된 바꿀 수 없는 부분 : select * from member where id= '

입력할 수 있는 부분 : ___________

이미 입력된 바꿀 수 없는 부분 : ' and pass = '

입력할 수 있는 부분 : ___________

이미 입력된 바꿀 수 없는 부분 : '

 

 

로그인 할 수 있는 계정이 doldol / dol1234 라고 했을 때

비밀번호를 모른채로 로그인 하려면 다음과 같이 입력하면 된다.

 

select * from member where id= 'doldol' or '1' = '1' # ~~~~ 뒤는 주석처리

 

doldol 이라는 아이디가 DB에 있고 (참)

1=1도 참 이기 때문에, 결과가 있는 것으로 회신된다. > 고로 로그인 성공

 

 


# AND와 OR

 

AND 조건은 OR 조건보다 우선한다.

 

예를 들어,

select * from member where id= 'doldollll' or '1'='1' and pass= 'dol1234'

 

에서 

'1'='1' and pass= 'dol1234'

DB pass 중에 dol1234가 있고, '1'='1'도 참이기 때문에 참

(AND는 둘 다 참이어야 참)

 

그 후에 

 

id= 'doldollll' or (참)

or 조건이기 때문에 DB id에 해당하는 아이디가 없더라도 결과는 참으로 나온다.

(OR은 둘 중 하나만 참이어도 참)

 


 

phpmyadmin의 SQL에서 연습할 수 있다.

 

내가 상상한 게 되는지 안 되는지

 

 


 

# 인증 우회

 

인증 우회에는 다음과 같은 방법들이 있다.

 

1. SQL Injection

2. 쿠키 변조

3. 직접 접근 시도

 

 

SQL Injection

: 위에서 사용한 인젝션을 이용하여 우회하는 방법

 

쿠키 변조

: Burp 를 통해 쿠키를 변조한다.

 

직접 접근 시도

: 가끔 DB에서 제공해주는 파일 이름 (웹페이지 주소)으로 추정하여 접근을 시도해 볼 수 있다.

 

 

 

 

+ Recent posts