본문 바로가기
WEB_Security

18. SQL Injection 취약점

by Jnamelight 2017. 6. 5.

SQL Injection 취약점


보통 사이트에서 쿼리문을 인식하여 데이터를 찾아 낼때 크게 두가지 방식을 이용해서 쿼리문을 돌린다.

SELECT * FROM 'table name' WHERE no=글로벌 변수 ㅁㄴㅇㄴ

위와 같은 방식으로 쿼리문을 돌리는 것을 numeric injection  이라고 칭한다 . 보통 no 뒤에 GET 방식의 변수를 넘겨

쿼리문을 찾아서 정보를 보여준다 하지만 이런방식은 큰 취약점을 가질 수도 있다 .

가장 큰 취약점은 추가적인 쿼리문을 작성하여 임의로 공격자가 넘기면 쿼리문이 실행 된다는 점이다. 


이를 보완하는 방식이 string injection 이다. 


SELECT * FROM anews WHERE no='글로벌 변수 ㅁㄴㅇㄴ'

그럼 각각의 차이점을 한번 살펴보자.


1. numeric injection


  



위와같이 변수에다가 and 1=1 , and 1=2 를 임의로 넘겨서 참과 거짓을 내가 만든다.

참과 거짓을 넘겼는대도 실행이 된다면 numeric 일 가능성이 높다. 이유는 numeric 은 띄어쓰기후 뒤에 나오는 문자를

쿼리문으로 받아 들이기 때문에 위와같은 참 거짓의 문구를 실행 시킨다는 점이다.


2. string injection

반대로 string 은 ' ' 를 만들어 놨기 때문에 쿼리문이 실행되지 않는다. 단지 값은 나오지만 뒤의 추가적인 쿼리문은 불가능하다는 소리!

그럼 어떤식으로 취약점을 찾을수 있을까? 

-> 중간에 ' 표를 넣거다 " 를 넣어 강제로 쿼리문을 종료 시키는 방법이있다.

하지만 현재는 '," 등의 문구를 코딩과정에서 막기 때문에 우회하기 힘들다..


그럼 간단한 예제를 통해서 어떤식으로 취약점을 공격하는지 알아보자.



일단 간단하게 DB를 만들도록하자 . ( SQL 취약점이니깐)



대충 이런식으로 만듬.



그리고 numeric 으로 get변수를 넘기는 것으로 설정 ( 취약점 분석을 위해 )



완성된 사이트의 모습이다. 역시 글로벌 변수에 따라서 값이 달라지는 것을 확인 할 수있다.




위에서 말했듯이 한번 and 문을 넣어서 확인을 다시 해보자.



이제부터 공격기법인대 union 이라는 합집합 쿼리를 이용해서 공격을 할것이다.

이기법에는 몇가지 주의할 점이 있다.

1. union 에 이어지는 select문은 앞의 select문일때만 사용가능 

2. select 문의 컬럼수가 같아야함 -> 만약 모른다면?


order by 를 이용해서 하나씩 대입하여 오류가나면 컬럼수를 알수있다.

ex ) order by 1 == 값이나옴

      order by 2 == 값이나옴

       order by 3 == 값 안나옴

컬럼이 2개인 것을 확인


또는 union 의 특징을 이용

union select 1  == 값안나옴

union select 1,2  == 값안나옴

union select 1,2,3  == 값이나옴

컬럼 3개 확인


위와 같은 방식으로 컬럼의 수를 알아낸다.



또 중요한 것! mysql 같은 경우는 위와같이 information_schema 라는 DB에

모든 DB의 정보를 가지고 있다. 이를 이용

( 다른 DBMS 라면 각각의 특징을 공부 취약점을 분석 해야함 )



no=1 union select 1, table_name,table_schema form information_schema.columns // . 을이용하면 해당 디비 테이블로 사용

의 내용을 같이 넘겨 내가 원하는 결과를 실행! 모든 DB 내용을 확인 할 수 있다.



'WEB_Security' 카테고리의 다른 글

19. Blind Injection  (0) 2017.06.08
17. 파일 다운로드 취약점 ( PHP )  (0) 2017.06.02
16. 파일 업로드 취약점 ( 원격 쉘 )  (0) 2017.05.31
15. PHP 파일 업로드 취약점  (0) 2017.05.31
14. CSRF  (0) 2017.05.30

댓글