SSRF漏洞

SSRF基础

SSRF(server-side request forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统

相关函数和类

file_get_contents()

将整个文件或一个url所指向的文件读入一个字符串中

readfile()

输出一个文件的内容

fsockopen()

打开一个网络连接或者一个Unix套接字连接

curl_exec()

初始化一个新的会话,返回一个CURL句柄,供curl_setopt(), curl_exec()和curl_close()函数使用

fopen()

打开一个文件或者url

PHP原生类SoapClient在触发反序列化时可导致SSRF

相关协议

file协议

在有回显的情况下,利用file协议可以读取任意文件的内容

dict协议

泄露安装软件版本信息,查看端口,操作内网redis服务等

gopher协议

支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。gopher协议时ssrf利用中一个最强大的协议(俗称万能协议)。可用于反弹shell

http/s协议

探测内网主机存活

漏洞利用方式

  1. 让服务端去访问相应的网址
  2. 让服务端去访问自己所处内网的一些指纹文件来判断是否存在相应的cms
  3. 可以使用file、dict、gopher[11]、ftp协议进行请求访问相应的文件
  4. 攻击内网web应用(可以向内部任意主机的任意端口发送精心构造的数据包{payload})
  5. 攻击内网应用程序(利用跨协议通信技术)
  6. 判断内网主机是否存活:方法是访问看是否有端口开放
  7. DoS攻击(请求大文件,始终保持连接keep-alive always)