本文由掌控安全学院 - Track-劲夫 投稿
1. SSRF
1.1 什么是SSRF
SSRF(Server-Side Request Forgery,服务器请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞,一般情况下,SSRF攻击的目标是外网无法访问的内网系统(因为请求是由服务端帮我们发起的,所以我们可以通过它来向其所在的内网机器发起请求)。
1.2 漏洞成因
SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。例如,黑客操作服务端从指定URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务端的请求伪造,SSRF利用存在缺陷的WEB应用作为代理攻击远程和本地的服务器。
1.3 可能会存在SSRF的地方
> 转码服务
> 在线翻译
> 获取超链接的标题等内容进行显示
> 请求远程服务器资源的地方,图片加载与下载(通过URL地址加载或下载图片)
> 图片、文章收藏功能
> 对外发起网络请求的地方,网站采集、网页抓取的地方。
> 一切要你输入网址的地方和可以输入ip的地方。
> 数据库内置功能(mongodb的copyDatabase函数)
> 从URL关键字中寻找:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain
1.4 SSRF分类
我觉得就分为回显和不回显两种方式,会回显请求的响应内容那么最好不过,如果不会回显的话,那么一般就只能通过响应时间来判断了
1.5 验证方法
如果是会回显信息的SSRF漏洞,那么看他的响应结果就好了,如果是不会回显的,那么我们可以利用DNSLOG来进行判断
1.6 利用方式
-
对外网或服务器所在的内网或服务器自身发起端口扫描
-
攻击运行在内网或本地的应用程序
-
利用file协议读取本地文件
-
……..
1.7 可以利用的协议
-
http/https,发起HTTP请求
-
file,如果会回显数据的话,那么我们可以使用file协议读取目标本地文件
-
dict,可以用来探测目标端口
-
gopher,可以发送get/post请求
-
ftp,文件传输协议
-
…..
1.8 SSRF过滤绕过
-
0.0.0.0,这个IP地址可以直接访问到本地
-
把IP地址的格式进行转换从而绕过
通常我们用的是127.0.0.1,但事实上127这个段的地址都用来表示本机地址了,所以像127.155.155.155这样的也是可以的,还可以进行进制转换也是可以的
> 8进制(把127转为八进制写的时候前面加个0):0177.0.0.1
> 16进制(把127转为十六进制写的时候前面加个0x):0x7f.0.0.1
> 16进制整数格式:0X7F000001
> 10进制证书格式(把16整数转为10进制):2130706433
上面这些都是可以访问到的
-
localhost
-
利用@绕过例如,www.baidu.com@127.0.0.1
-
利用非HTTP协议,例如上面说到的gopher或者dict
-
利用DNS解析(可以用DNSLOG)
-
利用IPv6
-
添加端口号
-
[::]代替127.0.01,比如http://[::]:80,这样也是可以访问到的
2. SSRF攻击Redis
2.1 环境搭建
使用Docker进行环境的搭建,需要的文件我已经打包好了,如果没有docker环境的话需要安装(请使用linux系统)
-
使用
tar xzvf ssrf.tar.gz
解压ssrf.tar.gz, -
cd ssrf_dockerfile
,进入到解压的文件目录下 -
构建镜像,
docker build -t ssrf:v1 .
-
Successfully built说明构建成功,也可以再使用
docker images
命令查看镜像是否存在 -
docker run -d -p 80:80 ssrf:v1
,启动镜像 -
启动成功,访问127.0.0.1查看是否搭建成功
-
漏洞点为ssrf.php,参数名为url,测试一下是否存在漏洞
环境搭建完毕
2.2 漏洞复现(通过ssrf利用redis写入webshell)
2.2.1 想要写入webshell的两个条件
-
要知道网站的绝对路径</