정보보안공부

[Root-Me] SQL injection - Numeric 본문

Web/RootMe

[Root-Me] SQL injection - Numeric

Steady_sp 2020. 2. 18. 10:32

 

먼저 문제를 풀기위해 에러를 통해 DB를 확인한 결과 평소 다뤄보지 않은 Sqlite를 사용하고 있음을 확인했다. sqlite는 모든 테이블 조회시 sqlite_master 테이블을 사용하며 컬럼명 조회 시 sql 컬럼의 데이터 안에 사용되는 컬럼명이 적혀있음을 검색으로 확인했다. 그 이후에 참 거짓을 이용한 Blind SQL Injection 구문을 작성해보았다.

 

[참 / 거짓 판별]

- 참 거짓을 통해 SQL Injection 가능성 여부 판별

참인 경우 응답내 La mise en 이 조회됨을 확인

 

거짓인 경우 응답내 La mise en 이 조회되지 않음을 확인

 

[테이블 길이]

- 참 거짓을 통해 테이블 길이 조회

- 2개의 테이블에 대한 길이 확인

첫번째 테이블 길이는 4

 

두번째 테이블 길이는 5

 

[테이블 확인]

- 조회된 테이블 길이를 참고하여 파이썬으로 코드 작성 후 테이블 조회

파이썬 코드를 작성하여 2개의 테이블 명 확인

 

[컬럼 길이 확인]

- 참 거짓을 통해 컬럼 길이 조회

- 싱글쿼터가 막혀있으므로 char()함수를 이용해 테이블명 작성

컬럼의 길이가 62임을 확인

 

[컬럼 확인]

- 조회된 테이블 길이를 참고하여 파이썬으로 코드 작성 후 컬럼 조회

 users 테이블의 sql 컬럼 확인

 

[데이터 확인]

- 조회한 테이블, 컬럼명을 통해 파이썬으로 코드 작성 후 테이블 내 모든 데이터 조회

users 테이블의 username, password 컬럼의 데이터 확인

 

#테이블 조회

select tbl_name from sqlite_master

 

#컬럼 조회

select sql from sqlite_master where sql like '%테이블이름%'

 

#관련 함수

length, substr, unicode, char, ||(%7c%7c), limit

'Web > RootMe' 카테고리의 다른 글

[Root-Me] SQL injection - Filter bypass  (0) 2020.02.18
[Root-Me] SQL injection - Blind  (0) 2020.02.18
[Root-Me] SQL injection - String  (0) 2020.02.18
[Root-Me] PHP Filters  (0) 2020.02.13
[Root-Me] Insecure Code Management  (0) 2020.02.13
Comments