SSRF服务器端请求伪造

news2024/11/24 1:04:21

漏洞原理
SSRF挖掘
SSRF具体利用
SSRF具体验证
SSRF防御与绕过

漏洞原理
这个漏洞允许攻击者去利用服务端的功能,来请求其他网络资源

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的
Web应用程序发送精心设计的请求的对其他网站进行攻击。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

利用一个可以发起网络请求的服务,当做跳板来攻击其它服务

简单来说就是:
A让B帮忙访问C,如果是在B是不知情的情况下呢?

漏洞成因

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。ssrf是利用存在缺陷的web应用作为代理去攻击远程和本地的服务器。

也就是说,对于为服务器提供服务的其他应用没有对访问进行限制,如果
构造好适当的访问包,那我就有可能利用目标服务对他的其他服务器应用
进行调用。

在这里插入图片描述

原理

比如:A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站。
所以,我们普通用户只可以访问A网站,不能访问B网站。但是我们可以通过A网站做中间人,访问B网站,从而达到攻击B网站需求。
在这里插入图片描述
正常用户访问网站的流程是:
输入网站URL --> 发送请求–> 服务器接受请求(没有过滤),并处理 -->返回用户
网站有个请求是www.baidu.com/xxx.php?image=www.abc.com/1.png
那么产生SSRF漏洞的环节在哪里呢?
我们让网站a去访问网站b
服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限
制,导致A网站可以从其他服务器的获取数据

如果我们将www.baidu.com/xxx.php?image=www.abc.com/1.png 换为与该服务器相连的内网服务器地址会产生什么效果呢?
例如: www.baidu.com/xxx.php?image=1277.0.0.1/1.png

终极简析:
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,
但是服务器并没有检测这个请求是否合法的,
然后服务器以他的身份来访问其他服务器的资源。
难点就在于怎么获取别人的内网ip,但是有一个点,我们能对当前服务器做一些操作

SSRF形成的原因

PHP中下面函数的使用不当会导致SSRF
file_get_ contents():从我们用户指定url获取内容,然后指定一个文件名去进行保存,并且展示

fsockopen():用户所制定的数据的获取,这个函数主要是使用我们的socket(端口)利用端口去跟我们的服务器建立我们的tcp链接,传输数据

curl_exec():回去执行curl的一个会话,他就会发送请求,并且获取一些相应的数据(curl是一个非常强大的与服务器通信的工具支持多种传输协议与功能)

这些函数可以通过网络协议访问目标服务器上的资源

file_get_ contents函数可以读取本地和远程的文件,支持多种协议,如ftp,http,https还可以读取php源码,
如 php://filter/read=convert.base64-encode/resource=ssrf.php,就可以将后台当前目录下的ssrf.php文件的bs64编码返回

SSRF危害

如果一定要通过后台服务器远程去对用户指定或者预埋在前端的请求的地址进行资源请求则请做好目标地址的过滤,没有处理好的将导致:
1.可以对服务器所在内网、本地进行端口扫描,获取一些服务的信息等
2.目标网站本地敏感数据的读取
3.内外网主机应用程序漏洞的利用
4.内外网Web站点漏洞的利用

SSRF的挖掘
1)分享
一些分享应用中,为了更好的提供用户体验,Web应用在分享功能中,通常会获取目标地址网页内容中的标签的文本内容 作为显示以提供更好的用户体验。如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。
在这里插入图片描述
http://widget.renren.com/*****?resourceUrl=https://www.sobug.com
通过目标URL地址获取了title标签和相关文本内容。而如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。

从国内某漏洞提交平台上提交的SSRF漏洞,可以发现包括淘宝、百度、新浪等国内知名公司都曾被发现过分享功能上存在SSRF的漏洞问题。

2)在线翻译
翻译网站替我们访问需要翻译的站点,然后进行翻译,所以当翻译网站没有对输入的地址做任何过滤时,内网就可能被访问到
通过 URL地址翻译对应文本的内容。
在这里插入图片描述
3)图片加载与下载
加载远程图片地址此功能用到的地方很多,很大可能造成SSRF问题比如编辑器处,就会有远程文件加载。
某些地方会进行远程加载头像,例如:
http://www.xxxx.com/image?
url=http://www.image.com/1.jpg
在这里插入图片描述
4)转码服务
通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览由于手机屏幕大小的关系,直接浏览网页内容的时候会造成许多不便,这时有些网站就通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览的样式。例如百度、腾讯、搜狗等公司都有提供在线转码服务。
在这里插入图片描述
5)未公开的API (应用程序编程接口)
实现以及其他调用URL的功能等此处类似的功能有360提供的网站评分,以及有些网站通过应用程序编程接口获取远程地址文件来加载内容。
SSRF通过远程加载来实现攻击
一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。

二、从URL关键字中寻找

在对功能上存在SSRF漏洞中URL地址特征的观察,通过收集,大致有以下关键字
在这里插入图片描述
如果利用google 语法加上这些关键字去寻找SSRF漏洞,耐心的验证,现在还是可以找到存在的SSRF漏洞
一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。

SSRF漏洞挖掘–总结

1.社交分享功能:获取超链接的标题等内容进行显示
2.转码服务:通过URL地址把原地址的网页内容调优使其适合手机
3.屏幕浏览在线翻译:给网址翻译对应网页的内容
4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;
5.通过URL地址加载或下载图片云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行ssrf测试
6.编码处理
7.可以利用google 语法加上这些关键字去寻找SSRF漏洞。
从远程服务器请求资源----》找SSRF

SSRF具体利用
http://:探测内网主机存活、端口开放情况
gopher://:发送GET或POST请求;攻击内网应用(可以实现多个数据整合发送,gopher服务器可以将多个数据包捆绑发送到客户端)
dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等
file://:读取本地文件

一.内网访问
使用http协议对内网的Web应用进行访问
?url=http://127.0.0.1/flag.php
CTFhub例题:题目要求访问127.0.0.1的flag.php,直接拼接进行访问即可
得到flag。
在这里插入图片描述
二、伪协议读取文件
php伪协议 PHP支持的伪协议
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

尝试读取web目录下的flag.php,web目录下的文件,一般网站的目录都放在
/var/www/html/目录下
?url=file:///var/www/html/flag.php
页面显示???后,查看网页源代码即可看到flag
在这里插入图片描述
在这里插入图片描述
三、端口扫描
在SSRF中,dict协议与http协议可以用来探测内网主机存活与端口开放情况、和指纹
信息。
?url=dict://127.0.0.1:8000
?url=http://127.0.0.1:8080
03 SSRF具体利用
dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。允许客户端在
使用过程中访问更多字典。Dict服务器和客户机使用TCP端口2628。不过用的比较少,所
以网上基本没啥资料(包括谷歌上)

题目又提示端口的范围是8000-9000,那我们就使用burpsuite攻击模块
在这里插入图片描述
在这里插入图片描述
请求不存在的服务器或未开放的端口,会返回以下信息,可以通过返回的状态信息不同,来判断对应端口开放的状态。

cURL是与各种的服务器使用各种类型的协议进行连接和通讯的工具。它是一个强大的库支持http、https、ftp、telnet、file等协议,同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

pikachu靶场练习

  1. 访问外网:
    ?url=www.baidu.com
  2. 通过file协议读取文件:
    ?url=file:///C:/WINDOWS/win.ini
  3. 使用dict协议查看端口:
    ?url=dict://127.0.0.1:80
    4.使用php伪协议:查看ssrf.php源码
    …/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf_fgc.php

SSRF具体验证
排除法:
对疑似有SSRF漏洞的地方(允许输入网址、ip的地方),要验证是否存在SSRF漏洞,
可以首先请求外网,比如:
http://read.******.com/image?image=http://www.baidu.com/img/bd_logo1.png

你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。
在这里插入图片描述
SSRF防御与绕过
SSRF漏洞形成的原因主要是服务器端所提供的接口中包含了所要请求的内容的URL参数,并且未对客户端所传输过来的URL参数进行过滤
一般的防御措施是对URL参数进行过滤,或者使得URL参数用户不可控,但当过滤方法不当时,就存在Bypass的不同方式

通常有一下 5 个思路:
• 过滤返回信息,验证远程服务器对请求的相应,是比较容易的方法。如果 Web 应用获取某种类型的文件,那么可以在把返回结果展示给用户之前先验证返回信息是否符合标准。
• 统一错误信息,避免用户根据错误信息来判断远程服务器端口状态。
• 限制请求的端口为 HTTP 常用端口,比如 80、443、8080、8090
• 黑名单内网 IP,避免应用被用来获取内网数据,攻击内网。
• 禁用不需要的协议。仅仅允许HTTP和HTTPS请求。可以防止类似于file://、ftp://等引起的问题

SSRF绕过技巧
1、利用@符号 绕过当网站限制只能访问 http://www.xxx.com类型的域名
2、添加端口号
3、利 用 短 地 址
4、利 用 特 殊 域 名
5、利 用封闭式字母数字
6、利用句号 。或利用 [::] 绕过
7、利 用 进 制 转 换
8、利用302跳转
04 SSRF绕过技巧
绕过限制请求IP不为内网地址
更多参考资料:https://www.secpulse.com/archives/65832.html
利用302跳转、利 用 短 地 址、利用其他协议绕过限制请求只为http协议

1)利用@符号
SSRF绕过中我们通常使用@符号进行绕过例如:http://example.com@127.0.0.1

2)添加端口号
SSRF绕过中我们通常使用添加端口号绕过
例如:http://127.0.0.1:8080

3)利用短地址
SSRF绕过中我们通常使用短地址进行绕过
例如:http://dwz.cn/11SMa

4)利用特殊域名
SSRF绕过中我们通常使用特殊域名进行绕过
例如:xip.io

5)利 用封闭式字母数字 E nclosed Alphanumerics
例:ⓔ ⓧⓐ ⓜⓟ ⓛⓔ .ⓒ ⓞⓜ >>> example.com
清单:
①② ③ ④ ⑤ ⑥ ⑦⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴
⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ ℗ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ
Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ
ⓧ ⓨ ⓩ ⓪⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓿

6)利用。
SSRF绕过中我们通常使用。进行绕过
例如:http://127。0 。0 。1

7)利用进制转换绕过
SSRF绕过中我们通常使用进制转换进行绕过
例如: h ttp://2130706433/

8)协议绕过
Dict:// dict://@:/d:
SFTP:// ssrf.php?url=sftp://example.com:11111/
TFTP:// ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET
LDAP:// ssrf.php?url=ldap://localhost:11211/%0astats%0aquit

DNS重新绑定是计算机攻击的一种形式。 在这种攻击中,恶意网页会导致访问者运行客户端脚本客户端脚本,攻击网络上其他地方的计算机。它利用了同源策略的漏洞在网页浏览过程中,用户在地址栏中输入包含域名的网址,浏览器通过DNS服务器将域名解析
为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址,当用户第一次访问,解析域名获取一个IP地址,然后,域名持有者修改对应的IP地址,用户再次请求该域名,就会获取一个新的IP地址,对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。(浏览器同源策略) 这就是DNS Rebinding攻击。
https://blog.csdn.net/qq_36348899/article/details/119297854

可以利用这个网站获取一个测试用的域名:
https://lock.cmpxchg8b.com/rebinder.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1666940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数列排序C++

题目&#xff1a; 思路&#xff1a; 创建一个数组a&#xff0c;循环遍历输入&#xff0c;然后使用函数sort进行上升排序&#xff0c;最后循环遍历输出a[i]. #include <bits/stdc.h> using namespace std; int main(){int a[201];int n;cin>>n;//输入for(int i0;i&l…

使用单片机在图形点阵LCD上绘制波形图

使用单片机在图形点阵LCD上绘制波形图 需求&#xff1a; 假如有一组浮点数据&#xff0c;是通过AD转换得到的&#xff0c;保存在数组MyArray[]中&#xff0c;采集点数为len&#xff0c;采集周期为T&#xff0c;现在想用单片机在LCD上绘制出这组数据对应的波形图&#xff0c;该…

python实现动态时钟功能

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 一.前言 时钟,也被称为钟表,是一种用于测量、记录时间的仪器。时钟通常由时针、分针、秒针等计时仪器组成,是现代社会不可或缺的一种计时工具。它的发明和使用极大地改变了人类的生活方式和时间观念。 时钟的类型有很多,…

批量文本高效编辑神器:轻松拆分每行内容,一键保存更高效!轻松实现批量拆分与保存

文本处理成为我们日常工作中的一项重要任务。然而&#xff0c;面对大量的文本内容&#xff0c;传统的逐行编辑方式往往显得繁琐且效率低下。那么&#xff0c;有没有一种更高效、更便捷的解决方案呢&#xff1f;答案是肯定的——批量文本高效编辑神器&#xff0c;让您的文本处理…

torch_geometric安装(CPU版本)

①打开官方安装网址&#xff1a;https://pytorch-geometric.readthedocs.io/en/2.3.0/install/installation.html ②对根据Pytorch选择相应版本。此前一直用CUDA不成功&#xff0c;这次使用CPU版本&#xff08;因为不用对应cuda&#xff0c;pytorchcudageometric三者对应起来很…

深入理解Java并发:Future与CompletableFuture详解

知识背景&#xff1a; 在工作过程中有用到CompletableFuture&#xff0c;之前接触不多&#xff0c;特此下来学习一下&#xff0c;与大家一起分享&#xff01; 总体介绍&#xff1a; 在多线程编程中&#xff0c;异步计算是一种常见的需求。其中Future和CompletableFuture是处…

前端AJAX与后台交互技术知识点及案例(续2)

以下笔记均为学习哔站黑马程序员AJAX视频所得&#xff01;&#xff01;&#xff01; AJAX作用&#xff1a;浏览器和服务器之间通信&#xff0c;动态数据交互 axios函数 先引入axios库&#xff0c;可在bootcdn中寻找相关js文件或者对应的script标签 axios({url:http://hmajax…

echarts环形图 legend文字过长显示...鼠标移动上展示全称

legend: {type: scroll,orient: vertical,x: left,y: bottom,top: "42%",left: 13%,data: this.dutyNames,textStyle: { color: #fff },triggerEvent: true,tooltip: {show: true,trigger: item,//鼠标移动上去展示全称},formatter: function (params) {var val &qu…

构建一个快速数据分析(boruta+shap+rcs)的shiny APP

构建一个快速数据分析&#xff08;borutashaprcs&#xff09;的shiny APP 之前提出了一个快速数据分析的流程&#xff0c;包括&#xff1a; 变量筛选&#xff0c;使用Boruta等变量筛选的方法来找出相关的变量&#xff1b;发现规律&#xff0c;使用SHAP分析的散点图、交互作用图…

微服务思想以及实现

文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求&#xff08;RestTemplate&#xff09;3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…

牛客网Java实战项目--仿牛客网社区的学习笔记

仿牛客网社区的学习笔记 1. 项目环境搭建1.1 开发社区首页 2.开发社区登录模块2.1 发送邮件2.2 开发注册功能2.3 会话管理2.4 生成验证码2.5 开发登录、退出功能2.6 显示登录信息 4 Redis实现点赞关注4.1 Spring整合Redis访问Redis的方法&#xff1a; 4.2 Redis实现点赞4.2.1 点…

【图解计算机网络】http1.1,http2.0,http3.0

http1.1&#xff0c;http2.0&#xff0c;http3.0 http1.1长连接管道传输缺点 http2.0头部压缩二进制格式并发传输服务端推送缺点 http3.0无队头阻塞快速建立连接连接迁移 http1.1 长连接 在http1.0的时候&#xff0c;一次http请求就要建立一次TCP连接&#xff0c;这一次的htt…

【计算机网络篇】数据链路层(10)在物理层扩展以太网

文章目录 &#x1f354;扩展站点与集线器之间的距离&#x1f6f8;扩展共享式以太网的覆盖范围和站点数量 &#x1f354;扩展站点与集线器之间的距离 &#x1f6f8;扩展共享式以太网的覆盖范围和站点数量 以太网集线器一般具有8~32个接口&#xff0c;如果要连接的站点数量超过了…

【busybox记录】【shell指令】ls

目录 内容来源&#xff1a; 【GUN】【ls】指令介绍 【busybox】【ls】指令介绍 【linux】【ls】指令介绍 使用示例-默认输出&#xff1a; 列出目录内容 - 默认输出 列出目录内容 - 不忽略以.开头的文件 列出目录内容 - 不忽略以.开头的文件&#xff0c;只忽略.和..文件…

使用Maven对Java独立应用程序进行编译打包

一、 安装Maven 1.解压&#xff0c;移动安装包 sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/ cd /usr/local/ sudo mv apache-maven-3.9.6/ ./maven-3.9.6 sudo chown -R qiangzi ./maven-3.9.6 二、Java应用程序代码 1.版本信息&#xff1a; Spark-2.1…

picoCTF-Web Exploitation-More SQLi

Description Can you find the flag on this website. Additional details will be available after launching your challenge instance. Hints SQLiLite 先随便输入个账号密码登录一下&#xff0c;得到查询SQL&#xff0c;接下来应该对SQL进行某些攻击来绕过密码登录成功 -- …

如何自定义Linux命令

说明&#xff1a;本文介绍如何将自己常用的命令设置为自定义的命令&#xff0c;以下操作在阿里云服务器CentOS上进行。 修改配置文件 修改配置文件前&#xff0c;先敲下面的命令查看当前系统配置的shell版本 echo $SHELL或者 echo $0区别在于&#xff0c;$SHELL查看的是系统…

【Shell】shell编程之循环语句

目录 1.for循环 例题 2.while循环 例题 3.until循环 1.for循环 读取不同的变量值&#xff0c;用来逐个执行同一组命令 for 变量 in 取值列表 do 命令序列 done [rootlocalhost ~]# for i in 1 2 3 > do > echo "第 $i 次跳舞" > done 第 1 次跳舞 第 …

java基础之面向对象的思想

一、面向对象和面向过程的编程思想对比 面向过程&#xff1a;是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的&#xff08;自己干活&#xff09;。 面向对象&#xff1a;是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的…

5. 简单说一说uniapp中的语法吧

前言 如果你 知道Vue3并且对Vue3的语法有一定了解&#xff0c;请跳过这一章&#xff0c;由于后续项目主要是基于Vue3TypeScript&#xff0c;因此提前简单概述一些Vue3的基础语法~ 本文的目的是 期望通过对本文的阅读后能对Vue3的每个语法有一个简单的印象&#xff0c;至少要知…