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의 동작원리에 대하여 알아보았습니다.

댓글

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