渗透测试基础-SSRF服务器端请求伪造
只为对所学知识做一个简单的梳理,如果有表达存在问题的地方,麻烦帮忙指认出来。我们一起为了遇见更好的自己而努力💪!
简介
SSRF
(Server-Side Request Forgery
:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF
是目标网站的内部系统。
CSRF = 客户端请求伪造 c代表客户器 client
SSRF = 服务端请求伪造 s代表服务端 server
CSRF:(跨站请求伪造)是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
SSRF 形成的原因
大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。也就是说,对于为服务器提供服务的其他应用没有对访问进行限制,如果我构造好我的访问包,那我就有可能利用目标服务对他的其他服务器应用进行调用。一般情况下,SSRF
攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。
在简短一点就是:SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。
就比如,当我们用自己的电脑访问百度,查询IP时,百度会显示我当前的IP。但是用翻译网站去访问百度,并查询IP时,它显示的IP和刚刚不一样了,这里就能说明,是翻译网站的服务器去做了这样一个查询动作。
SSRF的主要危害
攻击者利用SSRF
可以实现的攻击主要有5种:
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务器的banner信息;
- 攻击运行在内网或本地的应用程序(比如溢出);
- 对内网web应用进行指纹识别,通过访问默认文件实现;
- 利用
dict
协议测试扫描端口 - 利用
file
协议读取本地文件等。
SSRF漏洞的检测方式
因为一般SSRF
是由于服务器获取其他服务器的相关信息的功能中形成的,所以在寻找中,应该注意一下几点:
- 分享功能点:通过URL地址分享网页内容
- 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
- 在线翻译
- 图片加载与下载:通过URL地址加载或下载图片
- 图片、文章收藏功能
- 未公开的API实现以及其他调用URL的功能
从URL关键字中寻找
在对功能上存在SSRF漏洞中URL地址特征的观察,通过一段时间的收集,大致有以下关键字:
share wap url
link src source
target u 3g
display sourceURl imageURL
domain
如果利用Google
语法加上这些关键字去寻找SSRF
漏洞,耐心的验证,还是可以找到SSRF漏洞。
CCRF靶场演练:
靶场看起来像是一个搜索界面,说可以代替访问一些网站,这和SSRF
很像,它至少满足了从服务端请求网络。
这里进一步尝试一下
用本机打开了爱站网看到了我本机的出口IP是多少,来试试靶场的
这里看到IP
地址变了,证明了前面的猜想,在用dict
看一下本机的端口。
这里推荐用Burp
,不然一共65535
个端口,常用的端口少说也要1000
多个,测起来太累,用Burp
跑
这里暂时用1
代替端口号,用Burp
找起来简单
这里看到了这么几个端口数据是有变化的
还看到了80
和81
同为网站端口,http
为什么需要用两个呢 来尝试一下。
原来这里的flag
在源码中。
漏洞总结
SSRF
的防御手段通常有以下5个思路:
- 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
- 限制请求的端口为http常用的端口,比如,80,443,8080,8090
- 黑名单内网IP。避免应用被用来获取内网数据,攻击内网。
- 禁用不需要的协议。仅仅允许
http
和https
请求。可以防止类似于file://
,gopher://
,ftp://
协议引起各类问题。
《最好的防御,是明白其怎么实施的攻击》