Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data

notion image
가장 먼저 필터링 기능이 눈에 들어왔다.
notion image
 
위와 같이 파라미터로 필터링을 조회하는 듯하다. 해당 부분에 SQLi가 수행되는지 확인해 보자.
‘ OR 1=1을 입력했더니 아래와 같이 출력되며 문제가 풀이됐다.
/filter?category='%20OR%201%3d1%20--
notion image
문제 설명을 본다면 더 자세히 까닭을 알 수 있는데.
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
서버는 위와 같은 쿼리를 사용한다고 나와 있다.
아마도 URL 파라미터가 별도의 필터링 없이 바로 쿼리문으로 들어가는 상황일 것이므로 ‘ OR 1=1을 입력한다면, 아래와 같은 쿼리가 되어 버린다.
SELECT * FROM products WHERE category = '' OR 1=1 -- AND released = 1
-- 때문에 -- AND released = 1은 주석 문장이 되어 버리며 '' OR 1=1은 항상 TRUE가 된다. 이러한 까닭으로 위 쿼리는 아래와 같아지며,
SELECT * FROM products;
해당 테이블의 모든 요소를 반환하게 된다.