【SSRF漏洞】原理、危害利用、触发点、利用过程、协议使用……

举报
黑色地带(崛起) 发表于 2023/02/16 23:08:34 2023/02/16
【摘要】 【SSRF漏洞】原理、危害利用、触发点、利用过程、协议使用……

【SSRF漏洞】原理、危害利用、触发点、利用过程、协议使用……

 目录

一、简介: 

二、产生原因:

三、危害与利用:

3.1、端口扫描

3.2、攻击内网、本地漏洞服务

3.3、内网Web应用指纹识别、攻击漏洞应用

3.4、文件读取

四、防护与绕过

4.1、防护:

4.2、绕过:

方法一:使用特殊格式绕过

方法二:IP地址转为进制及IP地址省略绕过

方法三:域名的配置

五、SSRF漏洞点: 

5.1、功能分析:

5.2、关键字分析:

5.3、(可能存在)漏洞函数:

5.3.1、file_get_contents()

5.3.2、curl_exec()

5.3.3、fsockopen()

六、file_get_contents()和curl_exec()区别:

七、漏洞的验证:

7.1、方法一:对URL地址进行分析

7.2、方法二:对数据包进行分析

八、举例(利用过程):

8.1、pikachu(SSRF-curl)

8.1.1、第一步:分析是否可能存在SSRF

8.1.2、第二步:测试是哪种函数引起的SSRF漏洞

8.2、pikachu(SSRF-file_get_contents)

8.2.1、第一步:判断是否存在SSRF漏洞

8.2.2、第二步:利用漏洞


编辑


一、简介: 

全称Server-Side Request Forgery:服务器端请求伪造

顾名思义,攻击者伪造成服务器发起的请求,ssrf的目标是从外网,通过服务器漏洞,访问到原本无法访问到的内部网络



二、产生原因:

因为用户功能的需要,需要服务端A提供从其他服务器B获取数据的功能,但是由于没有对目标地址没有很好的过滤和限制,导致攻击者可以伪造成服务端A,然后向用户发出伪造请求,从而达到访问内部网络的目的。




三、危害与利用:

3.1、端口扫描

对外网、服务器所在内网、本地进行端口扫描

eg:http://example.com/ssrf.php?url=http://192.168.139.1:80/

通过应用响应时间、返回的错误信息,未开放端口会显示空白或者报错,开放端口会显示服务的banner信息


3.2、攻击内网、本地漏洞服务

攻击运行在内网或本地的应用程序(溢出、弱口令等)

利用Gopher协议拓展攻击面



3.3、内网Web应用指纹识别、攻击漏洞应用

访问默认文件,对内网web应用进行指纹识别(框架,平台,模块以及CMS等 )

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


第一步,应用指纹识别---->第二步,寻找漏洞----->第三步,漏洞利用




3.4、文件读取

读取本地文件,利用file协议读取本地文件,提交参数等

http://example.com/ssrf.php?url=file:///etc/passwd






四、防护与绕过

4.1、防护:

使用正则表达式的方式对SSRF中的请求地址进行过滤

eg:限制请求特定域名、禁止请求内网IP。


4.2、绕过:

方法一:使用特殊格式绕过

htttp://example.com@evil.com


方法二:IP地址转为进制及IP地址省略绕过

原始:地址127.0.0.1

八进制:0177.00.00.01

十进制:2130706433

十六进制:0x7f.0x0.0x0.0x1

IP地址省略写法:127.1


方法三:域名的配置

有可控域名A,将域名A记录指向欲请求的IP进行绕过操作

evil.example.com => 10.10.11.11




编辑



五、SSRF漏洞点: 

5.1、功能分析:

(需要请求外部服务器的)

通过URL地址分享、通过URL转码服务、通过URL在线翻译、通过URL加载或下载图片、通过URL的收藏、对URL采集的功能、其他调用URL的功能


5.2、关键字分析:

对于上述可能产生SSRF漏洞的URL关键字进行分析总结

share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

然后可以使用URL对应的关键字进行搜索

inurl:share



5.3、(可能存在)漏洞函数:

(这些函数的使用不当会导致SSRF漏洞的产生)

5.3.1、file_get_contents()

定义:把整个文件读入一个字符串中

语法:file_get_contents(path,include_path,context,start,max_length)


参数 描述
path 必需。要读取的文件
include_path 可选。要在 include_path 中搜寻文件,将该参数设为 "1"
context

可选。规定文件句柄的环境

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

start 可选。文件中开始读取的位置 (适用于PHP 5.1以后)
max_length 可选。读取的字节数 (适用于PHP 5.1以后)


5.3.2、curl_exec()

定义:执行一个cURL会话

 参数:ch  由 curl_init() 返回的 cURL 句柄。

用法:抓取URL并把它传递给浏览器 curl_exec($ch)



5.3.3、fsockopen()

定义:打开一个网络连接或者一个Unix套接字连接

参数 描述
hostname 安装了OpenSSL,添加访问协议ssl://或者是tls://,从而可以使用基于TCP/IP协议的SSL或者TLS的客户端连接到远程主机
port 端口号。如果对该参数传一个-1,则表示不使用端口,例如unix://
errno 如果errno的返回值为0,而且这个函数的返回值为false,那么这表明该错误发生在套接字连接(connect())调用之前,导致连接失败的原因最大的可能是初始化套接字的时候发生了错误
errstr

错误信息将以字符串的信息返回。

timeout 设置连接的时限,单位为秒。


六、file_get_contents()和curl_exec()区别:

file_get_contents():只能使用GET方式获取数据

curl_exec():支持多种协议




七、漏洞的验证:

 根据漏洞产生的原理,对所我们所测试的地方进行一个分析

首先这个地方应该是服务器A请求访问以外的服务端B,而不是客户端向服务器A发起请求

使用排除法:看URL地址中有没有包含其他URL地址,再看数据包的请求


7.1、方法一:对URL地址进行分析

我在网上随便找了一张图片,右键新标签打开后

对URL地址进行了解码,就看见了2个包含的URL地址


编辑



7.2、方法二:对数据包进行分析

其实也可以使用burpsuite抓包进行分析

这里直接看见了文件的URL是其他网站来的

编辑



编辑



八、举例(利用过程):

8.1、pikachu(SSRF-curl)

8.1.1、第一步:分析是否可能存在SSRF

(一般要测试3个函数curl_exec、file_get_content、fsockopen是否能执行成功)

点击它

编辑


发现是URL传递的

(如果无法显示,就在127.0.0.1后面加上端口号)

编辑





8.1.2、第二步:测试是哪种函数引起的SSRF漏洞

这是个SSRF(curl)靶场,就不做过多测试

函数不同所支持的功能也存在差别


对端口进行一个探测(http协议)

http://localhost:8080/pikachu-master/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1:3306

编辑

 能够探测到内容,说明存在SSRF漏洞,并且进一步尝试其他操作



内网应用指纹识别(http协议)

(这个我在尝试的时候,如果原文件带了版本号,读取的时候也要带,大小写不一样不影响)

编辑



读取文件(file协议)

编辑




8.2、pikachu(SSRF-file_get_contents)


8.2.1、第一步:判断是否存在SSRF漏洞

上一题是url,这一题是file函数

但是操作还是基本类似

编辑


8.2.2、第二步:利用漏洞

读取php源码

http://localhost:8080/pikachu-master/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

编辑


再使用base64解密即可得到源码

编辑


读取本地host等文件

http://localhost:8080/pikachu-master/vul/ssrf/ssrf_fgc.php?file=file://c:\windows\system32\drivers\etc\hosts

编辑



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。