SSRF服务器端请求伪造漏洞之——原理及寻找方法

原理及寻找方法

目录

  • 原理及寻找方法
  • 简介
  • SSRF 形成原因
  • 小结
  • SSRF 漏洞出没位置
  • 验证方式
  • 绕过手法
    • 更改 IP 地址写法
  • SSRF常用的后端实现
    • file_get_contents
    • fsockopen()
    • curl_exec()

简介

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

SSRF 形成原因

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定 URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

首先,我们要对目标网站的架构了解,脑子了要有一个架构图。比如 : A 网站,是一 个所有人都可以访问的外网网站,B 网站是一个他们内部的网站,我们普通用户只可以访问 a 网站,不能访问 b 网站。但是我们可以同过 a 网站做中间人,访问 b网站,从而达到攻击 b 网站需求

所以一般攻击选择一台可以由我们访问的存在漏洞的外网服务器(作为跳板机)

正常用户访问网站的流程是
输入 A 网站 URL --> 发送请求 --> A 服务器接受请求(没有过滤),并处理 -->返回用户响应

		假设请求是 www.baidu,com/xxx.php?image=URL

那么产生 SSRF 漏洞的环节在哪里呢?就在安全的网站应接收请求后,检测请求的合法性的时候
产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以 及限制,导致 A 网站可以从其他服务器的获取数据

例如: www.oldboyedu.com/xxx.php?image=www.luffycity.com/1.jpg
如果我们将 www.luffycity.com/1.jpg 换为与该服务器相连的内网服务器地址会产生什么 效果呢?
如果存在该内网地址就会返回 1xx 2xx 之类的状态码,不存在就会其他的状态码

小结

SSRF 漏洞就是通过篡改获取资源的请求 ,将它发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。 SSRF 用途 攻击者利用
ssrf 可以实现的攻击主要有 5 种
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的 banner 信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网 web 应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的 web 应用,主要是使用 get 参数就可以实现的攻击(比如 struts2,sqli等);
5.利用 file 协议读取本地文件等。

SSRF 漏洞出没位置

所有调外部资源的参数都有可能存在 ssrf 漏洞、

1)分享:通过 URL 地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过 URL
地址加载或下载图片
5)图片、文章收藏功能
6)未公开的 api 实现以及其他调用 URL 的功能
7)从 URL 关键字中寻找、
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain、

验证方式

	burpsuite抓包分析
	右键打开图片

绕过手法

更改 IP 地址写法

		一些开发者会通过对传过来的 URL 参数进行正则匹配的方式来过滤掉内网 IP,如采用如下正则表达式:
			^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$
			^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$
			^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

对于这种过滤我们可以采用改编 IP 的写法的方式进行绕过,例如 192.168.0.1 这个 IP 地址
我们可以改写成:
(1)、8 进制格式:0300.0250.0.1
(2)、16 进制格式:0xC0.0xA8.0.1
(3)、10 进制整数格式:3232235521
(4)、16 进制整数格式:0xC0A80001 利用解析 URL 所出现的问题 在某些情况下,后端程序可能会对访问的 URL 进行解析,对解析出来的 host 地址进行过滤。这时候可能会出现对 URL 参数解析不当,导致可以绕过过滤。
http://[email protected]/
随意地址+攻击地址 当后端程序通过不正确的正则表达式(比如将 http 之后到 com 为止的字符内容,也就是 www.baidu.com,认为是访问请求的 host 地址时)对上述 URL 的内容进行解析的时候, 很有可能会认为访问 URL 的 host 为 www.baidu.com,而实际上这个 URL 所请求的内容 都是 192.168.0.1 上的内容。

SSRF常用的后端实现

ssrf 攻击可能存在任何语言编写的应用,代码审计中要注意以下函数 		

file_get_contents

从用户指定的 url 获取图片,然后把它用一个随机文 件名保存在硬盘上,并展示给用户

fsockopen()

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

curl_exec()

用来获取数据

你可能感兴趣的:(web渗透测试与代码审计,#+,SSRF服务器端请求伪造漏洞)