SSRF 服务器端请求伪造

本文最后更新于:1 年前

SSRF服务器端伪造请求 学习记录

SSRF-服务器端伪造请求

概念

SSRF(Server-Side Request Forgery),服务器端请求伪造,利用漏洞伪造服务器端发起请求,从而突破客户端限制
通俗地来讲就是在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份向服务器所在内网发送一条信息
对外发起网络请求的地方都可能存在SSRF漏洞
一般用于外网探测或攻击内网服务


危害

1、可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息
2、攻击运行在内网或本地的应用程序(比如溢出)
3、对内网Web应用进行指纹识别,通过访问默认文件实现
4、攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(比如Struts2漏洞利用,SQL注入等)
5、利用file协议读取文件

防御手段

1、过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准
2、统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态
3、限制请求的端口,比如80,443,8080,8090
4、禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题
5、使用DNS缓存或者Host白名单的方式

常见情景

1、能够对外发起网络请求的地方,就可能存在 SSRF 漏洞
2、从远程服务器请求资源(Upload from URL,Import & Export RSS Feed)
3、数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
4、Webmail 收取其他邮箱邮件(POP3、IMAP、SMTP)
5、文件处理、编码处理、属性信息处理(ffmpeg、ImageMagic、DOCX、PDF、XML)

常用函数

file_get_contents()

后端实现:

<?php
    $url = $_GET['opn'];
    $content = file_get_contents($url);
    echo $content;
?>
    
fsockopen()

后端实现:

curl_exec()

后端实现:


协议利用

Gopher 协议

概述

gopher协议是一种信息查找系统,他将Internet上的文件组织成某种索引,方便用户从Internet的一处带到另一处

Gopher 协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 redis、ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面

Gopher协议格式
URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
  • gopher的默认端口是6379
  • 如果发起post请求,回车换行需要使用%0d%0a,如果多个参数,参数之间的&也需要进行URL编码
使用条件


Dict 协议

概述

Dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的

它的目标是超越Webster protocol,并允许客户端在使用过程中访问更多字典

Dict服务器和客户机使用TCP端口2628

Dict 语法
define [字典名] [单词]

获取一个单词的解释

Dict 利用
dict://serverip:port/命令

参数向服务器的端口请求为【命令:参数】,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利通过dict协议的话要一条一条的执行,而gopher协议执行一条命令就行了

参考:Dict 协议是什么

参考—SSRF漏洞用到的其他协议(dict协议,file协议)

File 协议

file协议主要用于访问本地计算机中的文件

File 利用

file://文件路径

使用file协议可以直接读取目标操作系统的文件

file协议和http协议有什么区别呢?

(1)file协议主要用于读取服务器本地文件,访问的是本地的静态资源
(2)http是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。简单来说file只能静态读取,http可以动态解析
(3)http服务器可以开放端口,让他人通过http访问服务器资源,但file不可以
(4)file对应的类似http的协议是ftp协议(文件传输协议)
(5)file不能跨域

参考—SSRF漏洞用到的其他协议(dict协议,file协议)


漏洞利用

redis常见的SSRF攻击方式大概有这几种:

1.绝对路径写webshell

2.写ssh公钥

3.写contrab计划任务反弹shell


SSRF攻击内网Redis服务

浅析Redis中SSRF的利用



本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!