-
[Web Hacking] Portswigger - SQL injection UNION attack, retrieving multiple values in a single columnCoding/Hacking & Security 2023. 2. 9. 16:20
Lab: SQL injection UNION attack, retrieving multiple values in a single column | Web Security Academy
This lab contains an SQL injection vulnerability in the product category filter. The results from the query are returned in the application's response so ...
portswigger.net
옷걸이 UNION attack을 이용해서 administrator의 비밀번호를 알아내어보자.
문제 분석
이전에 풀었던 문제와 비슷하다.
참고 : https://hellworld.tistory.com/15
문제의 product category filter에 임의의 query를 추가하여 실행시킬 수 있는 것이다.
목표
모든 user의 정보를 출력하도록 SQL injection을 해야 한다.
우선 SELECT NULL을 이용하여 column의 개수를 구하고 이를 이용해 user의 정보를 출력하도록 query를 구성해보자.
풀이
SELECT NULL을 이용해 column의 개수를 구하였다.
위와 같이 parameter를 준 결과 오류 없이 구문이 실행되었다.
즉, product와 관련한 table의 column이 2개임을 알 수 있는 것이다.
이를 이용해 user table의 username과 password들을 출력되도록 해보자.
먼저 이전 문제에 이용했던 query를 그대로 전달해보았다.
UNION SELECT username,password FROM users WHERE username='administrator'--
그랬더니 (당연하게도) 실패했다.
이전 문제와 이 문제의 차이를 알아보고, 차이점을 이용해 문제를 해결해보자.
우선 아래와 같은 query를 전달해보았다.
UNION SELECT NULL,'a'--
그랬더니 이번에는 'a'가 포함된 정보가 정상적으로 출력되었다.
출력 결과 이번에는 'a'의 위치를 바꾸어 아래와 같은 query를 전달해보았다.
UNION SELECT 'a',NULL--
그랬더니 이번에는 오류가 발생했다!
즉, 이전 문제와 이번 문제의 차이점은 바로 자료형인 것 같다.
UNION 구문을 통해 query결과를 합치기 위해서는 column의 개수 뿐만 아니라, 자료형까지 같아야 한다.
문자열 'a' 대신에 정수 1을 대입한 query를 전달해보았다.
그랬더니 오류가 발생하지 않았다.
즉, product와 관련한 table의 첫 column의 값들의 자료형은 정수형인 것이다.
이를 이용해서 최종 query를 구성해보자.
UNION SELECT 1,password FROM users WHERE username='administrator'--
위의 query는 user table에서 username이 administrator인 user의 password를 선택하게 된다.
이를 실행한 결과는 아래와 같다.
딱 봐도 맨 위에 password가 출력되었다!
풀고 나니 모든 user의 정보를 출력할 필요는 없었다는 사실도 알 수 있었다.
그럼 왜 문제를 이렇게 낸거지??
'Coding > Hacking & Security' 카테고리의 다른 글