WEB1

SQL injection(3) - SQL injection의 동작원리

지난 시간에는 SQL의 기본 문법에 대해 알아보았습니다. 

이번 시간에는 sql injection의 동작 원리에 대해 알아보도록 하겠습니다. 

 

우리에게 이번에도 user라는 이름의 다음과 같은 테이블이 있다고 생각해 봅시다

+----+-----------+---------------+
| id | nickname  | password      |
+----+-----------+---------------+
|  0 | admin     | admin1234     |
|  1 | guest1    | guest1234    |
|  2 | guest2    | guest1234    |
|  3 | guest3    | guest1234    |
|  4 | guest4    | guest1234    |
|  5 | guest5    | guest1234    |
+----+-----------+---------------+

우리가 다음과 같은 테이블을 활용하여 nickname이 guest2인 user의 password를 뽑아오는 쿼리를 구성한다고 생각하면 다음과 같은 쿼리를 사용할 수 있습니다.

SELECT password FROM user WEHRE nickname='guest2';

그리고 우리가 만약 이러한 테이블을 활용하여 Where 구문을 무조건 참으로 만들 수 있다면  user의 password도 뽑아올 수 있습니다.                                                                                                           

이와 유사한 예를 들어 query 문이 select id from user where id='' and pw='' 이라고 합시다. 

get 방식에서는 url뒤에 ?를 달고 id= and pw= 의 방식으로 넣게됩니다.

인증을 우회하기 위해서 id에는 무조건 참이 되는 문장을 넣고 pw는 주석처리를 합니다.

url에서 주석처리를 하는 방법으로는 %23, -- -, ;(널바이트) 등이 있습니다.

id에 무조건 참이 되는 문장을 넣기 위해서 or 연산을 사용합니다.

Ex) ?id = ' || '1 = 1' %23

위의 예시대로 넣으면 query문은 select id from user id='' || '1 = 1' #'  and pw=''이 됩니다.

or 연산을 사용하였기에 1=1같이 무조건 참인 문장을 넣으면 id는 참이 되고 pw는 주석처리가 되었습니다.

이상으로 인증우회 기법을 사용한 SQL injection의 동작원리에 대하여 알아보았습니다.

댓글

댓글 본문
버전 관리
2019-2020STEALTH
현재 버전
선택 버전
graphittie 자세히 보기