syurhia 님의 블로그

PortSwigger SQL injection UNION attack, retrieving data from other tables 본문

보안관련/PortSwigger

PortSwigger SQL injection UNION attack, retrieving data from other tables

syurhia 2026. 4. 22. 20:06

이번에는 UNION을 이용해서 기존의 쿼리 반환문에 관리자의 ID, PASS를 포함시켜 출력시키는 것으로 관리자 아이디에 접근하는 문제이다.

 

전제 조건으로서 테이블과 열에 관련된 정보가 주어져 있다. 테이블은 users이고 username과 password라는 열이 존재한다. 그리고 administrator이라는 username이 존재한다고 한다.

 

1. 공격 대상의 웹 사이트

 

그림 1이 공격 대상의 웹 사이트이다. category에 취약점이 존재한다고 한다.

 

그림2. 열의 개수를 확인해보자

그러면 이제 해당 쿼리가 몇 개의 열을 반환하는지에 대해 확인부터 해야된다.

category = Accessories' UNION SELECT NULL, NULL --로 확인해본 결과 그림2와 같이 통과가 되었기에 반환하는 열이 총 2개라는 것을 확인할 수 있다.

여기서 반환이라는 건 다음과 같이 쿼리가 존재한다고 할 때 A와 B를 의미하는 것이다.

SELECT A,B FROM C WHERE category = 'Accessories'

 

그림3. administrator의 비밀번호를 추출

몇 개의 열을 반환하는지 확인했고, 둘 다 문자열인 것도 확인을 했으니 진행한다 (문자열을 확인하는 것에 대해서는 캡처하는 걸 까먹었기에 넘어간다..)

URL을 수정해서 쿼리에 전달할 값을 변경하여 SQL INJECTION을 수행한다.

category = Accessories' UNION SELECT username, password FROM users WHERE username = 'administrator'--

참고로 UNION SELECT이후의 쿼리의 의미는 users라는 테이블에서 username이 administrator인 행에서, username과 password의 값을 반환하라는 뜻이다.

 

이 값을 서버에 전달하면 그림3과 같이 administrator의 비밀번호가 Accessories의 카테고리에 추가로 출력된다.

1u1p2u9jaehaspfyt2x2가 비밀번호다.

이걸로 로그인을 시도해보자.

그림4. 관리자 account에 로그인 성공

로그인이 성공했다.

이렇게, 원래 쿼리에 추가로 끼워서 출력하기 종료이다.