[웹해킹] SQL 인젝션 공격 실습 - 칼럼 갯수 알아내기
- IT/웹해킹
- 2020. 12. 14.
이번에는 UNION 키워드를 이용한 공격을 실습 해보자. UNION을 이용하면 데이터베이스의 모든 정보를 알아낼 수 있다. UNION은 합집합 이라고 했었는데 UNION을 사용하기 위해서는 원래 쿼리문이 조회하는 select문에 칼럼 개수와 union 뒤의 select문에서 요청하는 칼럼 개수가 같아야 한다. 그렇지 않으면 에러가 발생하기 때문에 먼저 원래의 쿼리문이 몇 개의 칼럼을 리턴하는지 알아내야 한다.
DVWA의 SQL Injection 페이지에 가서 UserID에 1'union select 1# 을 입력해보자.
이 select 뒤에 1이라는 상수 값을 주게 되면 그것을 그대로 출력 할 수 있다. 꼭 1 뿐만 아니라 2, 3 혹은 null 이라는 값을 줄 수 있다. submit을 누른다.
실행을 해보았더니 칼럼수가 맞지 않는다는 에러가 발생한다.
이번에는 칼럼을 두 개 입력해 보겠다. 1'union select 1,1# 을 입력하자.
이번에는 에러가 발생하지 않고 원래 ID가 1인 사용자에 대한 정보와 우리가 입력했던 1,1 이 합집합으로 같이 출력 되었다.
만약 3 개를 넣으면 어떻게 될까? 1'union select 1,1,1# 을 입력한다.
위와 같이 에러가 다시 발생한다.
이로 우리는 이전 select 구문의 칼럼이 두 개가 사용 되었다는 것을 알 수 있다. 이렇게 칼럼 두 개를 요청해서 sql 인젝션 공격을 수 행 할 수 있다.
칼럼 개수는 다른 방법으로도 알아 낼 수 있는데 order by 구문을 이용하는 것이다. order by는 어떤 칼럼을 기준으로 정렬할 때 사용하는 키워드 이다. 칼럼의 개수 보다 큰 값을 이용하면 정렬을 할 수 없기 때문에 에러를 발생 시킨다.
user ID에 1' order by 1# 을 입력해보자.
이번에는 1' order by 2#을 입력해보자.
이번에는 1' order by 3#을 입력해보자.
이 말은 세 번째 칼럼으로 정렬을 할 때 에러가 발생했기 때문에 칼럼의 개수는 세 개보다 작은 두 개가 된다는 뜻이다.
union을 사용해서 칼럼 개수를 알아 낼 때와 order by를 사용해서 알아 낼 때의 차이를 알겠는가?
union으로 개수를 찾을 때는 정확한 값을 찾을 때 까지 일일이 다 대입해봐야 하지만 order by를 이용하면 입력한 값보다 큰 지 작은 지를 알 수가 있기 때문에 더 빠르게 개수를 찾을 수 있다.
'IT > 웹해킹' 카테고리의 다른 글
[웹해킹] SQL 인젝션 공격 실습 - 블라인드 SQL 인젝션 (0) | 2020.12.16 |
---|---|
[웹해킹] SQL 인젝션 공격 실습 - UNION 공격 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 실습 - WHERE 구문 우회 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 이란? (0) | 2020.05.31 |
[웹해킹] CAPTCHA 공격 실습 - High 단계 (0) | 2020.05.31 |