[SQL injection] 테이블 알아내기

2019. 8. 14. 11:32네트워크/모의해킹

블라인드 sql인젝션은 대상 시스템의 db정보를 알 수 없을때 사용하는 공격입니다.

 

테이블이나 db를 모르는데 어떻게 공격하는지가 가장 궁금하실겁니다.

그걸 이제부터 알아보려고 합니다.

 

sql공격을 시도하기 전에 어떠한 DB를 사용하는지 유추하는 것이 가장 중요합니다.

실제 공격을 할때 sql문을 이용하는데 db마다 공격에 사용하는 sql문이 조금씩 다르기 때문입니다.

 

DB 주석 처리문
sql server, oracle --, /* */
mysql(mariadb) #(%23), --, /* */

 

DB 문자열 연결
sql server +(%2b)
mysql(mariadb) 공백, 탭, 개행 등
oracle ||

 

SQLinjection공격을 할때 가장 먼저 해당 취약점이 존재하는지 확인해야할 것입니다.

이때 가장 간단한 방법으로 '를 이용합니다.

'를 입력 후 오류메세지가 나온다면 이는 취약한 서버라고 확인할 수 있습니다.

또한 오류메세지를 통해 어떠한 DB를 사용하는지 알 수 있습니다.

 

이러한 상황을 가정하여 TABLE을 알아내고 개인정보를 빼내는 것이 우리의 목적입니다.

 

우선 대상 시스템에 어떠한 테이블이 있는지 확인해야 할것입니다.

이전에 우리는 오류메세지를 통해 mysql을 사용한다는 것을 알았습니다.

mysql의 스키마를 이용해 table의 정보를 순차적으로 알아가야 할것입니다.

mysql

mysql의 table에 대한 스키마 내용입니다.

우리가 알고자 하는것은 개인정보가 담긴 테이블입니다. 그 테이블은 기본 테이블이 아닌 임의적으로 생성한 테이블이라고 할 수 있습니다. table 타입이 어떤것들이 있는지 확인해 보겠습니다.

mysql

테이블을 운영자가 임의로 생성한 타입은 base table로 보여집니다. 그러면 해당 타입을 가진 테이블 이름을 한번 가져와 보겠습니다.

mysql

여러 테이블 이름중 user가 눈에 띕니다. user라는 이름의 테이블을 확인해보겠습니다. 다만 우리는 아직 해당 테이블의 column명을 알 수 없는 상태입니다. 다행히 우리는 이를 확인할 수 있는 방법이 있습니다.

mysql

지금까지 해서 단계별로 테이블의 정보를 확인할 수 있습니다. 이와 같이 알아내는 방법은 대상 서버의 권한이 DBA권한이어야 한다는 특징이 있습니다. 이렇게 과도한 권한을 주는 경우는 보기 드물지만 테이블을 알아내는 방법 중 하나인 것만은 맞습니다.

 

이번글은 MYSQL을 기반으로 만들어졌으며, 다른 DB의 경우 테이블을 알아내는 명령들이 다르다는 것을 인지하시면 됩니다.

 

다음의 URL을 통해 database의 injection cheat sheet를 확인할 수 있습니다.

http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet

'네트워크 > 모의해킹' 카테고리의 다른 글

[webhacking.kr] 챌린지4번  (0) 2019.10.23
PHP기준 파일 업로드 필터링 우회  (0) 2019.08.14
[SQL Injection] procedure analyze()  (0) 2019.06.12