高端个人网站,公司开发个网站有哪些,网易企业邮箱怎么改名字,建店前期网站开通怎么做分录前言
SSRF漏洞是一种在未能获取服务器权限时#xff0c;利用服务器漏洞#xff0c;由攻击者构造请求#xff0c;服务器端发起请求的安全漏洞#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…前言
SSRF漏洞是一种在未能获取服务器权限时利用服务器漏洞由攻击者构造请求服务器端发起请求的安全漏洞攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上获取数据的功能根据用户指定的URLWeb应用可以获取图片、下载文件、读取文件内容等。这种功能如果被恶意使用将导致存在缺陷的Web应用被作为代理通道去攻击本地或远程服务器这种形式的攻击被称为服务端请求伪造攻击。
一般情况下SSRF攻击的目标是外网无法访问的内部系统。
本文主要分享以下技术内容不断更新欢迎关注!
一、漏洞原理
二、SSRF挖掘技巧
三、常见的SSRF攻击
3.1、针对服务器本身的SSRF攻击
3.2、针对其他后端系统的SSRF攻击
3.3、端口扫描
3.4、对内网web应用进行指纹识别及攻击其中存在漏洞的应用
3.5、文件读取和命令执行
四、绕过SSRF的常见防御
4.1、绕过利用黑名单防御
4.2、绕过利用白名单的防御
4.3、通过开放重定向绕过SSRF过滤器
五、SSRF防御 01漏洞原理
SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能但是没有对目标地址进行过滤和限制。
主要攻击方式
1.对外网、服务器所在内网、本地进行端口扫描获取一些服务的banner信息。
2.攻击运行在内网或者本地的应用程序。
3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹)对资产信息进行识别。
4.利用file协议读取本地文件。
5.攻击内外网的web应用主要是使用HTTP GET请求就可以实现的攻击等。
比如一个正常的Web应用本应该从指定URL获取网页文本内容或加载指定地址的图片而攻击者利用漏洞伪造服务器端发起请求从而突破了客户端获取不到数据的限制如内网资源、服务器本地资源等。
如下代码
?php $url$_GET[url]; echo file_get_contents($url);?
这段代码使用file_get_contents函数从用户指定的URL获取图片并展示给用户。此时如果攻击者提交如下payload就可以获取到内网主机HTTP服务8000端口的开放情况
http://example.com/ssrf.php?urlhttp:192.168.209.134:8000 02SSRF挖掘技巧
目前常见的漏洞挖掘方式有两种
1、从web功能上挖掘
①分享通过url地址分享网页内容
②转码服务
③在线翻译
④图片的下载与加载
⑤图片、文章收藏功能
⑥未公开的API实现及调用URL的功能
2、从URL关键字挖掘
Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain…… 03常见的SSRF攻击
SSRF攻击通常利用信任关系来进行攻击并执行未经授权的操作。这些信任关系可能与服务器本身有关也可能与同一系统内的其他后端系统有关。
3.1 针对服务器本身的SSRF攻击
在针对服务器本身的SSRF攻击中攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求。通常这将涉及为URL提供一个主机名例如127.0.0.1(指向回送适配器的保留IP地址)或localhost(同一适配器的常用名称)。
例如一个购物应用程序该应用程序使用户可以查看特定商店中某商品是否有库存。为了提供库存信息应用程序必须根据所涉及的产品和商店查询各种后端REST API。该功能是通过将URL通过前端HTTP请求传递到相关的后端API端点来实现的。因此当用户查看某件商品的库存状态时他们的浏览器会发出如下请求
他们的浏览器会发出如下请求
POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118stockApihttp://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
服务器向指定的URL发出请求检索库存状态然后将其返回给用户。
在这种情况下攻击者可以修改请求以指定服务器本身本地的URL。
例如
POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApihttp://localhost/admin在这里服务器将获取/admin的内容并将其返回给用户。
现在攻击者可以直接访问/admin;但是通常只有适当的经过身份验证的用户才能访问管理功能。因此直接访问URL时将不会看到任何有价值的内容。但是当对/admin的请求来自本地计算机时将绕过常规的访问控制该应用程序授予对管理功能的完全访问权限因为该请求来自受信任的位置。
为什么应用程序会以这种方式运行并且隐式信任来自本地计算机的请求?发生这种情况可能有多种原因
1、该访问控制检查可能会在应用服务器的前面利用一个不同的组件来实现与服务器本身建立连接后将绕过检查。
2、为了灾难恢复的目的该应用程序可能允许无需登录即可对本地计算机上的任何用户进行管理访问这为管理员提供了一种在丢失凭据的情况下恢复系统的方法。这里假设是来自服务器本身的用户才能完全受信任。
3、管理界面可能正在侦听的端口号与主应用程序不同因此用户可能无法直接访问。
在这种信任关系中由于来自本地计算机的请求与普通请求的处理方式不同这些信任关系会使SSRF成为严重漏洞。
3.2 针对其他后端系统的SSRF攻击
SSRF引起的另一种信任关系是服务器能够与用户无法直接访问的其他后端系统进行交互这些系统通常具有不可路由的专用IP地址。由于后端系统通常受网络拓扑保护因此它们的安全状态较弱。在许多情况下内部后端系统包含敏感功能能够与该系统进行交互的任何人都可以在不进行身份验证的情况下对其进行访问。
在前面的示例中假设在后端URL处有一个管理界面 https://192.168.0.68/admin
在这里攻击者可以通过提交以下请求来利用SSRF漏洞来访问管理界面
POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApihttp://192.168.0.68/admin
3.3 端口扫描
http://example.com/ssrf.php?urlhttp:ip:21/http://example.com/ssrf.php?urlhttp:ip:443/http://example.com/ssrf.php?urlhttp:ip:80/http://example.com/ssrf.php?urlhttp:ip:3306/等
我们可以通过响应时间、返回的错误信息、返回的服务Banner信息、响应时间等来对端口开放情况进行给判断。
3.4 对内网web应用进行指纹识别及攻击其中存在漏洞的应用
大多数web应用都有一些独特的文件和目录通过这些文件可以识别出应用的类型甚至详细的版本。基于此特点可利用SSRF漏洞对内网Web应用进行指纹识别如下Payload可以识别主机是否安装了WordPress
http://example.com/ssrf.php?urlhttps%3A%2F%2F127.0.0.1%3A443%2Fwp-content%2Fthemes%2Fdefault%2Fimages%2Faudio.jpg
得到指纹后便能有针对性地对其存在的漏洞进行利用如下payload展示了如何利用SSRF漏洞攻击内网的JBOSS应用
http://example.com/ssrf.php?urlhttp%3A%2F%2F127.0.0.1%3A8080%2Fjmx-console%2FHtmlAdaptor%3Faction%3DinvokeOp%26name%
3.5 文件读取和命令执行
1、文件读取
如果攻击者指定了file协议则可通过file协议来读取服务器上的文件内容如下
http://example.com/ssrf.php?urlfile:///etc/passwd
2、命令执行
例如PHP环境下利用expect协议执行系统命令如下
http://example.com/ssrf.php?urlexpect://id 04绕过SSRF的常见防御
4.1 绕过利用黑名单防御
一些应用程序阻止包含主机名(如127.0.0.1和localhost)或敏感URL(如/admin)的输入/admin。在这种情况下绕过方法如下
1、替代IP127.0.0.1例如2130706433、017700000001、127.1
2、注册您自己的域名该域名解析为127.0.0.1
您可以spoofed.burpcollaborator.net用于此目的
3、使用URL编码或大小写变化对阻塞的字符串进行混淆
4.2 绕过利用白名单的防御
某些应用程序仅允许输入匹配以允许值开头或包含允许值的白名单的输入。在这种情况下您有时可以利用URL解析中的不一致来绕过过滤器。
URL规范包含许多功能在实现URL的临时分析和验证时可能会被忽略
1、使用字符在主机名之前的URL中嵌入凭据。例如https://expected-hostevil-host
2、使用该#字符来指示URL片段。例如https://evil-host#expected-host
3、利用DNS命名层次结构将所需的输入放入DNS名称中。例如https://expected-host.evil-host
4、使用URL编码字符来混淆URL解析代码如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符则特别有用
5、这些技术可以组合在一起使用
4.3 通过开放重定向绕过SSRF过滤器
通过利用开放重定向漏洞有时可以绕过任何基于过滤器的防御。
假设严格验证了用户提交的URL以防止恶意利用SSRF行为但是允许使用URL的应用程序包含一个打开的重定向漏洞。提供用于使后端HTTP请求支持重定向的API可以构造一个满足过滤条件的URL并导致将请求重定向到所需的后端目标。
例如假设应用程序包含一个开放重定向漏洞其中包含以下URL
/product/nextProduct?currentProductId6pathhttp://evil-user.net
返回重定向到
http://evil-user.net
以利用开放重定向漏洞绕过并按如下方式利用SSRF漏洞
POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApihttp://weliketoshop.net/product/nextProduct?currentProductId6pathhttp://192.168.0.68/admin
这种SSRF漏洞之所以有效是因为应用程序首先验证了提供的stockAPIURL是否在允许的域上然后应用程序提供的URL触发重定向并向攻击者选择的内部URL发出请求。 05SSRF防御
SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。
1、限制请求端口只能为web端口只允许访问HTTP和HTTPS的请求;
2、过滤返回的信息;
3、禁止不常使用的端口;
4、限制不能访问内网的IP防止对内网进行攻击;
5、对于DNS重绑定使用DNS缓存或者Host白名单