【SSRF】之SSRF的理论知识

摘要:
1、 SSRF概念的全称是Server-sideRequestFogery,中文意思是服务器端请求伪造。该漏洞的原因是服务器提供了从其他服务器应用程序获取数据的功能,例如从指定的URL地址获取网页内容,在指定的地址加载图片、数据、下载等。

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)

一、概念

SSRF全称为Server-side Request Fogery,中文含义为服务器端请求伪造,漏洞产生的原因是服务端提供了能够从其他服务器应用获取数据的功能,比如从指定的URL地址获取网页内容,加载指定地址的图片、数据、下载等等。

一般情况下,我们服务端请求的目标都是与该请求服务器处于同一内网的资源服务,但是如果没有对这个请求的目标地址、文件等做充足的过滤和限制,攻击者可通过篡改这个请求的目标地址来进行伪造请求。

二、漏洞可能出现的地方

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

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

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

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

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

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

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

8.数据库内置功能:MongoDB的copyDatabase函数

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

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

11.未公开的api实现以及其他扩展调用URL的功能:可以利用Google 语法加上这些关键字去寻找SSRF漏洞

(一些的URL中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……)

12.从远程服务器请求资源:upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php

13.头像处:某易就喜欢远程加载头像,例如:http://www.xxxx.com/image?url=http://www.image.com/1.jpg

14.邮件系统:比如接收邮件服务器地址

三、漏洞验证

1.浏览器f12查看源代码看是否是在本地进行了请求

  • 该资源地址类型为 http://www.xxx.com/a.php?image=(地址)的就可能存在SSRF漏洞

2.DNSLog等工具进行测试,看是否被访问

  • 可以在盲打后台用例中将当前准备请求的uri 和参数编码成base64,这样盲打后台解码后就知道是哪台机器哪个cgi触发的请求

3.抓包分析发送的请求是不是由服务器的发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务的内网地址

  • 从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
  • 通过二级域名暴力猜解工具模糊猜测内网地址
  • 通过file协议读取内网信息获取相关地址

4.直接返回的Banner、title、content等信息

5.留意布尔型SSRF,通过判断两次不同请求结果的差异来判断是否存在SSRF,类似布尔型SQL盲注方法

四、利用方式

1.让服务端去访问相应的网址

2.让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms

3.可以使用file、dict、gopher、ftp协议进行请求访问相应的文件

  • dict:探测内网服务
1 ?url=dict://10.10.10.130:6379
2 ?url=dict://127.0.0.1:6379/info(redis的相关配置)
  • file:获取(读取)当前服务器中的文件
?url=file:///etc/passwd
  • http/s:执行HTTP请求或HTTPS请求
?url=http://10.10.10.129/
  • php协议:可以在file_get_contents中应用
?url=php://filter

4.攻击内网web应用:可以向内部任意主机的任意端口发送精心构造的数据包{payload}

5.攻击内网应用程序:利用跨协议通信技术

6.判断内网主机是否存活:方法是访问看是否有端口开放

7.DoS攻击:请求大文件,始终保持连接keep-alive always

五、绕过技巧

1.http://baidu.com@www.baidu.com/ >>> http://www.baidu.com/

2.各种IP地址的进制转换

1 可以是十六进制,八进制等,115.239.210.26 >>> 16373751032
2 首先把这四段数字给分别转成16进制,结果:73ef d2 1a
3 然后把 73efd21a 这十六进制一起转换成8进制
4 记得访问的时候加0表示使用八进制,十六进制加0x

3.URL跳转绕过:http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/

4.短网址绕过:http://t.cn/RwbLKDx

5.xip.io来绕过:http://xxx.192.168.0.1.xip.io/ >>> 192.168.0.1 (xxx 任意)

6.限制子网段,加80端口绕过

7.探测内网域名,或者将自己的域名解析到内网ip

8.利用句号:127。0。0。1 >>> 127.0.0.1

六、修复

1.禁止跳转

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

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

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

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

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

免责声明:文章转载自《【SSRF】之SSRF的理论知识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python Twisted 学习系列21(转载stulife最棒的Twisted入门教程)如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 实现异步加载图片

麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的. 今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片都是使用了AsynTask这个API,继续这个类,实现起来非常简单也很方便.在doInBackground()方法里...

html5 播放 rtsp

目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 html 并不标准支持 RTSP 流。除了 Firefox 浏览器可以直接播放 RTSP 流之外,几乎没有其他浏览器可以直接播放 RTSP 流。Electron 应用是基于 Chromium 内核的,因此也不能直接播放 RTSP 流。 在借助一定工具的情况下,可以实现在 Web 页面上播放 R...

okhttp同步异步下载文件,与http请求工具类

<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.8.0</ve...

XSS攻击原理、示例和防范措施 --

XSS攻击 XSS(Cross-Site Scripting,跨站脚本)攻击历史悠久,是危害范围非常广的攻击方式。 Cross-Site Stripting的缩写本应该是CSS,但是为了避免和Cascading style sheets(层叠样式表)的缩写混淆,所以将Cross(即交叉)使用交叉形状的X表示。 攻击原理 XSS是注入攻击的一种,攻击者通过将...

接口自动化之接口整理(抓包)

  陆续在几个公司都有接触过接口测试,每个公司的接口测试需求都差不多。但是,项目的大小会影响接口测试任务的简繁。   涉及到TCP协议的接口,也涉及到http协议的接口。   前段时间,刚接到一个走HTTP协议的接口测试需求。   开发提供过来的接口如下: test:  1. get_list  a. url - subject_id / complian...

表单的提交方法

定义和用法 method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面)。 表单数据可以作为 URL 变量(method="get")或者 HTTP post (method="post")的方式来发送。 实例 在下面的例子中,表单数据将通过 method 属性附加到 URL 上: <form action="form_...