一、初识SSRF漏洞

1.定义

SSRF漏洞(跨站服务器攻击)是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。

就相当于是你可以访问A网站,不可以访问B网站,A和B是都同一个服务器之下,通过服务器伪造命令,利用A网站的权限登录B网站。直接是SSRF漏洞最简单直接的理解,但是实现这个漏洞的过程还是很复杂的,需要用到代码审计也就是语言,这个也不是一定的,因为还是有一些个别的网站不是用JavaScript写的还是要针对不同的语言来找特殊的参数,尤其是在做白盒测试中,代码审计是很重要的。关键要看一些特征参数。

2.产生原理

很多web应用都提供了从其他的服务器上获取数据的功能。使用指定的URL,web应用便可以获取图片,下载文件,读取文件内容等。SSRF的实质是利用存在缺陷的web应用作为代理攻击远程和本地的服务器。一般情况下,

SSRF攻击的目标是外网无法访问的内部系统,黑客可以利用SSRF漏洞获取内部系统的一些信息(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

3.会导致的危害

从上面的示例代码可以看出,请求是从服务器发出的,那么攻击者可以通过构造恶意的url来访问原本访问不到的内网信息,攻击内网或者本地其他服务。这里根据后续处理逻辑不同,还会分为回显型ssrf和非回显型ssrf,所谓的回显型的ssrf就是会将访问到的信息返回给攻击者,而非回显的ssrf则不会,但是可以通过dns

log或者访问开放/未开放的端口导致的延时来判断。

SSRF的最大的危害在于穿透了网络边界,但具体能做到哪种程度还需要根据业务环境来判断。例如我们在SSRF的利用中,如果需要更深一步扩展,第一反应通常是去攻击可利用的redis或者memcache等内网服务拿shell,但需要注意的是操作redis,memcache的数据包中是需要换行的,而http/https协议一般无法满足我们要求,所以即使内网存在可利用的redis,也并非所有的ssrf都能利用成功的。但是,对于memcache来说,即使只能使用https协议,利用memcache来getshell却并非不可能,本文会详细介绍一种新型的攻击方式。

4.常见产生SSRF的地方

平常在做渗透测试工作的过程中哪些地方容易产生SSRF漏洞,可以看到大部分相关资料都会显示,容易产生SSRF的地方在社交分享、图片加载、邮件系统、数据库等。为什么这些地方会出现呢,社交分享可能会分享到其他网址对吧,如果我们替换其网址为我们的本地地址呢,会出现什么样的情况?同一个地址更换不同的端口又会有什么不同,加载图片请求的服务器可能和你所访问的网站不是同一个服务器,这样是不是能探测内网的同一局域网段的情况呢,邮件系统也是同一道理,这些都是探测SSRF漏洞的手段。

5.常见缺失函数

二、SSRF漏洞利用

1.函数

(1) file_get_contents

这个函数的名称很简单 就是获取文件的参数
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法

<?phpecho file_get_contents("test.txt");?>

输出:test.txt文本中所写的内容

(2)fsockopen()

这个函数的意思就是说可以从服务器获取用户的url数据
fsockopen函数实现获取用户制定url的数据(文件或者html)。这个函数会使用socket跟服务器建立tcp连接,传输原始数据。

<?php$fp = fsockopen("191.168.100.100", 80, &$errno, &$errstr, 10);if(!$fp){echo "$errstr ($errno)<br>\n";}else {fputs($fp,"GET / HTTP/1.0\nHost: 191.168.100.100\n\n");while(!feof($fp)) {echo fgets($fp,128);}fclose($fp);} ?>

(3) curl_exec()

执行一个curl会话
下面代码演示来源于菜鸟教程

 <?php// 创建一个cURL资源
$ch = curl_init();
// 设置URL和相应的选项curl_setopt($ch, CURLOPT_URL, "http://www.w3cschool.cc/");curl_setopt($ch, CURLOPT_HEADER, 0);
// 抓取URL并把它传递给浏览器curl_exec($ch);
// 关闭cURL资源,并且释放系统资源curl_close($ch);?>

2.协议

(1)file协议

其实很简单看到file的就是读取文件 格式:file:///文件路径

(2)http协议

HTTP——(hypertext transfer protocol)超文本传输协议

GET——获取资源;
POST——传输资源;
PUT——更新资源;
DELETE——删除资源;
HEAD——获取报文首部;

(3)dict协议

这个协议主要是数组的交互。是一种以键-值对形式存储数据的数据结构,就像电话号码簿中的名字和电话号码一样。这里的键是指你用来查找的东西,值是查找得到的结果

(4)gopher协议

gopher协议是一种信息查0找系统,他将Internet上的文件组织成某种索引,方便用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。利用此协议可以攻击内网的

Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这拓宽了 SSRF 的攻击面.

三、绕过

1.绕过方式

(1)检查IP是否为内网IP

很多开发者认为,只要检查一下请求url的host不为内网IP,即可防御SSRF。

通常使用正则过滤以下5个IP段:

192.168.0.0/16
10.0.0.0/8
172.16.0.0/12
127.0.0.0/8
0.0.0.0/8   #在Linux下,127.0.0.1与0.0.0.0都指向本地

这种通常可以用IP地址进制转换绕过

利用八进制IP地址绕过 0177.0.0.1
利用十六进制IP地址绕过 0x7f000001
利用十进制的IP地址绕过 2130706433

(2)Host获取与DNS绕过

检查获取到的Host是否是内网IP防御SSRF

这种防御方法可以用DNS解析绕过

Host可能是IP形式,也可能是域名形式。

如果Host是域名形式,我们是没法直接比对的,只要其解析到内网IP上,就可以绕过。

网上有个神奇域名 http://xip.io (有墙),www.127.0.0.1.xip.io,会自动解析到127.0.0.1

(3)通过各种协议

GOPHER:通过GOPHER我们在一个URL参数中构造Post或者Get请求,从而攻击内网应用,例如Redis服务。

File:用File协议访问本地计算机中的文件,例如file:///etc/password.

(4)利用URL解析器滥用问题

某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。

这时候可能会出现对URL参数解析不当,导致可以绕过过滤

http://www.baidu.com@127.0.0.1

当后端程序通过不正确的正则表达式,对上述URL的内容解析的时候

会认为访问URL的host为www.baidu.com,而实际上请求的是127.0.0.1上的内容

四、修复

修复方案

SSRF的修复比较复杂,需要根据业务实际场景来采取不同的方案,例如前面说到的python中不同url库对url的解析就不一致,所以对于有条件的公司,建立一个代理集群是比较可靠的方案,将类似请求外部url的需求整理出来,分为纯外网集群和内网集群进行代理请求。

如果需要从代码层面来修复的话,需要注意一下几点:

  1. 去除url中的特殊字符

  2. 判断是否属于内网ip

  3. 如果是域名的话,将url中的域名改为ip

  4. 请求的url为3中返回的url

  5. 请求时设置host header为ip

  6. 不跟随30x跳转(跟随跳转需要从1开始重新检测) 其中第一步是为了防止利用url parse的特性造成url解析差异,第三步是为了防止dnsrebinding,第5步是为了防止以ip请求时,某些网站无法访问的问题,第6步是为了防止30x跳转进行绕过。

SSRF漏洞基础讲解相关推荐

  1. 29.CSRF及SSRF漏洞案例讲解

    文章目录 CSRF&SSRF---漏洞案例讲解 1. CSRF---跨站请求伪造攻击 CSRF漏洞解释,原理 导图 原理详解 CSRF漏洞检测,案例,防御 防御方案 2. SSRF(服务器端请 ...

  2. CSRF和SSRF漏洞案例讲解

    CSRF的概念 CSRF:跨站请求伪造(Cross-site request forgery)CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法.当用户访问含有恶意代码的网 ...

  3. PHP代码审计8—SSRF 漏洞

    文章目录 一.SSRF漏洞基础 1.漏洞原理与防御方法 2.引发函数与漏洞场景 3.常见的利用场景 4.常见的防御绕过方法 二.SSRF-labs分析利用 1.file_get_content() 2 ...

  4. 大一第二学期周报8Web基础之XXS跨站漏洞详解——1XSS漏洞基础详解

    挖到XSS漏洞可以挖到cookie(储存在用户本地终端上的数据),也可找到后台地址. 难点:挖掘中的 闭合 和 绕过 内容大纲 1.XSS漏洞基础讲解: 2.XSS漏洞发掘与绕过: 3.XSS漏洞的综 ...

  5. SSRF服务器端请求伪造漏洞基础

    SSRF服务器端请求伪造漏洞基础,下面分五个专题来说 1.什么是ssrf? 2.ssrf的相关协议 3.有无回显的ssrf漏洞确认 4.ssrf如何利用? 5.ssrf漏洞的绕过 6.ssrf漏洞的加 ...

  6. 【干货】web安全基础学习之SSRF漏洞

    一.SSRF简介 SSRF(Server-Side Request Forgery),服务器端请求伪造,利用漏洞伪造服务器端发起请求,从而突破客户端获取不到数据限制. 二.SSRF的危害 ssrf漏洞 ...

  7. web渗透漏洞实例讲解视频课程

    课程介绍 XX学院联合知道创宇404 实验室·漏洞社区组共同打造了<漏洞实例讲解>课程.这门课程针对当下流行的 9 类可直接威胁企业安全的高危漏洞进行讲解,通过对15 个经典漏洞的深入剖析 ...

  8. 【漏洞学习——SSRF】腾讯某处SSRF漏洞(非常好的利用点)附利用脚本

    漏洞细节 ## 1. 描述 本文章将概述一些经典的SSRF漏洞利用原理,从Fuzz扫描开放的服务到漏洞的自动化利用,刚好腾讯的这个漏洞点,非常适合做为案例来演示. ### 1.1 漏洞信息 > ...

  9. SSRF漏洞之常见Bypass篇

    SSRF–(Server-side Request Forge, 服务端请求伪造) 定义:由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务 SSRF漏洞思维导图如下,本 ...

最新文章

  1. 再见QQ,再见QQ游戏!
  2. 计算机视觉方向简介 | 深度学习视觉三维重建
  3. torch.view()
  4. Nginx在Windows平台的配置与使用
  5. Scala自动隐式转换
  6. 大众点评账号业务高可用进阶之路
  7. mysql 存储引擎_MySQL存储引擎
  8. 一步一步学VBScript(4)之WSH对象三
  9. oracle里面的degree,收集统计信息degree不生效的问题
  10. 初学者指南:为开源做贡献
  11. 阿古斯机器人_炉石传说三选一卡池全部卡牌一览 挑战之旅冒险模式攻略
  12. linux记账软件下载,速手记账app安卓版下载-速手记账软件官方版v1.1.7-Linux公社
  13. 关于无穷级数收敛的充要条件的猜想
  14. 记一次生产httpclient导致的tomcat假死事件
  15. VLAN隔离葵花宝典(一)
  16. 三极管参数应用大全(转载)
  17. dxf解析python_Python 读取DXF文件
  18. 数据挖掘——航空公司客户分类与价值评估案例
  19. 【观察】致敬开发者,华为云最新地铁广告释放了哪些信号?
  20. HttpClient请求范文示例,及注意点提示

热门文章

  1. 华为云位居中国金融云基础设施市场第一
  2. 进入互联网行业,真的是吃青春饭吗?
  3. 微软官宣!与英伟达签署10年游戏合作;星巴克推出橄榄油咖啡 | 美通企业日报...
  4. 进销存软件从流程角度,降低餐饮行业人力资源成本
  5. 学术论文写作指导网课答案——第一章
  6. 安卓Android测试工具 和 苹果IOS集成调试测试环境工具(GT)
  7. 广告算法在阿里文娱用户增长中的实践
  8. Sqoop安装部署和数据的导入导出案例详解
  9. 成都脑梗康复治疗费用?顾连康复治疗脑梗价格
  10. 用简单的Python语句写了个模拟双色球摇奖,希望能中。。