Redis Getshell自动化实践之SSH-key

admin 2022年4月26日23:42:05评论94 views字数 983阅读3分16秒阅读模式

写一个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命令


Redis Getshell自动化实践之SSH-key


使用wireshark抓包分析协议格式


Redis Getshell自动化实践之SSH-key


构造出payload

payload = 'x2ax31x0dx0ax24x34x0dx0ax69x6ex66x6fx0dx0a'


这样就能检测出未授权访问漏洞了, 例如这个Seebug提供的PoC:


Redis Getshell自动化实践之SSH-key


我们可以仿造这个思路编写exp,只需要抓取->分析->按规则构造各个必要的请求包,并判断返回字段,像这样:


Redis Getshell自动化实践之SSH-key




利用Python-redis库


这就比较简单了.

首先判断是否存在未授权访问漏洞


Redis Getshell自动化实践之SSH-key


然后执行redis命令,将公钥写入目标位置


Redis Getshell自动化实践之SSH-key


之前要判断目标22端口是否开放


Redis Getshell自动化实践之SSH-key


最后对ssh做连接测试


Redis Getshell自动化实践之SSH-key




可公开的exp代码


https://github.com/Xyntax/POC-T/blob/master/script/redis-sshkey-getshell.py




批量检测


从ZoomEye获取100个结果并使用我们编写的脚本进行验证,效果如下


Redis Getshell自动化实践之SSH-key

(更正:图里 --dork 参数应改为 "port:6379")


这里paramiko的ssh连接有个问题,并没有做到100%无误报.接下来可以手动测试一下是否可以登入ssh


事实上跑了一定数据之后,觉得收获不如预期,毕竟这个漏洞可以灵活的控制的因素太多。如果能跑完ZoomEye上所有的搜索结果,预计初步可以通过这个脚本拿到500-800个root权限的shell


拿一个shell看看写入authorized_keys的效果


Redis Getshell自动化实践之SSH-key


原文始发于微信公众号(乐枕迭代日志):Redis Getshell自动化实践之SSH-key

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月26日23:42:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Redis Getshell自动化实践之SSH-keyhttps://cn-sec.com/archives/943649.html

发表评论

匿名网友 填写信息