Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study

SQL Injection (GET/Search) : low 본문

웹 보안/Beebox

SQL Injection (GET/Search) : low

^_^? 2020. 11. 30. 17:41

·bWAPP v2.2

 

● sql 인젝션 공격: ' or 1=1 -- 과 같은 쿼리를 넣었을 때

                         성공시 공격자가 원하는 데이터들을 얻어낼 수 있는 공격

 

 

● GET방식: 요청된 자원의 URL query문자열에 인자 값을 보내는 용도로 사용됨

                요청된 URL을 누구나 볼 수 있어 보안상 문제가 존재하므로 중요하지 않은 데이터 요청시 사용

 

 

실습)

첫번째로 ' 를 입력해서 sql인젝션 취약점이 있는지 확인한다.

위와 같은 에러메시지를 통해

MySQL을 사용하고 있다는 것과 sql인젝션 취약점이 존재한다는 것을 알 수 있다.

 

그렇다면 ' or 1=1 --를 넣었을 때 결과가 출력되는지 확인해보자

결과가 출력되지 않아서 확인해보니

 

주석을 잘못 입력한 것이 문제였다.

확인해보니 MySQL에서 주석을 작성하는 방법은 다음과 같은데

1. # 한 줄 주석

2. -- 한 줄 주석

3. /* 두 줄

   이상의

   주석 */

 

위의 두 번째 방법에서 두 개 이상의 하이픈(-) 뒤에는 반드시 한 칸의 공백이 존재해야만 주석으로 정상 인식된다.

공백을 입력안해줘서 문제였던 것이다.

(자세한 내용은 아래를 참고하면 된다. www.tcpschool.com/mysql/mysql_basic_syntax)

 

 

올바르게 입력해주면

결과가 출력되고

 

이번에는 UNION구문을 이용해 sql인젝션 공격을 해보았다.

column개수가 맞지 않는다고 나온다

column개수를 하나씩 늘려가면서 입력해본다

 

column개수가 7개라는것을 알 수 있고

출력되는 열이 2, 3, 5, 4 인 것을 알 수 있다. 

 

그러면 information_schema를 이용하여 어떤 테이블들이 있는지 살펴보자

 

· information_schema란?

INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges. Other terms that are sometimes used for this information are data dictionary and system catalog.

(dev.mysql.com/doc/refman/8.0/en/information-schema.html 참고)

 

· information_schema.tables : 데이터베이스 내의 모든 테이블에 대한 정보를 얻을 수 있다.

Column name   Description 
TABLE_NAME The name of the table

 

결과로 매우 많은 table들이 나왔다.

 

그 중에서도 users라는 table이 user들의 정보들이 들어있을 것으로 추측하고

union구문을 통해 어떤 column들이 있는지 확인해보자

 

· information_schema.columns : 데이터베이스 내의 모든 열에 대한 정보를 얻을 수 있다.

Column name    Description 
COLUMN_NAME  The name of the column

 

' union select 1, column_name, 2, 3, 4, 5, 6 from information_schema.columns where table_name='users' -- 

 

users 테이블의 열에는 id, login, password 등이 있는 것을 알 수 있고

 

이제 데이터들을 뽑아보자

' union select 1, login, email, id, password, 6, 7 from users -- 

 

 

위와 같이 사용자 정보를 볼 수 있으므로 매우 취약한 상태라고 할 수 있다.

 

실습 순서를 요약해보면 다음과 같다

 

1. ' 를 삽입해 에러가 발생하는지 확인

2. 원본 테이블의 열의 개수 추측

3. information_schema.tables를 이용하여 테이블 이름 출력 

4. information_schema.columns를 이용하여 테이블의 컬럼 이름 출력

5. 테이블의 데이터 추출

'웹 보안 > Beebox' 카테고리의 다른 글

SQL Injection (GET/Select) : low  (0) 2020.12.04
SQL Injection (POST/Search) : low  (0) 2020.12.04
SQL Injection (GET/Search) : high  (0) 2020.12.02
SQL Injection (GET/Search) : medium  (0) 2020.12.02
Beebox 다운로드  (0) 2020.11.30