This lab contains a SQL injection vulnerability in the product category filter. When the user selects a category, the application carries out a SQL query like the following:
SELECT * FROM products WHERE category = 'Gifts' AND released = 1
To solve the lab, perform a SQL injection attack that causes the application to display one or more unreleased products.
lab에 들어가면 가상 shop 사이트가 나온다.
category filter에 SQL injection 취약점이 있다.
category를 선택하면 다음 SQL이 실행된다.SELECT * FROM products WHERE category = 'Gifts' AND released = 1
목표
SQL injection을 이용하여 출시되지 않은 products를 하나 이상 나오게 한다.
먼저 category filter 부분에 SQL injection 취약점이 있다고 했으니까 확인을 위해 burpsuite repeater에서 Gifts
뒤에 '
를 넣어본다.
넣으면 server error가 뜨는 것을 알 수가 있다.
이것을 SQL로 보면 '
가 하나 더 들어가면 '
하나가 끝맺음을 못해서 오류가 났을 가능성이 있다.
SELECT * FROM products WHERE category = 'Gifts'' AND released = 1
이번에는 ''
를 넣어서 오류가 안 나는지 확인한다.
'
를 두 개를 넣으니 오류가 안 나는 것을 볼 수 있다.
SELECT * FROM products WHERE category = 'Gifts''' AND released = 1
즉 category에 SQL injection 취약점이 있다.
목표는 출시하는 않은 products를 나오게 해야 문제가 풀린다.
문제에 주어진 SQL을 보면 AND released = 1
가 있는데 이 부분이 출시에 관련된 조건으로 보인다.
그래서 페이로드를 넣을 때 뒤 부분을 주석처리하면 출시 관련 조건이 없어지므로 미출시된 products도 볼 수 있다. 그리고 하나 이상 나와야 함으로 or문을 이용해서 페이로드를 짜면 문제를 풀 수 있다.
' or 1=1--
페이로드를 넣었을 때 실행될 sql query
SELECT * FROM products WHERE category = 'Gifts' or 1=1-- AND released = 1