什么是服务端伪造(SSRF)
什么是服务端伪造(SSRF)
原文:GitHub Pages and Single-Page Apps
译者:neal1991
welcome to star my articles-translator, providing you advanced articles translation. Any suggestion, please issue or contact me
LICENSE: MIT
服务端伪造(SSRF)指的是攻击者从一个具有漏洞的web应用中发送的一个伪造的请求的攻击。SSRF通常适用于针对在防火墙后一般对于外部网络的攻击者是无法访问的内部系统。另外,攻击者也可能利用SSRF来访问监听回送地址接口(127.0.0.1)的服务。
典型的SSRF发生在web应用发送请求的时候,攻击者对这个发送的请求具有全部或者部分的控制。一个通用的例子就是攻击者能够控制全部或者部分web应用向第三方服务发送请求的URL。

下面的是PHP中容易收到SSRF的一个例子。
<?php
/**
* Check if the 'url' GET variable is set
* Example - http://localhost/?url=http://testphp.vulnweb.com/images/logo.gif
*/
if (isset($_GET['url'])){
$url = $_GET['url'];
/**
* Send a request vulnerable to SSRF since
* no validation is being done on $url
* before sending the request
*/
$image = fopen($url, 'rb');
/**
* Send the correct response headers
*/
header("Content-Type: image/png");
/**
* Dump the contents of the image
*/
fpassthru($image);
}
在上面的例子中,因为攻击者对于url参数具有完整的控制,因此能够对于网上的任何网站都能够发送任意的GET请求。攻击者也能够向服务器中的资源发送请求。
比如,攻击者可能能够访问本地的服务。在下面的例子中,攻击者通过开启mod_status(默认开启)能够在Apache HTTP服务器上发送下面的请求。
GET /?url=http://localhost/server-status HTTP/1.1
Host: example.com
类似的,SSRF能够被用来请求这个web服务器可以访问的其它内部资源,但是这些资源不是对公共开放的。这个样的例子比如是在Amazon EC2 以及 OpenStack 上访问实例元数据。这个服务仅仅向服务器开放而不是外部世界。攻击者甚至会有更多发现通过使用这个方法在内部网络中运行端口扫描。
GET /?url=http://169.254.169.254/latest/meta-data/ HTTP/1.1
Host: example.com
除了通过http://以及·https://URL协议,攻击者可能也利用少数人或者遗留的URL协议来访问内部网络的本地系统中的文件。
下面的例子就是利用file:///URL协议来发送这样的请求。
GET /?url=file:///etc/passwd HTTP/1.1
Host: example.com
根据应用如何产生请求,攻击者能够利用URL协议而不是文件以及HTTP。比如,如果cURL被用来产生请求(上面的例子这就是利用fopen()来发送请求),可能能够利用dist URL协议向任何主机的任何端口发送请求并且发送自定义的数据。
GET /?url=dict://localhost:11211/stat HTTP/1.1
Host: example.com
上述的请求会造成应用链接到主机的11211端口并且发送字符串”stat”。端口11211是Memcached(通常不会暴露)使用的端口。对于一个可以利用的综合攻击列表以及URL协议,ONSec实验室维护了一个具有关于SSRF攻击有用的详细文档。
检测SSRF
为了自动检测SSRF,我们需要依靠中介服务,因为检测到这样一个漏洞需要一个带外和延时的向量。Acunetix通过在自动扫描是讲AcuMonitor 作为它的中介服务来解决这个问题。
在这个扫描期间,Acunetix将会产生一个包含一个特殊AcuMonitor URL的请求。如果AcuMonitor接受到一个包含以上一个特殊URL的请求,它会发送一个通知到Acunetix告诉它应该对于SSRF发出警告。
下面的是Acunetix利用AcuMonitor扫描来检测SSRF的结果。这个警告包含了正在执行的HTTP请求的信息,包括发送这个请求的IP地址以及这个请求使用的User-agent字符串。这个信息可以帮助开发者识别问题的来源并且进行修复。

避免SSRF
白名单和DNS解析
直接在用户的输入上实时简单的黑名单或者正则表达式来过滤IP地址或者域发送的这个请求,这对于避免SSRF是一个坏方法。
通常,黑名单都是一个糟糕的安全控制因为总是会有开发者忽视的漏网之鱼有。在这样的情况下,攻击者就能够利用这样的旁路来产生HTTP重定向,一个通配符DNS服务比如xip.io或者甚至是可用的IP编码.
相反,最通用的解决SSRF的方式是使用你的应用需要访问DNS名称或者IP地址的白名单。如果白名单方案不适合你的用户案例,那么你必须依赖黑名单,适当地验证你的用户输入是非常重要的。一个例子就是不允许向私有IP地址(非路由)发送请求(详细参考RFC 1918),然而,在使用黑名单的情况下,正确的采取什么样的避免措施往往取决于具体的应用。换句话说,对于SSRF没有一个通用的修复方法,因为它非常依赖于应用的功能以及商业需求。
响应处理
确保响应是远程服务器接收的响应是它应该接收的是非常重要的,这对于阻止响应数据意想不到的泄露给攻击者是非常重要的。以上其他的,无论在任何情况下,服务器发送的原生响应体都不应该直接发送给客户端。
关闭无用的URL协议
如果你的应用仅仅使用HTTP或者HTTPS来发送请求,那么应该就仅仅允许这些URL协议。关闭不使用的的URL协议能够阻止web应用使用潜在危险的URL协议,比如file:///,dict://,ftp://以及gopher。
认证内部服务
服务比如Memcached,Redis,Elasticsearch以及MongoDB默认不需要认证的。SSRF漏洞可以提供给攻击者一个没有任何认证阻拦的机会来访问这些服务。因此,最好实在人地方都使用认证,这也是一个防护机制。
可以扫描二维码或者搜索 mad_coder 关注微信公众号,点击阅读原文可以获取链接版原文。

什么是服务端伪造(SSRF)的更多相关文章
- Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程
一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...
- 渗透之路基础 -- 服务端请求伪造SSRF
简介:SSRF 服务器端请求伪造,有的大型网站在web应用上提供了从其他服务器获取数据的功能.使用户指定的URL web应用获取图片,下载文件,读取文件内容.通常用于控制web进而探测内网服务以及攻击 ...
- SSRF(服务端请求伪造)漏洞
目录 SSRF SSRF漏洞的挖掘 SSRF漏洞利用 SSRF漏洞防御 SSRF SSRF(Server-Side Request Forgery,服务器端请求伪造)漏洞,是一种由攻击者构造请求,由服 ...
- pikachu-服务器端请求伪造SSRF(Server-Side Request Forgery)
一.SSRF概述(部分内容来自pikachu平台) SSRF(Server-Side Request Forgery:服务器端请求伪造),其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功 ...
- 【CTF WEB】服务端请求伪造
服务端请求伪造 如你所愿,这次可以读取所有的图片,但是域名必须是www开头 测试方法 POST /index.php HTTP/1.1 Host: 218.2.197.236:27375 Conten ...
- 移动APP服务端设计开发注意要点
2014年,移动APP的热度丝毫没有减退,怎么为您的移动端app设计良好的服务器端接口(API)呢? 下面谈谈我个人的一些想法. 2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站 ...
- 移动APP服务端API设计应该考虑到的问题
2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站那样所取代, 不但如此,越来越多的传统应用.网站也都开始制作自己的移动APP,也就是我们常说的IOS客户端.android客户端. ...
- Spring Cloud官方文档中文版-服务发现:Eureka服务端
官方文档地址为:http://cloud.spring.io/spring-cloud-static/Dalston.SR3/#spring-cloud-eureka-server 文中例子我做了一些 ...
- iOS内购 服务端票据验证及漏单引发的思考.
因业务需要实现了APP内购处理,但在过程中出现了部分不可控的因素,导致部分用户反映有充值不成并漏单的情况. 仔细考虑了几个付费安全上的问题,凡是涉及到付费的问题都很敏感,任何一方出现损失都是不能接受的 ...
随机推荐
- mobx状态管理快速入门
1.mobx状态管理 安装: creact-react-app mobx
- 配置 app.js 文件
pp.js 中存放全局的 JavaScript 逻辑. 示例: App({ onLaunch: function () { console.log('SWAN launch'); }, onShow: ...
- 软件安装——internal error2503/2502
安装新的软件后先报internal error 2503,随后报internal error 2502.就是不让我装新的软件,提示说发生严重错误,然后安装失败. Solution for intern ...
- 863D - Yet Another Array Queries Problem(思维)
原题连接:http://codeforces.com/problemset/problem/863/D 题意:对a数列有两种操作: 1 l r ,[l, r] 区间的数字滚动,即a[i+1]=a[i] ...
- Android ListView焦点事件冲突问题与解决
Android ListView对于单纯列表展示是很好用的,但是一旦牵扯到对listView进行操作就会遇到各种各样的问题.比如保存Checkbox状态与item复用的冲突.遇到可获取焦点的控件比如说 ...
- Spring Cloud教程(九)应用程序上下文服务
Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点.Spring Cloud建立在此之上,并添加了一些可能系统中所 ...
- Alexa TOP 100万的域名列表
Alexa是一家专门发布网站世界排名的网站,是亚马逊公司的一家子公司.Alexa每天在网上搜集多达几十亿的网址链接,而且为其中的每一个网站进行了排名. Alexa通过Alexa官网查询好像TOP 50 ...
- A* 算法求第 K 短路
一种具有 \(f(n)=g(n)+h(n)\) 策略的启发式算法能成为 A* 算法的充分条件是: 搜索树上存在着从起始点到终了点的最优路径. 问题域是有限的. 所有结点的子结点的搜索代价值 \(> ...
- 前端每日实战:156# 视频演示如何用纯 CSS 创作一个飞机舷窗风格的 toggle 控件
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jeaOrw 可交互视频 此视频是可 ...
- C# 防火墙操作之特定端口
针对将特定端口加入到windows系统的防火墙中,使其允许或禁止通过防火墙.其大概思路是: /// <summary> /// 添加防火墙例外端口 /// </summary> ...