SQL Injection 이란?
코드 인젝션의 한 방법으로 클라이언트의 입력값을 조작하여 서버의 데이터베이스를 공격할 수 있는 공격 방식
이러한 SQL injection 공격방식에는 여러가지가 있는데 대표적인 방식으로 주석과 논리 연산자를 사용하는 방법이다.
먼저 알아두어야 할 것은 SQL의 논리연산자 방식에선 AND연산자를 OR연산자보다 우선순위로 채택하고 있다. 때문에 AND연산자 계산 후 OR연산자 계산으로 가는 것이 마땅하다.
예를 들어 다음과 같은 로그인 방식이 있다 한다.
SELECT user FROM user_table WHERE id='{uid}' AND password'{upw}';
사용자가 uid가 admin인 계정에 침투할려고 할 때 다음과 같이 입력할 수 있다.
1. uid : admin , upw : ' OR '1' ='1
SELECT user FROM user_table WHERE id='admin' AND password=' ' OR '1' = '1';
조건을 차근차근 나눠보자.
먼저 AND연산자 우선이니 id='admin'이라는 조건은 db에 해당되어 있으니 True로 나올 것이고 password =' '이라는 조건은 db에 해당되지 않으니 false 즉, or연산자 전의 조건은 false가 나온다. 그리고 '1'='1'이라는 조건은 당연히 true이므로
false OR true 라는 식이 나오게 되고 or연산자는 하나만 참이어도 true가 나오니 결과는 true가 되므로 admin계정의 정보를 갖고 올 수 있게된다.
2. uid : admin' or '1, upw : 'dummy'
SELECT user FROM user_table WHERE id='admin' or '1' AND password='dummy'
'1'이라는 조건은 True이고 password='dummy'라는 조건은 false이기에 or뒤의 연산은 false가 된다.
그리고 id='admin' 조건은 db에 포함되어 있어 true이기 때문에 true OR false라는 연산이 나오므로 이 조건절 역시 admin 계정의 정보를 가져올 수 있다.
여기서 자세히 볼 점은 id='admin'이라는 식은 무조건 true이고, or 연산자 and연산자 보다 뒤에 계산한다는 점을 고려하면 or 구문 뒤를 볼 필요도 없이 무조건 true라는 것이다.
1번 조건에서도 똑같이 or 뒤의 조건이 true이기에 앞의 조건 상관없이 true가 나오게 된다.
3. uid : admin' --, upw : dummy
SELECT user FROM user_table WHERE id='admin'-- ' AND password='dummy'
주석을 사용한 젤 쉬운 방법이다.
id='admin' 뒤를 주석 처리 했기 때문에 뒤를 볼 필요도 없이 id가 admin인 계정의 정보를 가져올 수 있게 된다.
'Web Hacking > Information' 카테고리의 다른 글
칼리 리눅스를 활용한 실전 모의해킹 (0) | 2023.11.20 |
---|---|
SQL INJECTION 예방책 - prepared statement (0) | 2023.10.28 |
sql injection 주석 사용 주의점 (0) | 2023.10.20 |
bit연산 이용한 Blind sql injection 기술 (0) | 2023.10.16 |
php에서 셸 스크립트 언어 사용하기 (0) | 2023.10.10 |