SQL injection - UNION1

2020. 12. 23. 20:59문제연습/bs_Training

반응형

 

본 티스토리 블로그는 PC에 최적화되어 있습니다.

모바일 유저분들은 아래 네이버 블로그를 이용해 주세요.

 

SQL injection - UNION

본 네이버 블로그는 모바일에 최적화되어 있습니다.PC 유저분들은 아래 티스토리 블로그를 이용해 주세요...

blog.naver.com

 

Lab: SQL injection UNION attack, determining the number of columns returned by the query

 

1. 문제 내용

간단히 요약하자면 product 카테고리 필터에 인젝션 취약점이 존재하니 union 구문을 활용하여 null 값의 추가적인 데이터를 출력하도록 하라고 합니다.

 

1.1 접속화면

접속 url :  https://ac081f141f27d137805c5eff007a0025.web-security-academy.net/

저번 문제와 마찬가지로 특별해 보이는 부분은 없으므로 union 구문을 이용해 공격을 시도해 보도록 하겠습니다.

 

 

2. Attack

사전 지식)

- union -

집합 연산구문중 하나로서 두 개 이상의 select 문을 결합하는데 사용됩니다.

단, 이 구문을 사용 시 아래 두 가지 조건을 충족해야 합니다.

 

1) 반환되는 칼럼 수가 일치해야 한다.

2) 반환되는 데이터의 형식이 서로 동일해야 한다.

(단, null로 쿼리 할 경우 데이터 형식을 맞추지 않아도 됩니다.)

 

 

2.1 Conjecture

사용자가 카테고리(예를 들면 Gifts)를 누르게 될 경우 다음과 같이 쿼리가 전송된다고 가정하겠습니다.

“select product where category = 'Gifts' ... ;"

아마 이런 형태의 쿼리문을 작성해 날릴 것으로 추정되는데, 여기서 union을 사용하여 null data를 출력하려면 다음과 같이 삽입 해야 합니다.

 

“select product where category = 'Gifts‘ union select null;--'” ... ;"

이렇게 될 경우 where ... Gifts 뒤에 붙는 추가적인 조건문들도 모두 주석 처리할 수 있습니다.

 

흠, 그런데 문제가 발생한 듯합니다.

 

union 구문의 제약사항을 모두 충족하지 못해서 문법적 오류가 발생했습니다.

칼럼의 개수를 확인하기 위해 다음과 같이 입력하였더니 정상적인 출력을 하였습니다.

category=Gifts’ order by 3--

null의 개수를 조절하거나 order by 구문을 이용해 칼럼 수를 조절하면서 시도하면 칼럼의 개수를 알아낼 수 있습니다.

 

(3보다 많은 칼럼 수를 요청할 경우 인터널 에러가 발생하였습니다.)

 

오류가 발생하지 않은 것으로 보아 반환되는 칼럼 수는 3개임을 알 수 있습니다.

이제, union 구문을 활용해 null을 3개 쿼리 해보도록 하겠습니다.

 

-> Gifts' union select null, null, null--

위와 같이 전송할 경우 문제가 풀리게 됩니다.

 

 

이번 문제는 굉장히 중요한 기술인 칼럼 수 추적이 있으니 제대로 숙지해야 할 것 같습니다.

다음 시간에도 이어서 웹 해킹 문제를 풀어 보도록 하겠습니다.

이상! ICMP였습니다!

 

반응형

'문제연습 > bs_Training' 카테고리의 다른 글

SQL injection - UNION3(Examining the database1)  (0) 2020.12.26
SQL injection - UNION3  (0) 2020.12.25
SQL injection - UNION2  (0) 2020.12.25
SQL injection - Comment  (0) 2020.12.23
SQL injection - where 구문  (0) 2020.12.22