SQL injection을 사용하여 취약한 사이트에서 데이터베이스의 정보를 유추하여 로그인을 우회하는 실습을 진행한다.
SQL injection
데이터베이스를 조작하는 SQL문을 사용할 때 사용자의 입력에 대해 적절한 필터링이 되어있지 않아 발생하는 취약점이다. 공격자는 비정상적인 동작을 하도록 SQL문을 주입하여 내부 정보를 유출, 변조, 삭제 등의 악의적인 행동이 가능하다.
SQL injection 공격을 위한 3대 조건
- 주석 : 사용자가 입력한 값 뒤에 오는 문장을 무력화 시키기 위해서 사용한다.
주석 문자 | 대상 DB |
-- | Oracle, MS-SQL |
# | MySQL, MariaDB |
/* */ | 대다수 DB의 여러 줄 주석 |
- 논리적인 참 : SQL문은 조건에 의해 알맞은 데이터를 가져오기 때문에 참, 거짓을 이용해 원하는 데이터를 가져오거나 유추할 수 있다.
- 중첩된 SQL문 : 한 문장에서 여러 SQL문을 동작시킨다. 아래는 기본 입력값을 이용해 다른 데이터를 접근하는 방법의 예이다.
/* 주어진 sql 문 */
select 학생이름 from 학년 where 성별 = ' 입력값 ';
/* 입력값을 통해 업데이트문 실행*/
select 학생이름 form 학년 where 성별 = ' '; update 학년 set 성적 = 100;-- ';
/* 입력값을 통해 다른 데이터 접근 */
select 학생이름 form 학년 where 성별 = ' ' UNION select 선생이름 from 학교;-- ';
우리는 간단한 사이트에서 SQL injection을 이용해 로그인을 성공시킬 것이다.
[ 주의 ] 실제 서비스 중인 웹 사이트에 사용 시 법적 처벌을 받을 수 있으니 실습 서버를 직접 구현하도록 한다.
실습사이트 로그인 bypass
위는 실습용 사이트이다. 우리는 로그인을 하기 위한 정보를 아무것도 알지 못한다.
해당 사이트에 아무 아이디 비밀번호를 입력하면 다음과 같은 경고문구가 나온다.
로그인 페이지에서는 대부분 ID값과 PW값을 내부 DB와 비교하여 일치하는 지 확인 후 인증이 완료된다.
그러므로 우리는 로그인에서 사용되는 SQL문을 유추해볼 수 있다.
select id, pw from [테이블이름] where id=' 입력값 ' and pw=' 입력값 ';
해당 sql문이 참이 되어야 로그인에 성공한다는 것이다.
id에 ' or 1=1;-- 를 입력해보자.
놀랍게도 로그인이 되었다. 어떻게 로그인이 된 것인지 SQL문을 분석해보자.
select id, pw from [테이블이름] where id=' 'or 1=1;-- ' and pw=' ';
id에 넣은 값은 where절을 참으로 만들고 뒤따라오는 pw값을 주석으로 무시하기 때문에 테이블의 모든 id, pw를 불러오게 된다.
그렇기에 로그인이 성공하며 불러온 내역 중 가장 위에 위치한 superman이라는 계정에 로그인이 된 것이다.
우리는 로그인이 sql injection에 취약하다는 사실을 알았다. 그렇다면 다른 계정에도 로그인할 수 있을까?
자유 게시판을 확인하면 webmaster라는 등록자가 글을 작성하였다. 이를 통해 webmaster라는 계정이 존재하는 것을 유추하며 이 계정에 접속해보자.
select id, pw from [테이블이름] where id=' webmaster';-- ' and pw=' ';
아이디가 webmaster인 것만을 불러오기 위해서 where이 id만 판단하도록 뒷부분을 주석으로 무력화하였다.
id에 webmaster';-- 를 입력해보자.
성공적으로 webmaster라는 계정으로 접속하였다.
우리는 SQL injection 취약점을 이용하여 로그인을 우회하고 원하는 계정에 접속을 진행해보았다.
'보안 이론 > 웹 보안' 카테고리의 다른 글
SQL Injection - 다른 DB 데이터 접근 (0) | 2022.09.14 |
---|---|
SQL Injection - 오류 페이지를 이용한 공격 (0) | 2022.09.14 |
HTTP 헤더와 오류코드 (0) | 2022.09.14 |
(2021) OWASP TOP 10에 대해서 (0) | 2022.09.13 |
Web Shell 업로드 우회 실습 (0) | 2022.09.13 |