0. 개요
가끔 난이도 높은 SQL injection 문제에서 where 키워드가 필터링될 경우가 존재한다.
이럴 때 해당 기법을 이용해서 필터를 우회할 수 있다.
일단 다음과 같이 test2 테이블에서 flag가 123123인 id 값을 원한다고 가정하자.
이것에 대한 쿼리를 작성하면 다음과 같다.
select id from test2 where flag=123123;
여기서 where가 필터링되었을 때 다음과 같이 작성하면 비슷한 결과가 출력된다.
(같지 않고 비슷하다는 것은 아래 좀 더 자세히 설명하겠다)
select if(flag=123123,id,null) from test2;
실제 출력 결과를 확인해보자.
출력 결과를 확인해보면 where 절을 이용하였을 때는 정확히 해당 조건에 맞는 row의 id만 출력되는 것을 볼 수 있는 반면, if 구문을 이용한 경우에는 나머지 데이터들이 조건에 맞지 않아 null이 출력됨을 확인할 수 있다.
이러한 이유로 인해 이전에 결과가 동일하지 않고 비슷하다고 한 것이다.
1. 활용
그렇다면 해당 기법을 어떤 식으로 이용해야 할까?
1) 데이터 수 확인
: 아래 출력 결과를 보면 where 절을 이용한 것과 if 구문을 이용한 것의 count 결과가 동일하게 1건이라고 출력됨을 볼 수 있다.
이를 통해 우리가 원하는 데이터가 몇 개 있는지 알 수 있다.
2) 데이터 추출
: 실제 데이터는 다음과 같이 MAX와 같은 함수를 이용하여 출력시키거나 limit keyword를 이용하여 원하는 데이터를 찾을 수 있다.
'Hacking > Web' 카테고리의 다른 글
python deserialize vulnerability in pickle module (1) | 2020.07.26 |
---|---|
Filter bypass Using Multipart form data (0) | 2020.05.08 |
get column name in mysql error based sql injection (0) | 2020.04.22 |
Server-side Vulnerability (0) | 2020.04.09 |
Client-side Vulnerability (0) | 2020.04.02 |