写一个Redis Getshell的exp,预期达到的效果是:命令一跑,挂机两小时,然后拿下数百台服务器。
不了解该漏洞建议先看这个文章
Redis 未授权访问配合 SSH key 文件利用分析
漏洞利用流程
1 生成一对用于ssh验证的密钥对
2 通过redis未授权访问漏洞,向redis插入一条记录,内容为已生成的公钥
3 通过redis数据导出功能,将含有公钥的数据导出到/root/.ssh/authorized_keys
4 使用自己的主机,通过ssh私钥与受害机进行匹配并登入
自动化的限制
用exp做自动化getshell的限制主要有以下几点:
1 以root用户运行Redis,且未设置安全策略
2 Linux,port 22,且无防火墙
3 ssh配置支持该登录方式
编写exp
协议分析及Payload构造
发送一条info命令
使用wireshark抓包分析协议格式
构造出payload
payload = 'x2ax31x0dx0ax24x34x0dx0ax69x6ex66x6fx0dx0a'
这样就能检测出未授权访问漏洞了, 例如这个Seebug提供的PoC:
我们可以仿造这个思路编写exp,只需要抓取->分析->按规则构造各个必要的请求包,并判断返回字段,像这样:
利用Python-redis库
这就比较简单了.
首先判断是否存在未授权访问漏洞
然后执行redis命令,将公钥写入目标位置
之前要判断目标22端口是否开放
最后对ssh做连接测试
可公开的exp代码
https://github.com/Xyntax/POC-T/blob/master/script/redis-sshkey-getshell.py
批量检测
从ZoomEye获取100个结果并使用我们编写的脚本进行验证,效果如下
(更正:图里 --dork 参数应改为 "port:6379")
这里paramiko的ssh连接有个问题,并没有做到100%无误报.接下来可以手动测试一下是否可以登入ssh
事实上跑了一定数据之后,觉得收获不如预期,毕竟这个漏洞可以灵活的控制的因素太多。如果能跑完ZoomEye上所有的搜索结果,预计初步可以通过这个脚本拿到500-800个root权限的shell
拿一个shell看看写入authorized_keys的效果
原文始发于微信公众号(乐枕迭代日志):Redis Getshell自动化实践之SSH-key
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论