python urllib SSRF攻击Redis

0x00 测试环境

docker环境:

容器内网ip为192.168.0.7,直接内网访问6379端口。

0x01 如何攻击Redis

两种方案,具体看参考链接。原理都是一样的,写文件到目标目录。

上述Redis命令可以使key-value数据保存在/tmp/evil文件中,也就是我们可以控制里面的部分内容:

0x02 Python urllib HTTP头注入

简单使用一下代码测试访问url:

这里是个SSRF漏洞,当输入一下payload,还能注入我们想要的http头数据:

输入:

监听本机12345端口,得到发包数据:

不仅如此,还可以改变请求构造为POST数据。具体参考链接1。和Gopher协议有同样的妙用。

0x03 结合攻击Redis

发送payload到内网Redis端口:

可以在Redis中添加A:EVIL的键值对,即:执行了SET A EVIL命令。数据包为:

0x04 实际shell攻击

1. 写入空格限制

Redis协议突破空格限制:

url编码得到payload:

测试结果如下,成功执行命令:

2. 综合利用写文件

测试payload直接写文件:

redis原命令:

即:

按照上述编码规则可得payload:

成功写入shell到/tmp/webshell123文件中,文件内容如下:

定时任务反弹shell和添加ssh-key方法,详见链接2。

0x05 参考

http://www.evil0x.com/posts/25330.html
https://security.tencent.com/index.php/blog/msg/106