SSRF (Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成,由服务端发起请求的一个安全漏洞。
很多Web应用都提供了从其他服务器上获取数据的功能。使用用户指定的URL,Web应用可以获取url中的图片,下文件,读文件等。
攻击者可以利用存在缺陷的web应用作为代理攻击远程和本地服务器。一般SSRF攻击的目标是从外网无法访问的内部系统。
## 一、成因、用途、点位
### SSRF形成原因:
SSRF漏洞形成的原因大多是因为服务端提供了从其他[服务器/应用]获取数据的功能,且没有对目标地址作过滤和限制。
比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。
>比如 :
>A 网站是所有人都可以访问的外网网站,B 网站是一个他们内部的网站
>我们普通用户只可以访问 a 网站,不能访问 b 网站。
>但是我们可以同过a网站做中间人,访问 b网站,从而达到攻击 b 网站需求
所以一般攻击是选择一台可以由我们访问的存在漏洞的外网服务器(作为跳板机)
正常用户访问网站的流程是
输入 A 网站 URL --> 发送请求 --> A 服务器接受请求(没有过滤),并处理 -->返回用户响应
产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以 及限制,导致 A 网站可以从其他服务器的获取数据
### 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等
例如: www.xxx.com/xxx.php?image=www.lucity.com/1.jpg
如果我们将 www.lucity.com/1.jpg 换为与该服务器相连的内网服务器地址会产生什么
在存在漏洞的情况想,如果存在该内网地址就会返回 1xx 2xx 之类的状态码,不存在就会其他的状态码
## 二、SSRF绕过与防护
### SSRF常用的后端实现
ssrf 攻击可能存在任何语言编写的应用,代码审计中要注意以下函数
1. file_get_contents
从用户指定的 url 获取图片,然后把它用一个随机文 件名保存在硬盘上,并展示给用户
2. fsockopen()
实现获取用户制定 url 的数据(文件或者 html)。这个函数会 使用 socket 跟服务器建立 tcp 连接,传输原始数据
3. curl_exec()
用来获取数据
### 绕过手法
**更改 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://www.baidu.com@192.168.0.1/`
当后端程序通过不正确的正则表达式(比如将 http 之后到 com 为止的字符内容,也就是 www.baidu.com,认为是访问请求的 host 地址时)对上述 URL 的内容进行解析的时候, 很有可能会认为访问 URL 的 host 为 www.baidu.com,而实际上这个 URL 所请求的内容是192.168.0.1 上的内容。
### SSRF 防护方法
1、防护措施
(黑名单)
(1)过滤 10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost 私有地址、IPv6 地址
(2)过滤 file:///、dict://、gopher://、ftp:// 危险 schema
(3)对返回的内容进行识别
(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)
2、最佳防护
1. 使用地址白名单
2. 对返回内容进行识别
3. 需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:
首先禁用`CURLOPT_FOLLOWLOCATION`;
然后通过域名获取目标ip,并过滤内部 ip;
最后识别返回的内容是否与假定内容一致
- src导航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查询
- 备案信息查询
- 信用信息查询
- IP反查站点的站
- 浏览器插件
- 收集子域名信息
- 在线平台
- 工具枚举
- ssl与证书透明度
- DNS历史解析
- DNS域传送漏洞
- C段探测
- JS文件域名&ip探测
- 搜索引擎&情报社区
- google黑客
- 威胁情报
- 钟馗之眼
- 收集相关应用信息
- 微信公众号&微博
- APP收集&反编译
- 收集常用端口信息
- 常见端口&解析&总结
- 扫描工具
- 网络空间引擎搜索
- 浏览器插件
- nmap扫描
- 收集敏感信息
- 源码泄露
- 邮箱信息收集
- 备份文件泄露
- 目录&后台扫描
- 公网网盘
- 历史资产
- 指纹&WAF&CDN识别
- 指纹识别
- CDN识别
- 绕过CDN查找真实IP
- WAF识别
- 漏洞资源和社工
- 漏洞公共资源库
- 社会工程
- 资产梳理
- 各种对渗透有帮助的平台
- 扫描器
- 扫描器对比
- AppScan(IBM)_web和系统
- AWVS_web扫描
- X-Scan_系统扫描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_绿盟_web
- 安恒明鉴
- Nessus_系统
- nexpose_系统
- 启明天镜_web_系统
- SQL注入
- 常用函数
- sql注入步骤
- union注入和information_schema库
- 函数和报错注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解决方案
- Access数据库注入
- MSSQL数据库注入
- MYSQL数据库注入
- 神器SQLmap
- xss跨站脚本攻击
- xss原理和分类
- xss案例和修复
- xss绕过技巧
- xss案例
- 文件上传下载包含
- 常有用文件路径
- 文件上传漏洞
- 文件下载漏洞
- 文件包含漏洞
- upload-labs上传漏洞练习
- XXE、SSRF、CSRF
- SSRF原理基础
- SSRF案例实战
- CSRF原理基础
- CSRF案例及防范
- XXE之XML_DTD基础
- XXE之payload与修复
- XXE结合SSRF
- 远程命令执行与反序列化
- 远程命令和代码执行漏洞
- 反序列化漏洞
- 验证码与暴力破解
- 爆破与验证码原理
- CS架构暴力破解
- BS架构暴力破解
- WEB编辑器漏洞
- 编辑器漏洞基础
- Ewebeditor编辑器
- FCKeditor编辑器
- 其他编辑器
- web中间件漏洞
- 中间件解析漏洞
- Tomcat常见的漏洞总结
- Jboss漏洞利用总结
- Weblogic漏洞利用总结
- WEB具体步骤
- 旁注和越权
- CDN绕过
- 越权与逻辑漏洞
- WEB应用常见其他漏洞
- WEB登陆页面渗透思路
- 获取WEBshell思路
- 社工、钓鱼、apt
- 社工和信息收集
- 域名欺骗
- 钓鱼邮件
- 一些钓鱼用的挂马工具
- 代码审计
- 代码审计工具
- WAF绕过
- WAF基础及云WAF
- 各种WAF绕过方法
- 绕过WAF上传文件
- 系统提权
- windows系统提权
- linux系统提权
- 数据库提权操作系统
- 内网横向渗透
- 内网穿透方式
- 一些内网第三方应用提权
- ARP与DOS
- ARP欺骗
- DOS与DDOS
- 一些DOS工具