SSRF漏洞

SSRF漏洞

1、SSRF漏洞简介

SSRF(服务器端请求伪造)是一种由攻击者构造特殊形成的请求,并且由指定服务器端发起恶意请求的一个安全漏洞。 一般情况下,SSRF漏洞的攻击目标是攻击者无法直接访问的内网系统。

SSRF漏洞大多是由于服务端提供从其它服务器应用获取数据的功能而没有对目标地址做过滤和限制。

2、SSRF漏洞常见位置

  • 社交分享功能:获取超链接的标题等内容进行显示

  • 转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

  • 在线翻译:给网址翻译对应网页的内容

  • 图片加载/下载:富文本编辑器中的点击下载图片到本地、通过URL地址加载或下载图片

  • 图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

  • 云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行SSRF测试

  • 网站采集、抓取的地方:一些网站会针对输入的URL进行一些信息采集工作

  • 数据库内置功能:数据库的mongodb的copyDatabase函数等

  • 邮件系统:接收邮件服务器地址

  • 编码、属性信息、文件处理:ffpmg,ImageMagick,docx,pdf,xml处理器等

  • 未公开的API实现以及其它扩展调用URL的功能:可以利用google语法加上这些关键字去寻找SSRF漏洞。

    • URL关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

  • 从远程服务器请求资源

3、SSRF漏洞用途

  • 内外网的端口和服务扫描

  • 主机本地敏感数据的读取

  • 内外网主机应用程序漏洞的利用

  • 内外网web站点漏洞的利用

4、SSRF常见函数

php函数(函数在调用期间,攻击者可任意控制传递进来的参数造成危害):

file_get_contents()

file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法

fsockopen()

fsockopen() 函数打开一个网络连接或者一个Unix套接字连接

curl_exec()

curl_exec() 执行一个 curl 会话

SoapClient()

SoapClient() 类为SOAP 1.1,SOAP 1.2服务器提供客户端。它可以在 WSDL 或非 WSDL 模式下使用。

5、SSRF漏洞验证方法

1)通过抓包分析发送的请求是否是由服务器发送的,从而来判断是否存在SSRF漏洞。

2)在页面源码中查找访问的资源地址 ,资源地址类型为www.baidu.com/xxx.php?image=(地址)可能存在SSRF漏洞

6、SSRF漏洞利用

6.1 HTTP/HTTPS协议

当前应用获取用户传递过来的URL参数后端发送请求,并且将最终的请求结果返回到HTML前端页面。

http://[IP]/xxx.php?url=[IP]
http://[IP]/xxx.php?url=[IP]

SSRF漏洞服务器所在的内网大小、互通的网段,限制了当前能够获取到资源的数量。

如果服务器端对请求资源的协议做了限制,可以通过HTTPS协议进行绕过。

6.2 file协议

服务器端对请求资源所使用的协议方式没有进行限制就可以通过file协议访问当前服务器的本地文件

http://[IP]/xxx.php?url=file:///[路径]

6.3 dict协议

通过dict协议可以远程访问一个指定的tcp端口,并且会返回端口所提供的服务的部分组件信息

当目标端口开放(有服务信息显示,但会报错):

http://[IP]/xxx.php?url=dict://[IP]:[端口]

当目标端口关闭(无任何显示):

http://[IP]/xxx.php?url=dict://[IP]:[端口]

通过差异的对比,可确认内网端口开放情况。

6.4 Gopher协议

Gopher 协议是 HTTP 协议出现之前,在 Internet 上常见且常用的一个协议。现在 Gopher 协议已经慢慢淡出历史。

Gopher 协议在 SSRF 中发挥重要作用。利用此协议可以攻击内网的FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。

利用gopher协议可以getshell,使用ssrf漏洞结合gopher协议可以攻击内网redis。

7、防御

  • 禁用不需要的协议(如:file:///、gopher://,dict://等),仅允许HTTP和HTTPS请求

  • 统一错误信息,防止根据错误信息判断端口状态

  • 禁止302跳转,或每次跳转都检查新的Host是否是内网IP,直到抵达最后的网址

  • 设置URL白名单或者限制内网IP

本文作者:HKalpa

本文链接:https://www.cnblogs.com/HKalpa/p/17109474.html

版权声明:本作品采用本人所有操作均在实验环境下进行,用于其它用途后果自负,作者不承担相应的后果。中国大陆许可协议进行许可。

posted @   HKalpa  阅读(81)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 绅士 薛之谦
绅士 - 薛之谦
00:00 / 00:00
An audio error has occurred.

作词 : 薛之谦

作曲 : 薛之谦

编曲 : 杨子朴

好久没见了什么角色呢

细心装扮着

白色衬衫的袖扣是你送的

尽量表现着像不在意的

频繁暴露了自欺欺人者

越掩饰越深刻

你说我说听说

忍着言不由衷的段落

我反正决定自己难过

我反正决定自己难过

我想摸你的头发

我想摸你的头发

只是简单的试探啊

我想给你个拥抱

我想给你个拥抱

像以前一样可以吗

你退半步的动作认真的吗

小小的动作伤害还那么大

我只能扮演个绅士

才能和你说说话

我能送你回家吗

我能送你回家吗

可能外面要下雨啦

我能给你个拥抱

我能给你个拥抱

像朋友一样可以吗

我忍不住从背后抱了一下

我忍不住从背后抱了一下

尺度掌握在不能说想你啊

你就当刚认识的绅士

闹了个笑话吧

尽量表现着善解人意的

尽量表现着善解人意的

频繁暴露了不欲人知的

越掩饰越深刻

想说听说别说

忍着言不由衷的段落

我反正注定留在角落

我想摸你的头发

我想摸你的头发

只是简单的试探啊

我想给你个拥抱

我想给你个拥抱

像以前一样可以吗

你退半步的动作认真的吗

你退半步的动作认真的吗

小小的动作伤害还那么大

我只能扮演个绅士

才能和你说说话

我能送你回家吗

我能送你回家吗

可能外面要下雨啦

我能给你个拥抱

像朋友一样可以吗

我忍不住从背后抱了一下

我忍不住从背后抱了一下

尺度掌握在不能说想你啊

你就当刚认识的绅士

闹了个笑话吧

你能给我只左手

你能给我只左手

牵你到马路那头吗

我会像以前一样

我会像以前一样

看着来往的车子啊

我们的距离在眉间皱了下

迅速还原成路人的样子啊

越有礼貌我越害怕

绅士要放得下

制作人 : 杨子朴

钢琴 : 杨子朴

吉他 : 杨子朴

合声 : 杨子朴

录音 : 金宇

混音 : 王用均