One_Blog

SQL INJECTION - SQL Query삽입 취약점 본문

웹해킹

SQL INJECTION - SQL Query삽입 취약점

0xOne 2022. 10. 23. 22:36
728x90

오늘은 정말 간단하게 SQL Injection 취약점에 대해서 알아보도록 하겠다.

 

웹애플리케이션의 대부분의 취약점은 사용자의 입력으로부터 발생한다.

 

그리고 웹 애플리케이션의 대부분은

입력란에 입력을 하는 사용자가 신뢰할 수 없는 사용자던, 

신뢰할 수 있는 사용자던 상관없이 입력을 받아들인다.

 

물론 입력값을 받아들이는 과정에서 대부분 필터링을 거치지만,

입력 자체는 자유롭게 할 수 있기에, 

SQL Injection이라는 고전 취약점이 아직도 활개를 칠 수 있다.

SQL Injection?

말 그대로 , SQL 삽입 취약점이다.

예를들어, 웹 페이지에서 사용자의 입력을 

SELECT * FROM members WHERE id='사용자 입력' and pass ='사용자 입력';

과 같은 식으로 받아들인다고 가정해보자.

물론 당연히 필터링도 없다는 전제를 한다.

 

일반적으로 사용자는,

id : guest

pw : guest1234 와 같은 평범한 입력값을 줄 것이다.

 

그러나, 여기서 악의적인 사용자는 매우 특이한 생김새의 입력을 주게 된다.

id : admin

pw : ' or '1'='1

입력이 이렇게 되면, 웹 애플리케이션은 이 입력을 어떻게 처리할까?;

 

SELECT * FROM members WHERE id='admin' and pass=''or'1'='1';

이렇게 되어버린다.

이러면 Query 는,

members 테이블에서 id가 admin 인 계정을 불러와버린다.

and pass=''or'1'='1'의 값이 참이기 때문이다.

그럼 공격자는, admin계정의 비밀번호를 몰라도 admin계정에 로그인할 수 있게된다.

이 얼마나 충격적인가.

만약 Instagram이나 Facebook과 같은 대형 사이트가 입력값 필터링과 같은 보호가 되고 있지 않다면,

당신 계정은 id만 드러나도 언제든 털릴 수 있는 것이다.

그렇다면 이러한 SQL Injection은 어떻게 막을 수 있을까?

그리고 그렇게 취약점이 막히면, 어떻게 우회할까?

 

해당 정보에 대해선 다음 블로그 글에서 알아보도록 하겠습니다.

급하게 쓰느라 글이 정리가 안되어 있네요,,내일은 좀 더 깔끔한 글 업로드 하겠습니다.

읽어주셔서 감사합니당.