大部分web应用都提供了从其他的服务器上获取数据的功能,如使用用户指定的URL,web应用可以获取图片,下载文件,读取文件内容等。如果服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制,就可以可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为服务端请求伪造攻击SSRF。

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,也就是把目标网站当中间人。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

前言:SSRF漏洞导图

一、危害

目标:从外网无法访问的内网系统

1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;

2.攻击运行在内网或本地的应用程序(比如溢出);

3.对内网web应用进行指纹识别,通过访问默认文件实现;

4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);

5.利用file协议读取本地文件等。

二、理解

首先我们要知道网站访问的步骤:

①用户在地址栏输入网址

②向目标网站发送请求

③目标网站接受请求并在服务器端验证请求是否合法,然后返回用户所需要的页面

④用户接收页面并在浏览器中显示

这里我们以加载图片为例

设访问网址为:http://www.xxx.com/a.php?image=???

SSRF形成原因:目标网站(http://www.xxx.com)接受请求后在服务器端验证请求是否合法,如果服务器端的验证并没有对其请求获取图片的image参数做出严格的过滤以及限制,导致可以从其他服务器的获取一定量的数据。

例如: A网站是一个所有人都可以访问的外网网站,B网站是一个 A网站公司的内部的网站。

访问网址:http://www.a.com/a.php?image=http://www.yyy.com/1.jpg

这个网址是向A网站请求一张其他服务器的一张图片。

Q:如果我们将http://www.yyy.com/1.jpg换为与该服务器相连的内网服务器地址,也就是B网站,会产生什么效果呢?

A:如果存在该内网地址(http://www.b.com)就会返回1xx 2xx 之类的状态码,不存在就会其他的状态码

总结:SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有发现在这个请求是合法的,然后服务器以他的身份来访问其他服务器的资源。

三、挖掘、验证及绕过

1.从web功能上寻找

①分享:通过URL地址分享网页内容

②转码服务:通过URL地址翻译对应文本的内容

③在线翻译:通过URL地址加载或下载图片

④图片、文章收藏功能

⑥未公开的api实现以及其他调用URL的功能

2.从URL关键字中寻找

share wap url link src source target u 3g display sourceURL imageURL domain

3.验证

①因为SSRF漏洞是构造服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的来判断是否存在SSRF漏洞。

②在页面源码中查找访问的资源地址 ,如果该资源地址类型为 http://www.xxx.com/a.php?image=的就可能存在SSRF漏洞。

4.绕过

1、利用解析URL所出现的问题(@)

在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。

例:http://www.baidu.com@192.168.0.1/

当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.baidu.com,认为是访问请求的host地址时)对上述URL的内容进行解析的时候,很有可能会认为访问URL的host为www.baidu.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。

2、利用302跳转

如果后端服务器在接收到参数后,正确的解析了URL的host,并且进行了过滤,我们这个时候可以使用302跳转的方式来进行绕过。

①在网络上存在一个很神奇的服务,http://xip.io 当我们访问这个网站的子域名的时候,例如192.168.0.1.xip.io,就会自动重定向到192.168.0.1。

②由于上述方法中包含了192.168.0.1这种内网IP地址,可能会被正则表达式过滤掉,我们可以通过短地址的方式来绕过。经过测试发现新浪,百度的短地址服务并不支持IP模式,所以这里使用的是http://tinyurl.com所提供的短地址服务。

3、更改IP地址写法

一些开发者会通过对传过来的URL参数进行正则匹配的方式来过滤掉内网IP。

对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:

(1)、8进制格式:0300.0250.0.1

(2)、16进制格式:0xC0.0xA8.0.1

(3)、10进制整数格式:3232235521

(4)、16进制整数格式:0xC0A80001

还有一种特殊的省略模式,例如10.0.0.1这个IP可以写成10.1

四、容易造成漏洞的php函数

1.file_get_contents()   //从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。

2.fsockopen()   //获取用户指定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

3.curl_exec()   //主要是配合其他协议一起使用curl支持file、dict、gopher、ftp、telnet、http等协议通常攻击中用到的是file,dict,gopher这几个协议。

五、防御

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

引用:http://www.cnblogs.com/s0ky1xd/p/5859049.html

http://www.freebuf.com/articles/web/135342.html

SSRF漏洞浅析的更多相关文章

  1. WebLogic SSRF 漏洞 (简要翻译)

    [Ref]http://blog.gdssecurity.com/labs/2015/3/30/weblogic-ssrf-and-xss-cve-2014-4241-cve-2014-4210-cv ...

  2. SSRF漏洞总结

    SSRF漏洞:(服务端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问的内部系统.(正是因为它是由服务端发起的,所以它能够请求到与它相连而 ...

  3. 浅谈SSRF漏洞

    SSRF漏洞是如何产生的? SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF是要目标网站 ...

  4. SSRF漏洞挖掘经验

    SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞.一般情况下,SSRF攻击的目标是从外网无法访问 ...

  5. weblogic系列漏洞整理 -- 5. weblogic SSRF 漏洞 UDDI Explorer对外开放 (CVE-2014-4210)

    目录 五. weblogic SSRF 漏洞 UDDI Explorer对外开放 (CVE-2014-4210) 1. 利用过程 2. 修复建议 一.weblogic安装 http://www.cnb ...

  6. SSRF漏洞

    概念:服务端在获取攻击者输入的url时,如果这个过程中,服务端并没有对这个url做任何的限制和过滤,那么就很有可能存在ssrf漏洞. 漏洞利用:SSRF攻击的目标一般是外网无法访问的内部系统.攻击者可 ...

  7. Android WebView File域同源策略绕过漏洞浅析

       0x00     我们首先讲一个webView这种方法的作用: webView.getSettings().setAllowFileAccessFromFileURLs(false);     ...

  8. 一个网络设备的常见功能--连通性检查SSRF漏洞--被黑客利用当做扫描器

    一.我们先来看一下很多网络设备都有的一个常见功能--连通性测试: 很多网络设备都具备与其他设备通信,联动的功能,例如网络设备联动安全设备,网络设备联动认证设备等等.此时都需要一个对端IP和对端端口号作 ...

  9. SSRF漏洞的挖掘经验

    本文转自:https://sobug.com/article/detail/11 SSRF概述 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造 ...

随机推荐

  1. maven war项目完整配置

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  2. php 根据输入的参数,获取上季度最后一个月的时间

    public function getTime( $time ='2017-06-01 00:00:00'){ $month = date('m',strtotime($time)); $season ...

  3. 不安全代码只会在使用 /unsafe 编译的情况下出现

    在你的项目属性页面里面,把是否包含unsafe代码的选项选上

  4. python面试题总结(1)

    1.python常用的数据类型. int.float.str.set.list.dict.tuple.frozenset.bool.None. 2.docstring是什么? Docstring是一种 ...

  5. Webpack学习-Loader

    什么是Loader? 继上两篇文章webpack工作原理介绍(上篇.下篇),我们了解到Loader:模块转换器,也就是将模块的内容按照需求装换成新内容,而且每个Loader的职责都是单一,只会完成一种 ...

  6. linux jpg文件查找木马

    find ./ -type f -name "*.jpg" | xargs grep "eval"

  7. 关于scrapy

    Scrapy安装 1,Pip install wheel 2,pip install 复制路径+文件名Twisted-18.7.0-cp36-cp36m-win_amd64.whl 3,Pip ins ...

  8. MSRHook与SSDTHook

    //方式1:MSR Hook #include <ntifs.h> UINT32 oldaddr = ; UINT32 pidtoprotect = ; PCLIENT_ID pid = ...

  9. css--父元素塌陷

    当父元素内都是漂浮元素时,会造成父高度塌陷的问题.(因为等同于父元素内容为空,所以长,宽都等于空) 我们想要的页面结构是: <!DOCTYPE html> <html lang=&q ...

  10. SVN删除文件和恢复文件

    SVN删除文件 一.本地删除SVN删除文件中的本地删除,指的是在客户端delete了一个文件,但还没有commit,使用revert来撤销删除. 二.服务器删除1.通过本地删除后提交服务器a)Upda ...