'SQLi'에 해당되는 글 1건

반응형

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를 이용하여 원하는 데이터를 찾을 수 있다.




반응형
블로그 이미지

rootable

,