본문 바로가기
프로그래밍/해킹

Redis 중복 키 사용 관련 공격

by 만디기 2024. 7. 3.

- Redis는 키와 값이 하나의 쌍을 이루어 데이터를 저장하는 구조이며, 일반적으로 RDBMS의 스키마/테이블 또는 MongoDB의 콜렉션과 같이 특정한 영역으로 구분해 저장하지 않는다.

- 따라서 서로 다른 용도로 사용하는 키 명칭이 중복되는 경우가 존재한다.

- 예를 들어, Redis에서 캐시를 구현할 때 캐시 타입 별로 서버를 분리하지 않으면 이러한 문제가 생길 수 있으며, 캐시 타입은 유저 정보, 인증 정보, 임시 데이터 등이 포함된다.

- 또한, 키 명칭을 구분자 없이 사용하고, 이용자의 입력값으로 키 명칭으로 사용할 때 발생할 수 있다.

 

예를 들어 다음과 같이 이용자의 입력값만으로 키 명칭을 지정하는 경우,

SET key value
# 사용자 메일 인증 번호 저장 시
SET {email} {random number}
# 사용자 메일 인증 횟수 저장 시
SET {email}_count 0

 

다음과 같은 과정을 통해 인증 과정을 우회할 수 있다.

// 1. user1@dreamhack.io_count에 대해, random number로 인증번호가 생성되고 접속 횟수를 저장하기 위해 user1@dreamhack.io_count_count 변수를 생성한다.
user1@dreamhack.io_count = {random number}
user1@dreamhack.io_count_count = 0  

// 2. 이제 user1@dreamhack.io에 대해 요청하는 경우, user1@dreamhack.io의 접속 횟수를 저장하기 위해 user1@dreamhack.io_count 변수가 0으로 저장된다.
즉, user1@dreamhack.io_count의 인증번호가 0으로 변경된 셈이다.
user1@dreamhack.io_count = 0
user1@dreamhack.io_count_count = 0
user1@dreamhack.io = {random number}

'프로그래밍 > 해킹' 카테고리의 다른 글

phpMyRedis  (0) 2024.07.03
CouchDB & 관련 공격  (0) 2024.07.03
MongoDB 기본 문법 & 취약점  (1) 2024.07.03
Exercise: SQL Injection Bypass WAF  (0) 2024.07.02
Bypass WAF  (0) 2024.07.02