공격기법

SQL injection이란??

joseph94 2020. 8. 13. 20:26
반응형

 

 

 

SQL 인젝션이란?
웹어플리케이션 취약점인 OWASP Top 10의 첫번째 항목으로 SQL을 이용한 공격입니다.

정상적인 sql 쿼리를 악의적인 목적으로 변조,사용하여 불법로그인, DB데이터열람 등 수행하여 비정상적으로 DB에 접근을 시도하는 공격기법입니다.

 

 

공격 방식
SQL 인젝션은 공격하는 방식에따라 이름이 약간씩 다릅니다.
7가지 정도의 방식이있는데 여기선 From SQL 인젝션 공격방식의 대한 설명을 해보도록 하겠습니다.

 

Form sql 인젝션입니다

보통 우리가 sql인젝션이라고 하면 Form 인젝션을 이야기하곤 합니다.

 

From sql injection 이란?

 

- HTML Form 기반의 어플리케이션 취약점이 있는경우 쿼리문의 조건을 공격자가 임의로 조작하여 비정상적인 인증을 하는 기법입니다

- 쿼리문의 조건절이 항상 True 가 되도록 쿼리문을 조작합니다.

- 공격이 성공하게되면 해당 DB테이블의 맨 첫번째 행에 해당하는 사용자 권한을 얻게됩니다.

 

 

 

그럼 간단한 예제를 통해 어떻게 공격이 되는지 알아보도록 하겠습니다.

 

 

 

HTML 폼 기반의 ID와 PW를 입력 할 수 있는 로그인페이지입니다.

취약한 웹사이트

 

첫번째로 해당 웹사이트가 SQL 인젝션 공격에 취약한지 점검을 해봐야합니다.

 

ID입력란에 DB에 사용되는 쿼리문 특수문자 ('또는" 등)을 입력했을때 에러메시지가 발생하는지를 확인해야합니다.

에러메시지가 발생한다면 DB서버까지 쿼리문이 전달되어 메시지가 출력됬다고 볼수있기떄문입니다.

(허나 대부분 메시지가 안뜹니다)

 

 

 

두번째로 해당 웹사이트가 취약한 사이트라고 생각되면 본격적으로 sql쿼리문을 이용해 로그인을 해 봅니다.

 

쿼리 삽입

공격자는 쿼리문을 입력하여 sql injection공격을 수행합니다

 

진행 플로우는 

취약한 웹페이지의 웹소스가 DB에 질의를하여 데이터를 받아오는 형식입니다

 

출처 안랩블로그

 

 

그럼 왜 위와같이 ' or 1=1 # 을쓰느냐??

이유는 간단합니다.

 

 

가령 ID joseph

       pw 1111   인 사용자가 로그인을 하고자한다면

일반적인 로그인 과정은 웹소스에서 DB테이블에 있는지 질의를 합니다

 

"ID는 joseph이고 pw는 1111인 사용자가 해당 테이블에 있니??"

 

DB는 참,거짓으로 웹서버에게 응답합니다

 

"응 얘 있어"

 

이때 웹에서는 DB의 응답을 받고 로그인을 허용해줍니다 . 

 

여기서 sql의 질의하는 쿼리문이라고 가정한다면

"select id,passwd from user where id = '$id' and passwd = '$passwd'";

 

id = '' or 1 = 1 # and passwd ~~~

 

이렇게 sql 조건값을 줌으로 id가 ''이거나 1=1(참)이면 and뒤에는 주석으로 

무조건 참으로 만드는 입력값을 삽입하는것입니다.

 

※ sql 마다 주석처리하는것이 다릅니다. 가령 mysql 은 #으로 주석을처리하고 mssql은 --으로 주석을 처리합니다

위에 #이라고 준 이유는 DBMS가 mysql이기에 #(주석)을 입력했습니다.

 

 

 

 

이렇게 입력을 하면

 

해당테이블의 맨 첫번째 행의 데이터로 로그인이 됩니다.

 

 

개발자는 특수문자를 일반문자로 치환해 서버에서 처리하도록 이스케이프처리를 해줌으로써 sql 인젝션공격을 방지할수있다

 

 

 

 

 

★☆피드백은 언제나 환영입니다.☆★

 

반응형