-
SQL Injection 종류와 발생 원리 - 2Web - Security/Injection 2023. 5. 8. 23:40
Error Based SQL Injection
Error Based SQL Injection이란 특정한 입력값을 제공하여 데이터베이스 시스템에 비정상적인 SQL 쿼리를 실행시키는 것
비정상적인 SQL 쿼리는 데이터베이스 시스템에서 오류를 발생시키므로, 악의적인 사용자는 이 오류 메시지를 활용하여 데이터베이스 시스템에 대한 정보를 추출할 수 있다
위 질의문에 '(작은따옴표) 만 입력 후 전송 버튼을 눌러보았다
질의문의 결과는 위와같이 에러메시지가 고객의 화면에 나타나게 된다
이 에러메시지가 보임으로써 악의적인 이용자는 이곳에서는 MariaDB라는 서버를 사용하고 있음을 알 수 있고 아이디 부분을 작은따옴표가 아닌 큰따옴표를 이용하여 질의문이 작성되어 있다는 정보를 알 수 있게 된다
그리고 에러 메시지의 마지막에는 1번째 줄의 '(작은따옴표) 부분이 잘못되었다고 알려주면서 문법오류라고 알려준다
여기서 더 나아가 내가 작성한 질의문에 대한 오류역시 볼 수 있게 되고 에러메시지는 내가 작성한 악의적인 질의문에 대하여 어느 부분이 잘못되었는지 친절히 알려주게 된다Blind SQL Injection
Error-based SQL Injection과 달리, 데이터베이스 시스템에서 오류를 발생시키지 않으며, 결과를 출력하지 않는 SQL 쿼리를 실행시키는 것이다
악의적인 사용자는 Boolean 논리 연산자를 활용하여, SQL 쿼리의 결과가 참인지 거짓인지를 확인하는 방법을 사용한다
이러한 SQL 이 있다고 가정하고 목표로 하는 사이트에 실제로 위와 같은 아이디와 비밀번호로 가입했다고 가정하자
아이디와 비밀번호를 duli_123, duli_321로 입력하면 정상적으로 로그인이 될 것이다
악의적인 사용자가 아이디를 입력하는 곳에 duli_123을 입력하는것이 아니라 duli_123" OR "1"="1 을 입력했다고 해보자
그럼 위와 같은 SQL 질의문이 완성이 되고 위 식은 참이기에 duli_123이라는 계정으로 로그인이 될 것이다
이번에는 아이디를 입력하는 곳에 duli_123" AND "1"="2 를 입력하고 전송을 해 보자
조건 1 user_id = duli_123
조건 2 1과 2가 같아야 한다
조건 3 password = duli_321위 조건 1,2,3 모두 만족을 해야 참이 되어 참인 결과가 전송이 되는데, 조건2는 거짓이므로 거짓인 응답이 돌아오게 된다
위 경우에서 참인경우에는 로그인에 성공했다고 볼 수 있고 거짓인 경우에는 로그인에 실패했다고 볼 수 있다
Time based SQL Injection
Time-based SQL Injection은 Blind SQL Injection과 유사한 방식으로 작동하지만, 데이터베이스 시스템에 대한 정보를 추출할 때 시간 지연을 이용하여 정보를 추출하는 방법이다
위 질의문을 보자
아이디 입력란에 duli_123" OR SLEEP(3);-- 를 입력하여 전송한 결과이다
위 질의문이 참이라면 3초뒤에 응답값이 올 것이고 거짓이라면 3초 이내에 바로 거짓이라는 응답값이 도착하게 될 것이다
위와 같은 방법으로 서버가 MySQL인지, MariaDB인지, Oracle 인지 정보를 얻을 수 있다
( 데이터베이스 정보 말고 다른 정보도 얻을 수 있다 )Command Injection
보통 사용자가 입력한 값에 대한 검증과 처리를 수행하고, 이를 이용하여 시스템 명령어를 동적으로 생성한다
그러나, 이때 적절한 입력 유효성 검사가 수행되지 않으면, 악의적인 사용자가 입력한 값에 명령어 인자를 추가하여 시스템 명령어를 조작할 수 있게 된다; rm -rf *
만약 악의적인 사용자가 위와 같은 명령어를 입력하였다고 해보자
ls ; rm -rf *
이 입력은 웹 어플리케이션에서 실행되는 시스템 명령어를 위와 같이 변환하게 된다
위 명령어의 의미는 "ls" 명령어를 실행한 후, 현재 디렉토리에서 모든 파일을 삭제하라는 의미이다
Command Injection 공격을 방지하기 위해서, 개발자는 입력 값에 대한 적절한 검증과 처리를 수행해야 하며, 시스템 명령어를 실행할 때는 인자 값에 대한 검증과 처리를 수행해야 한다
728x90'Web - Security > Injection' 카테고리의 다른 글
SQL Injection 종류와 발생 원리 - 1 (0) 2023.05.08