SSRF服务器端请求伪造

漏洞原理
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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity基础

概述 基础知识 3D教学 数学计算公共类Mathf 练习: 三角函数 练习: Unity中的坐标系 Vector3向量 向量模长和单位向量 向量加减乘除 练习: 向量点乘 向量叉乘 向量插值运算 Quaternion四元数 为何要使用四元数 四元数是什么 四元数常用方法 四元数计算 练…

优化资源利用,用C++内存池点亮编程之路

内存池介绍(Memory Pool): 它是一种内存分配方式,通过预先分配和复用内存块。 在真正使用内存之前,先申请一大块内存备用。当有新的内存需求时,就从内存池中分出一部分内存块, 若内存块不够再继续申请新的内存。如果我们不需要…

OSTE-Web-Log-Analyzer:基于Python的Web服务器日志自动化分析工具

关于OSTE-Web-Log-Analyzer OSTE-Web-Log-Analyzer是一款功能强大的Web服务器日志自动化分析工具,该工具专为安全研究人员设计,能够使用Python Web日志分析工具(Python Web Log Analyzer)帮助广大研究人员以自动化的形式实现Web服…

【应用浅谈】Odoo的库存计价与产品成本(二)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo的库存(Stock)模块拥有众多功能,其中库存计价是一项非常重要的功能,原生的成本方法分三种:【标准成本】,【平均成本】,【先进先出】&#…

MySQL 身份认证漏洞 CVE-2012-2122

漏洞影响版本 MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.演示 开启靶场 进入漏洞目录 cd /root/vulhub/mysql/CVE-2012-2122开启漏洞靶场 docker-compose up -d攻击 直接 运行 这个命令 for i i…

验证码生成--kaptcha

验证码生成与点击重新获取验证码 如图所示&#xff0c;本文档仅展示了验证码的生成和刷新显示。 1. 概述 系统通过生成随机验证码图像和文本。 2. 代码分析 2.1. Maven依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptch…

LeetCode - 0088 合并两个有序数组

题目地址&#xff1a;https://leetcode.cn/problems/merge-sorted-array/description/ 引言&#xff1a;话接上回&#xff0c;由于上次面试官着急下班&#xff0c;面试不得不提前终止&#xff0c;这不&#xff0c;他又找我去面试了 面试官&#xff1a;你好&#xff0c;小伙子&a…

(java)websocket服务的两种实现方式

1.基于java注解实现websocket服务器端 1.1需要的类 1.1.1服务终端类 用java注解来监听连接ServerEndpoint、连接成功OnOpen、连接失败OnClose、收到消息等状态OnMessage 1.1.2配置类 把spring中的ServerEndpointExporter对象注入进来 2.1代码示例 2.1.1 maven配置 <…

Docker停止不了

报错信息 意思是&#xff0c;docker.socket可能也会把docker服务启动起来 解决 检查服务状态 systemctl status dockersystemctl is-enabled docker停止docker.socket systemctl stop docker.socket停止docker systemctl stop docker知识扩展 安装了docker后&#xff0c;…

资产公物仓管理系统|实现国有资产智能化管理

1、项目背景 资产公物仓管理系统&#xff08;智仓库DW-S201&#xff09;是一套成熟系统&#xff0c;依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 项目设计原则 方案对公物仓资…

Linux实验 系统管理(三)

实验目的&#xff1a; 了解Linux系统下的进程&#xff1b;掌握一类守护进程——计划任务的管理&#xff1b;掌握进程管理的常用命令&#xff1b;掌握进程的前台与后台管理&#xff1b;了解Linux系统的运行级别&#xff1b;掌握系统服务管理的常用命令。 实验内容&#xff1a; …

小学拼音弄一下

import re from xpinyin import Pinyindef remove_middle_characters(text):# 仅保留汉字chinese_chars re.findall(r[\u4e00-\u9fff], text)cleaned_text .join(chinese_chars)# 如果字符数为偶数&#xff0c;则在中间添加空格if len(cleaned_text) % 2 0:middle_index le…

word-排版文本基本格式

1、文本的基本格式&#xff1a;字体格式、段落格式 2、段落&#xff1a;word排版的基本控制单位 3、每敲一次回车&#xff0c;为一个段落标记&#xff0c;注意区分换行符和段落标记&#xff0c;换行符为指向下的箭头&#xff0c;段落标记为带拐弯的箭头&#xff0c;换行符&…

QT自适应界面 处理高DPI 缩放比界面乱问题

1.pro文件添加 必须添加要不找不到 QT版本需要 5。4 以上才支持 QT widgets 2.main界面提前处理 // 1. 全局缩放使能QApplication::setAttribute(Qt::AA_EnableHighDpiScaling, true);// 2. 适配非整数倍缩放QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::High…

数据结构复习指导之二叉树的概念

文章目录 二叉树 考纲内容 复习提示 1.二叉树的概念 1.1二叉树的定义及其主要特性 1.1.1二叉树的定义 1.1.2几种特殊的二叉树 1.1.3二叉树的性质 1.2二叉树的存储结构 1.2.1顺序存储结构 1.2.2链式存储结构 知识回顾 二叉树 考纲内容 &#xff08;一&#xff09;树…

一件事做了十年

目录 一、背景二、过程1.贫困山区的心理悲哀2.基础差的客观转变3.对于教育的思考4.持续做这件事在路上5.同行人有很早就完成的&#xff0c;有逐渐放弃的&#xff0c;你应该怎么办&#xff1f;6.回头看&#xff0c;什么才是最终留下的东西? 三、总结 一、背景 在哪里出生我们无…

Colab/PyTorch - Getting Started with PyTorch

Colab/PyTorch - Getting Started with PyTorch 1. 源由2. 概要2.1 PyTorch是什么&#xff1f;2.2 为什么学习PyTorch&#xff1f;2.3 PyTorch库概览 3. 步骤4. 预期&展望5. 总结6. 参考资料 1. 源由 世界在发展&#xff0c;为其服务的技术也在不断演变。每个人都要跟上技…

【Linux】动态库与静态库的底层比较

送给大家一句话&#xff1a; 人生最遗憾的&#xff0c;莫过于&#xff0c;轻易地放弃了不该放弃的&#xff0c;固执地坚持了不该坚持的。 – 柏拉图 (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) (x(x_(x_x(O_o)x_x)_x)x) 底层比较 1 前言2 编译使用比较2 如何加载Than…

一竞技LOL:中韩首场对决暴露TES大问题 BLG和T1的比赛成为焦点!

北京时间5月12日,昨天结束的MSI比赛中第二场比赛是本次MSI第一场中韩大战,由LCK赛区的一号种子GEN战队对阵LPL的二号种子TES战队。TES最终是2:3非常遗憾的输给了Gen,这也意味着TES将要去败者组,本场比赛也是暴露出了TES战队比较大的问题,中单的英雄池以及上单369的状态成为TES战…

enable_shared_from_this使用笔记

解决了&#xff1a; 不能通过原指针增加引用次数的问题 &#xff0c;通过weak_ptr实现。 class MyCar:public std::enable_shared_from_this<MyCar> { public:~MyCar() { std::cout << "free ~Mycar()" << std::endl; } };int main() { MyCar* _…