32_사용자 자격 증명 & GDPR 데이터 삭제(User Credentials & GDPR Data Erasure)
난이도 : ★★★
취약점 유형
- 주입(Injection)
- 인증 오류(Broken Authentication)
문제 설명
- 사용자 자격 증명(User Credentials) : SQL 인젝션을 통해 모든 사용자 자격 증명 목록을 가져옵니다.
- GDPR 데이터 삭제(GDPR Data Erasure) : Chris의 삭제된 계정으로 로그인합니다.
힌트
1) 사용자 자격 증명(User Credentials)
- 사용자 데이터가 어디에 저장되고 어떻게 접근되는지 정보를 수집합니다. 그런 다음 이에 상응하는 UNION SELECT 공격을 설계합니다.
- 서버에서 데이터를 가져올 때 영향을 줄 수 있는 엔드포인트를 찾습니다.
- 다른 테이블의 데이터를 원래 결과에 결합하는 UNION SELECT 공격 문자열을 만듭니다.
- 쿼리 구문 문제를 단계적으로 해결해야 할 수도 있습니다. 기본적으로 하나의 오류에서 다음 오류로 넘어가는 방식입니다.
- "2014년 크리스마스 특별 할인 주문하기" 및 "SQL 인젝션을 통해 전체 DB 스키마 정의 유출하기"와 마찬가지로, 이 공격은 애플리케이션 프런트엔드를 통해서는 수행할 수 없습니다.
2) GDPR 데이터 삭제(GDPR Data Erasure)
- 알고 보니 사용자 '잊혀질 권리' 구현 방식에 기술적으로나 법적으로 문제가 있었습니다.
- 데이터 삭제 요청 기능을 사용해 보는 것은 흥미로울 수 있지만, 이 문제를 실시간으로 해결하는 데는 도움이 되지 않습니다.
- SQL 인젝션을 통해 모든 사용자 자격 증명 목록을 가져오는 문제를 해결했다면, 주스 가게가 사용자 요청에 따라 어떻게 '삭제'하는지에 대한 정보를 이미 얻었을 수도 있습니다.
- 주스 가게의 행위는 GDPR을 완전히 위반하는 것입니다. 다행히 총수입 0달러에 대한 4%의 벌금은 여전히 0달러입니다.
Technical Note
- 검색 쿼리가 적절한 필터링 없이 UNION 연산자를 허용하여 DB 내부의 민감 정보가 노출됨
- 백엔드에서 로그인 쿼리 구성 시 사용자의 입력을 SQL 문법으로 해석하게 방치하여 패스워드 확인 절차를 주석(--) 처리로 건너뜀
- 해시를 알아내더라도 솔트(Salt) 처리나 최신 알고리즘, 혹은 2차 검증이 있을 경우 단순 대입으로는 로그인이 어려울 수 있음을 보여줌
- DB 정보를 알아내는 용도 뿐만 아니라, 로그인 폼 자체를 공격하는 SQLi 인증 우회 기법이 유효하게 작용함
대응방안
- Prepared Statement를 사용하여 사용자 입력 값이 SQL 쿼리 구조를 변경할 수 없도록 매개변수화된 쿼리(Parameterized Query)를 필수 적용해야 함
- ', --, UNION, SELECT 등 SQL 특수문자 및 예약어에 대한 강력한 화이트리스트 기반 필터링이 필요함
- 사용 중인 ORM 라이브러리가 취약한 원시(Raw) 쿼리를 실행하지 않는지 점검하고 최신 보안 패치 적용해야 함
- SQL 문법 에러나 테이블 구조를 유추할 수 있는 디버깅 메시지가 사용자 화면에 출력 되지 않도록 설정해야 함
- MD5와 같이 취약한 알고리즘 대신 Argon2, bcrypt 등 salt가 포함된 강력한 해시 알고리즘 사용을 권장함
풀이 과정

상품 검색창에 ')) UNION SELECT 1,2,3,4,5,6,7,8,9 FROM Users-- 입력하여 Users 테이블 존재 및 컬럼 개수를 파악함

UNION SELECT 쿼리를 조작하여 email 컬럼과 password 해시 컬럼이 응답 화면에 출력되도록 매핑 성공함

유저 목록 중 과제 목표인 chris.pike@juice-sh.op 계정 정보 탈취함

추출한 MD5 추정 패스워드 해시를 해시 조회 사이트에서 복호화하여 평문을 획득함

대입 후 로그인 시도한 결과, 실패하였음

단순 해시 로그인이 아닌 로그인 폼 자체에 chris.pike@juice-sh.op' -- 쿼리를 직접 주입한 결과, 패스워드 검증 로직을 무력화하고 로그인 성공함
결과

SQL Injection을 통해 GDRP 데이터 삭제 문제 해결 과정에서 사용자 자격 증명 과제도 같이 해결되었음
'OWASP Juice-Shop' 카테고리의 다른 글
| [OWASP] 바구니 조작하기(Manipulate Basket) (0) | 2026.05.22 |
|---|---|
| [OWASP] 로그인 Amy(Login Amy) (0) | 2026.05.22 |
| [OWASP] 위조 리뷰(Forged Review) (1) | 2026.05.21 |
| [OWASP] 디럭스 사기(Deluxe Fraud) (0) | 2026.05.21 |
| [OWASP] 데이터베이스 스키마(Database Schema) (0) | 2026.05.21 |