前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSRF漏洞原理、挖掘技巧及实战案例全汇总

SSRF漏洞原理、挖掘技巧及实战案例全汇总

作者头像
Jayway
发布2019-09-29 17:26:09
4.1K0
发布2019-09-29 17:26:09
举报
文章被收录于专栏:卓文见识卓文见识卓文见识

1、概念:

SSRF(Server-Side Request Forgery:服务器端请求伪造)产生原因是服务端提供了从其他服务器应用获取数据的功能,比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

很好理解,这个请求的发起端是服务器,访问目标是和服务器处于同一内网的资源服务器,如果没有对这个目标地址、文件类型做过滤与限制,就可以篡改这个请求地址来伪造请求,所以顾名思义,漏洞名叫“服务器端请求伪造”。

因SSRF通常被用来进行端口扫描,所以这个漏洞也叫XSPA,全称cross site port attack,跨站点端口攻击。

2、漏洞危害:

1、读取或更新内部资源,造成本地文件泄露;

2、扫描内网主机端口并获取服务器上运行的服务版本,不得不提的案例是Weblogic SSRF探测内网Redis端口并结合CRLF写shell(阅读原文):

3、将含有漏洞防主机用作代理/跳板攻击内网主机,绕过防火墙等;

3、挖掘技巧:

1、 根SSRF漏洞特征,挖掘方法有二:

  • 数据层面需要关注的关键字段是URL、IP地址、链接等,关键字有:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……
  • 业务层面需关注任何通过URL进行资源调用(入)或向外发起网络请求(出)的功能,如通过url文件上传下载处是存在SSRF最多的场景。其他具体业务场景包括:内容展示、社交分享、在线翻译、收藏功能、WebMail邮箱、各种处理工具(FFpmg)等

2、探测是否存在漏洞,方法有二:

  • 请求包中将参数更改为不同的IP / DNS或TCP端口,观察返回包长度、返回码、返回信息及响应时间,不同则可能存在SSRF漏洞;
  • 请求自己的公网服务器(或CEYE),使用nc –lvp监听请求。

3、证明漏洞存在后,使危害最大化可进一步利用。

4、绕过手段:

任何一种绕过,关键的问题都是“开发和测试的认知范围”问题,具体到SSRF则是对于IP和URL地址的编码和解析问题:

1、 大部分修复方案使用的是IP黑名单,初步使用进制转换绕过,详细可访问:http://www.pc-help.org/obscure.htm

2、通用手段:@绕过、URL跳转绕过、短网址绕过、Gopher等协议、域名解析绕过、xip.io绕过(http://xxx.192.168.0.1.xip.io/),点变句号及组合技巧等;

2、 其他技巧:如Localhost绕过手段:使用http://localtest.me或[ :: ]替代;

5、实战案例:

1、 通过URL上传图片:

一般业务系统上传图片主要有两种方式,本地文件上传和通过url上传,本地上传可能存在上一篇讲的“文件上传漏洞”,通过url地址上传则很可能存在SSRF漏洞,如:Instacart更改图片引用地址,参数为:

list[remote_image_url]=https://example.com/yourimage.jpg

将url参数改为:http://127.0.0.1:21,返回信息:

试图连接本地SSH服务失败,说明SSH服务关闭。Mail.ru上也有类似的案例,通过http://allods.my.com/forum/index.php?form=AvatarEdit从远程服务器上传头像,当参数设置为:http:// localhost:3306,提示“选择了损坏的图像”,说明数据库端口开放,设置为http:// localhost:1337,提示”输入网址可能不正确”,说明1337端口关闭。

有些情况下可能通过审查元素可以更改上传类型:type=file归为type=url:

2、 RelateIQ注册功能处SSRF

漏洞存在于容易忽视的注册功能,有一个填写节点url地址的字段:

通过将https://127.0.0.1:1字段填写为不同的端口,返回信息不同,关闭端口返回信息

"Unable to connect to the remote server":

开放端口返回状态码504或信息:"The underlying connection was closed: An unexpected error occurred on a send"

可以批量进行端口扫描:

3、 Nextcloud邮箱服务器设置

邮箱服务器设置,访问

https://demo.nextcloud.com/xxx/settings/admin/additional切换到SMTP模式时,输入不同地址,返回提示信息不同:

设置不同的主机和端口,可根据不同返回信息判断端口开放情况:

4、 Blind SSRF

提供一种”无中生有”的另类思路,在某些地方进行盲打SSRF:Mixmax网站的职业编辑表单处https://mixmax.com/careers可插入标签<img src=https://your_choice.com>使得服务器向特定url发送请求:

类似的,Shopify的一个图片上传处允许上传SVG文件,包含如下内容

<image xlink:href="http://example.com/?evil=var"/>具体内容为:

Server端nc回显如下:

根据这个思路,经常会有XSS+SSRF+Redis的组合拳击,一个CTF案例:

https://www.anquanke.com/post/id/156377?from=singlemessage

5、 Slack黑名单绕过

黑名单试图禁止访问内部资源(loopback,10.0.0.0 /8,192.168.0.0 / 24,...)等,可以通过&phabricator_url=http://[::]:22/绕过,返回:

请求&phabricator_url=http://[::]:25/,返回:

6、 AlienVault黑名单绕过

https://www.threatcrowd.org/domain.php?

domain=169.254.169.254/存在SSRF漏洞,修复手段仅将IP地址列入黑名单,可以通过十进制方式进行绕过:

除此以外,还有其他编码绕过方式:

domain=0xA9.0xFE.0xA9.0xFE

domain=0xA9FEA9FE

domain=0251.0376.0251.0376

domain=0251.00376.000251.000376

domain=0251.0376.0xA9.0xFE

另一个典型思路,是通过一个解析为169.254.169.254的简单域进行绕过,如:metadata.nicob.net,由于任何域名都可以被解析到一个IP中,所以这种情况下任何基于字符串的黑名单过滤都是无效的,这是比较有效的一种绕过手段。

6、修复方案:

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

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

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

4.设置URL白名单或者限制内网IP(使用gethostbyname()判断是否为内网IP)

5.限制请求的端口为http常用的端口,比如 80、443、8080、8090

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卓文见识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、概念:
  • 2、漏洞危害:
  • 3、挖掘技巧:
  • 4、绕过手段:
  • 5、实战案例:
  • 6、修复方案:
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档