SSRF-服务器端请求伪造

news/2024/11/9 2:44:13/

漏洞定义和成因

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

漏洞危害

SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件。

内网服务防御相对外网服务来说一般会较弱,甚至部分内网服务为了运维方便并没有对内网的访问设置权限验证,所以存在SSRF时,通常会造成较大的危害。

可能出现的地方

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片

5.图片/文章收藏功能:主要其会取URL地址中title以及文本的内容作为显示以求一个好的用具体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理, 属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等

11.未公开的api实现以及其他扩展调用URL的功能:可以利用google 语法加上这些关键字去寻找SSRF漏洞

一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

12.从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

危险函数

  • file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。

  • readfile():输出一个文件的内容。

  • fsockopen():打开一个网络连接或者一个Unix 套接字连接。

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

  • fopen():打开一个文件文件或者 URL。

  • ......

利用方式

File

通过file协议可以进行任意文件的读取,ssrf中比较简单的利用方式

?file=file:///etc/passwd

HTTP

http协议的利用,即位向目标服务器发送http请求

对于某些服务使用的是get方式进行请求,即可以直接通过这种方式进行攻击

?url=http://baidu.com

与file协议的区别:

  • (1)file协议主要用于读取服务器本地文件,访问的是本地的静态资源

  • (2)http是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。简单来说file只能静态读取,http可以动态解析

  • (3)http服务器可以开放端口,让他人通过http访问服务器资源,但file不可以

  • (4)file对应的类似http的协议是ftp协议(文件传输协议)

  • (5)file不能跨域

Dict

利用 Dict协议,可以探测端口的开放情况和指纹信息

利用方式:dict://ip:port/cmd 向目标服务器发送命令,并在末尾补上\r\n结束符,因此只能逐条执行命令

?url=193.168.6.33 # 主机发现
?url=dict://193.168.6.40:80 # 端口探测.暴力破解
?url=dict://193.168.6.33:3306 # 

Gopher

Gopher协议是SSRF中最好用的协议,可以攻击内网的FTP、Telnet、Redis等,也可以发送GET和POST请求、还可以攻击内网未授权Mysql

gopher协议没有默认端口,所以需要指定web端口,而且需要指定post方法。回车换行使用%0d%a。注意post参数之间的&分隔符也要进行url编码

在 gopher协议中发送 HTTP的数据,需要以下三步:

1、构造 HTTP数据包

2、URL编码、替换回车换行为%0d%0a

3、发送 gopher协议

GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers

绕过

格式化IP地址:

IP地址十六进制、二进制、十进制转换-ME2在线工具

IP地址,十六进制,二进制转换在线计算器

将ip地址转化为其他进制,转化之后仍然可以访问

ip:192.168.0.1
十进制:3232235521
十六进制:0xC0A80001

使用省略模式,进行缩写

⚠️ IPV6的写法一定程度取决服务器是否进行解析

  • http://127.1/

  • 利用ipv6绕过,http://[::1]/

  • http://127.0.0.1./

URL解析

在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。

这时候可能会出现对URL参数解析不当,导致可以绕过过滤。

http://www.baidu.com@10.211.55.6/ ⇒ 10.211.55.6

利用302跳转

所有指向nip.io的解析都会被解析为前面的ip地址

<http://10.211.55.6.nip.io/> => 10.211.55.6

当链接中的内网地址被匹配过滤的时候,可以使用短链进行绕过

短网址生成器 | LinkShortener

短地址生成器

https://github.com/LCTF/LCTF2017/blob/master/src/web/签到题/web签到题.md


http://www.ppmy.cn/news/77102.html

相关文章

6. python的for循环

文章目录 一、for循环1.1、for循环分析1.2、注意事项 二、遍历数值列表2.1、range()函数的使用2.2、 创建数值列表2.3、对数值列表进行简单统计 一、for循环 有时&#xff0c;我们需要对列表内的所有元素逐一进行相同的操作&#xff0c;为避免出现大量重复的代码&#xff0c;p…

day9 - 对花朵图像进行边缘检测

本期主要介绍常用于进行图像边缘检测的滤波器&#xff08;算子&#xff09;&#xff1a;Sobel算子、Scharr算子、Laplacian算子&#xff1b;通过实验比较不同的算子的处理效果以及使用场景。 完成本期内容&#xff0c;你可以&#xff1a; 了解图像梯度的原理和应用 掌握使用S…

NTM中attr的用法

代码1 attrs class CopyTaskParams(object):name attrib(default"copy-task")controller_size attrib(default100, convertint)controller_layers attrib(default1,convertint)num_heads attrib(default1, convertint)sequence_width attrib(default8, convert…

技术大佬们都是怎么学习的?

目录 问题 熟悉更多业务 熟悉端到端 自学 Do exercise Learning trying Teaching 问题 今天逛帖子的时候&#xff0c;看到这么个问题&#xff1a; 这个问题我曾经也很好奇过&#xff0c;那些成为技术大佬的人当初是怎么学习&#xff0c;以及怎么成长过来的&#xff0…

Shellcode分离加载实现免杀的两种方式(VT免杀率:1/68)

简介 本文详细介绍了如何通过文件加载和远程URL加载方式实现Shellcode分离加载&#xff0c;以规避安全软件的检测。文章首先描述了通过Metasploit Framework生成的shellcode文件加载的过程&#xff0c;并提供了相关的C代码。 为了避免被杀毒软件检测&#xff0c;利用动态API调…

论文分享 A ConvNet for the 2020s

摘要 视觉识别的“咆哮的 20 年代”始于 Vision Transformers (ViTs) 的引入&#xff0c;它迅速取代了 ConvNets&#xff0c;成为最先进的图像分类模型。另一方面&#xff0c;vanilla ViT 在应用于对象检测和语义分割等一般计算机视觉任务时面临困难。正是层次化的 Transforme…

从零实现一个数据库(DataBase) Go语言实现版 4.B树实现(Part1))

英文源地址 本章将使用Go语言实现一个不可变地B树.这是一个最小实现, 因此很容易理解. Node节点的格式 我们的B树最终将被持久化到磁盘上, 因此我们首先需要为b树节点设计数据格式.如果没有这种格式, 我们将无法知道节点的大小以及何时拆分节点. 一个节点包含: 一个固定大小…

伦茨科技带你了解蓝牙App开发的流程

随着移动互联网的快速发展&#xff0c;给我们的生活带来了越来越多的便利&#xff0c;蓝牙App的开发也越来越普及。那么&#xff0c;简单来说&#xff0c;蓝牙App软件的开发就是在手机上为蓝牙物理设备提供具有相关功能的App软件终端&#xff0c;让蓝牙设备更方便的为用户提供服…