SSRF科普

目的

通过利用有SSRF漏洞的公网web应用作为代理,攻击内网机房中的其他机器或本地服务器

原理

暴漏在公网的有SSRF漏洞的系统,因未对目标地址做过滤与限制,导致执行了恶意的payload,可探测内网其他应用或本机服务文件

如何判断是否存在SSRF

在加载图片或url参数时,如外网用户访问www.xxx.com/a.php?image=http://www.abc.com/1.jpg ,这个image参数如果不是本地浏览器发起的请求,那基本是服务端发起的,此时有可能存在SSRF,接下来要验证替换此URL为内网地址看看是否可以回显来判断。

利用SSRF做什么

  • 扫描内部网络,获取IP、端口信息
  • 根据识别出的应用针对性的发送payload攻击,例如struts2
  • 向内网任意主机任意端口发送精心构造的数据包{Payload}
  • 利用file协议读取本地文件,比如file:///etc/passwd

绕过域名白名单检测

利用 @/# 绕过域名限定的正则:
http://hao.com@evil.comhttp://evil.com (常用)
http://evil.com#hao.comhttp://evil.com
http://evil.com?hao.comhttp://evil.com
http://evil.com\hao.comhttp://evil.com

SSRF常见绕过技巧

  • 利用@符号
  • 利用localhost
  • 利用短地址
  • 利用特殊域名
  • 利用DNS解析
  • 利用进制转换
  • 其他协议绕过

payload利用的协议

  • file
    在有回显的情况下,利用 file 协议可以读取任意内容
  • dict
    泄露安装软件版本信息,查看端口,操作内网redis服务等
  • gopher
    gopher支持发出GET、POST请求:可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议是ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell

SSRF进阶

针对SSRF漏洞的系统,透过它去探测内网中的未授权Redis,若Redis启动是root权限,则可以将反弹shell脚本写入/etc/crontab定时任务URL编码后发送。非Redis的机器,正常情况下,URL请求不会让对方执行反弹shell的

反弹shell

-浅析反弹shell原理

修复方案

一定要过滤用户端传进来的URL参数
• 限制协议为HTTP、HTTPS,可以防止file:// gopher://等引起的问题
• 如果传进来的是302重定向,要获取最终IP
• 禁止传进来的IP是内网IP,或设置URL白名单