跳转至

SSRF

0x01 漏洞描述

服务端请求伪造攻击(Server-side Request Forgery):很多web应用都提供了从其他的服务器上获取数据的功能。比如获取图片、下载文件、读取文件内容等。SSRF漏洞是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统。

即:利用一个可以发起网络请求的服务,当作跳板来攻击其他服务。

0x02 场景应用场景

SSRF场景应用场景为任意可以发起网络请求的地方,比如:

  • 下载图片、下载文件等下载处;
  • 文件预览、图片预览等获取图片、文件内容处;
  • 在线识图,在线文档翻译,分享,订阅等;
  • 根据远程URL上传,静态资源图片等;
  • 数据库的内置功能,比如mongodb的copyDatabase函数;
  • URL关键字中,比如:source,share,link,src,imageurl,target等;

0x03 漏洞危害

  1. 内网、本地端口扫描,获取开放端口信息 ;
  2. 主机信息收集,web应用指纹识别,获取服务banner信息 等;
  3. 根据识别出的应用针对性的发送payload攻击,例如struts2 4、redis、攻击内网、本地的应用程序及服务等;
  4. 穿越防火墙
  5. 利用file等其他允许协议进行绕过攻击,比如利用file协议读取本地文件(file:///etc/passwd

0x04 修复建议

SSRF漏洞修复的方法可归纳为一个依次向下的流程中:

4.1 解析目标URL

获取scheme、host(推荐使用系统内置函数完成,避免自己使用正则提取)

4.2 校验scheme

检查 scheme 是否为合法 (如非特殊需求请只允许 http 和 https)

4.3 获取解析IP

解析 host 获取 dns 解析后的 IP 地址

4.4 检测IP是否合法

检查解析后的IP地址是否为外网地址或者合法IP