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协议执行一条命令就行了
参考—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服务
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!