Study
SQL Injection (GET/Search) : low 본문
·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 |