[웹해킹] SQL 인젝션 공격 실습 - UNION 공격
- IT/웹해킹
- 2020. 12. 14.
데이터베이스 정보를 알아내보자. 깃허브에 올려져 있는 SQL 구문을 보면 데이터베이스 명 조회에 관련된 구문이 있다. 이 구문을 사용한다.
information_schema라는 데이터베이스의 schemata라는 테이블에서 정보를 가져오는데 mysql에서는 information_schema라는 데이터베이스에서 데이터베이스 정보나 테이블, 칼럼 정보를 관리하고 있다. schema_name을 가져오면 데이터베이스 명을 조회할 수 있다.
user ID에 위의 구문을 넣고 실행한다.
모든 데이터베이스의 이름들이 출력되었다. dvwa, information_schema, mysql 등의 데이터베이스 명이 있음을 알 수 있다. dvwa 데이터베이스가 우리가 관심을 가질만한 DB이다. select로 schema_name을 한 것이 First name으로 표시되었고 1로 넣은 값이 그대로 Surname에 출력되었다. 이 first name과 surname은 웹페이지에서 항상 리턴되는 단순한 문자열이니 신경쓰지 않아도 된다.
이번에는 dvwa 데이터베이스에 있는 테이블들의 이름들을 출력해 보겠다.
1' union select table_schema, table_name from information_schema.tables where table_schema = 'dvwa' # 이 구문을 사용한다.
guestbook이라는 테이블과 users라는 테이블이 있다. users 테이블이 왠지 사용자 관련 정보가 있을것 같다. 이 users 테이블에 있는 칼럼의 이름들을 알아보자. 아래와 같은 users 테이블 칼럼 조회 구문을 넣는다.
1' union select table_name, column_name from information_schema.columns where table_schema = 'dvwa' and table_name = 'users'#
user id, first name, last name 등의 칼럼들이 나온다. 여기서 제일 개인정보 같은 느낌의 칼럼은 password이다.
이제 이 password를 가져온다. User ID에 1'union select user,password from users# 을 입력한다.
user 정보가 First name에 출력되었고 password 정보가 surname에 출력되었다. 그런데 password가 평문이 아닌 해시값의 형태로 저장되어있다. 보안을 위해 웹 애플리케이션은 이렇게 패스워드를 쉽게 알지 못하는 값으로 저장해 두어야 한다. 그 이유는 데이터베이스를 탈취 당하더라도 암호화 된 해시값으로 저장되어 있으면 해커가 패스워드를 쉽게 복원하지 못하기 때문이다. 다만 여기서 dvwa에서는 보안에 취약한 md5라는 해시값을 사용하고 있기 때문에 이 경우는 해시값을 쉽게 복원할 수 있다. 구글에서 바로 이 해시값을 검색해서 찾아내보자. 해시 값을 복사하여 구글에 입력한다.
이와 같이 union을 이용하여 데이터베이스의 정보와 패스워드 정보를 알아내는 실습을 해보았는데 이 방법을 이용하면 쿼리문만 잘 만들면 우리가 원하는 정보를 모두 얻어낼 수 있다.
'IT > 웹해킹' 카테고리의 다른 글
[웹해킹] SQL 인젝션 공격 실습 - SQL MAP (0) | 2020.12.16 |
---|---|
[웹해킹] SQL 인젝션 공격 실습 - 블라인드 SQL 인젝션 (0) | 2020.12.16 |
[웹해킹] SQL 인젝션 공격 실습 - 칼럼 갯수 알아내기 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 실습 - WHERE 구문 우회 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 이란? (0) | 2020.05.31 |