网络安全进阶学习第四课——SSRF服务器请求伪造

news2024/9/20 10:32:10

文章目录

  • 一、什么是SSRF?
  • 二、SSRF成因
  • 三、SSRF简析
  • 四、PHP存在SSRF的风险函数
  • 五、后台源码获取方式
  • 六、SSRF危害
  • 七、SSRF漏洞挖掘
    • 从WEB功能上寻找,
    • 从URL关键字中寻找
  • 八、SSRF具体利用
    • ssrf常利用的相关协议
    • PHP伪协议读取文件
    • 端口扫描
  • 九、SSRF存在的必要条件
  • 十、SSRF防御
  • 十一、SSRF绕过技巧
    • 利用@符号
    • 添加端口号
    • 利用短地址
    • 利用特殊域名
    • 利用封闭式字母数字Enclosed Alphanumerics
    • 利用`。`绕过
    • 利用进制转换
    • 利用其它协议
  • 十二、靶场参考


一、什么是SSRF?

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统,也就是内网。

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


二、SSRF成因

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

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


三、SSRF简析

SSRF漏洞就是通过篡改获取资源的请求发送给服务器;

但是服务器并没有检测这个请求是否合法的;

然后服务器以他的身份来访问其他服务器的资源。


四、PHP存在SSRF的风险函数

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

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

  2. fsockopen()
    fsockopen函数是文件指针

  3. curl_exec()
    curl_exec函数将访问前端提交的url参数的网址。


五、后台源码获取方式

  1. 网上寻找开源的源码
  2. 利用漏洞攻击,获取源码

六、SSRF危害

  1. 可以对服务器所在内网、本地进行端口扫描,获取一些服务的信息等。例如:可以不断尝试对服务器的内网端口进行探测。
  2. 目标网站本地敏感数据的读取。例如:能读取服务器根目录下的敏感文件。
  3. 内外网主机应用程序漏洞的利用
  4. 内外网Web站点漏洞的利用

七、SSRF漏洞挖掘

从WEB功能上寻找,

  1. 分享功能。网站能进行超链接的标题等内容进行显示;
  2. 在线翻译,例如:通过URL地址翻译对应文本的内容;
  3. 图片加载与下载。加载远程图片地址此功能用到的地方很多,很大可能造成SSRF问题。例如:编辑器处,就会有远程文件加载。某些地方会进行远程加载头像。
  4. 转码服务。通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览。
  5. 未公开的API。API (应用程序编程接口)实现以及其他调用URL的功能等。此处类似的功能有360提供的网站评分,以及有些网站通过应用程序编程接口获取远程地址文件来加载内容。

SSRF通过远程加载来实现攻击。

从URL关键字中寻找

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

一切要你输入网址的地方和可以输入ip的地方,都是ssrf的天下。


八、SSRF具体利用

ssrf常利用的相关协议

  • http://:探测内网主机存活、端口开放情况
  • gopher://:发送GET或POST请求;攻击内网应用
  • dict://:泄露安装软件版本信息,查看端口,操作内网远程访问等
  • file://:读取本地文件

#使用方法
内网访问:
使用http协议对内网的Web应用进行访问
?url=http://127.0.0.1/flag.php

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:// — 处理交互式的

在php.ini里有两个重要的参数allow_url_fopen、allow_url_include。

allow_url_fopen:默认值是ON。允许url里的封装伪协议访问文件;

allow_url_include:默认值是OFF。不允许包含url里的封装伪协议包含文件;

端口扫描

在SSRF中,dict协议与http协议可以用来探测内网主机存活与端口开放情况。

例如:
?url=dict://127.0.0.1:8000
?url=http://127.0.0.1:8080


九、SSRF存在的必要条件

  1. 必须要有交互;
  2. 请求资源没有做限制。

以下例子是不存在SSRF漏洞的,举例:

http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png

假如通过抓包,发现服务器请求地址是:www.baidu.com

或者右键查看图片的存放地址是:http://www.baidu.com/img/bd_logo1.png,这两种情况,是不存在SSRF漏洞的。

因为请求的地址都是baidu的服务器,而URL里面的拼接地址也是baidu的地址。SSRF存在的前提是A让B帮忙访问C,现在这相当于是B发脾气,直接告诉A,C在哪里,让A直接访问C,这样子就不存在SSRF漏洞了。


十、SSRF防御

通常有一下 5 个思路:

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

十一、SSRF绕过技巧

利用@符号

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

添加端口号

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

利用短地址

SSRF绕过中我们通常使用短地址进行绕过,把目标网页变成短地址。

利用特殊域名

SSRF绕过中我们通常使用特殊域名进行绕过

利用封闭式字母数字Enclosed Alphanumerics

例:ⓔ ⓧⓐ ⓜⓟ ⓛⓔ .ⓒ ⓞⓜ >>> example.com
清单:

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

利用绕过

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

利用进制转换

把IP地址转换成八进制、二进制、十六进制

利用其它协议

Dict:// dict://<user-auth>@<host>:<port>/d:<word>
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

更加具体可以参考这个网页:https://www.secpulse.com/archives/65832.html

这里给出一个大牛的脚本,可以很方便的探测ssrf的网段以及每个网段的端口,甚至还有反弹shell的功能:

地址: https://github.com/NoneNotNull/SSRFX


十二、靶场参考

链接: pikache靶场通关——SSRF攻击
链接: ctfhub靶场练习——SSRF攻击


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

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

相关文章

架构分层方法指导

在《不过时的经典层架构》里讲了经典的四层架构怎样对易变性做封装。咱们实际项目中&#xff0c;如果没有足够的实践和关键性思考&#xff0c;还是很可能使用名义上科学的分类理论&#xff0c;却在按照功能进行架构分层。今天咱们就通过一些简单的指导来尽量减少这种风险。 四问…

LeetCode 75 —— 70. 爬楼梯

LeetCode 75 —— 70. 爬楼梯 一、题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法…

机器学习笔记 - 基于OpenCV和Vantage-point tree构建图像哈希搜索引擎

一、关于图像哈希 上一篇文章中,了解到了图像哈希是使用算法为图像分配唯一哈希值的过程。在深度学习普及之前,一些搜索引擎使用散列技术来索引图像。 言外之意目前的图像搜索引擎主要都是基于深度学习的技术,不过思路都是一样的,我们这里基于OpenCV提供的图像哈希技术构建…

python实现削苹果小游戏

也不用998只有199源码发你。 支付完发我邮箱发你源代码。

RISC-V处理器的设计与实现(三)—— 上板验证(基于野火征途Pro开发板)

文章目录 RISC-V处理器的设计与实现&#xff08;一&#xff09;—— 基本指令集_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;二&#xff09;—— CPU框架设计_Patarw_Li的博客-CSDN博客 RISC-V处理器的设计与实现&#xff08;三&#xff09;—— 上板验…

Gradle安装与配置(8.2)

一、下载地址 https://gradle.org/releases/ https://downloads.gradle.org/distributions/gradle-8.2-bin.zip 解压后放到合适的位置 二、配置环境变量并测试 D:\ProgramFiles\gradle-8.2\bin gradle -v 三、配置镜像 D:\ProgramFiles\gradle-8.2\init.d init.gradle&…

算法第36天:数组中出现次数超过一半的数字【摩尔投票法】

算法介绍 摩尔投票法&#xff1a;求众数的方法。 就是维护一个集合&#xff0c;然后我们遍历我们的数组&#xff0c;假如现在我们遍历到的数为x&#xff0c;当集合中都是x的话我们就将x放入集合中&#xff0c;如果我们遍历到的数为x&#xff0c;但是集合中有y&#xff0c;那么…

【VulnHub系列】West-Wlid1.1

实验信息 Kali&#xff1a;192.168.10.106 WestWild&#xff1a;192.168.104 实验过程 通过arp-scan查找目标主机&#xff0c;确定目标主机IP192.168.10.104 sudo arp-scan --interface eth0 192.168.10.0/24 探测靶机开放的端口 sudo nmap -sT --min-rate 10000 -p- 192.1…

Redis的持久化机制(1)

RDB&#xff0c;即Redis DataBase的简称。RDB是Redis默认的持久化机制 RDB持久化文件&#xff0c;速度比较快&#xff0c;而且存储的是一个二进制的文件&#xff0c;传输起来很方便 在指定的时间间隔内&#xff0c;将内存中的数据集的快照写入磁盘。默认保存在/usr/local/bin目…

122.【SpringBoot - 再刷 - 基础入门 - 01】

SpringBoot2 核心技术 (一)、SpringBoot核心技术入门1.Spring能做什么?1.1、Spring 的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2.为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3.时代背景3.1、微服务3.2、分布式的困难…

github克隆代码加速

https://www.gitclone.com/gogs/ 只需要在正常的git clone后的URL里&#xff0c;嵌入gitclone.com即可快速clone 举例&#xff1a; #原地址 git clone https://github.com/SpringSource/Spring-framework #新地址 git clone https://gitclone.com/github.com/SpringSource/…

2023年出货量预计增长75%,谁在领跑规模化量产赛道?

2023年将成为一个分水岭&#xff0c;中国智能驾驶市场已经进入了下一个竞争周期&#xff0c;卷&#xff0c;难 成为了智驾赛道新的关键词&#xff0c;对各赛道的供应商来说&#xff0c;未来几年将是比拼规模化与降本。 对各级供应商来说&#xff0c;产品规模化量产&#xff0c…

【二叉树part07】| 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先

目录 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 &#x1f388;LeetCode501.二叉搜索树中的众数 &#x1f388;LeetCode236.二叉树的最近公共祖先 &#x1f388;LeetCode530.二叉搜索树的最小绝对差 链接&#xff1a;530.二叉树的最小绝对差 给你一个二叉搜索树的根…

主成分分析系列(二)为什么特征向量是主成分

在主成分分析系列&#xff08;一&#xff09;概览及数据为何要中心化这篇文章中介绍了PCA算法的大概想法及数据为何要中心化&#xff0c;在这篇文章具体推导PCA算法的过程。 1. 首先 PCA 最原始的想法是&#xff1a; 设 V \mathbf{V} V 为 d {d} d 维 线性空间&#xff08;即…

python项目导入导出依赖包

1. 导出所有依赖包 进入项目路径&#xff0c;执行以下命令&#xff1a; pip freeze > requirements.txt然后在当前目录是可以看到生成“requirements.txt”文件&#xff0c;可以打开看看&#xff0c;会发现有很多个包信息&#xff0c;其实这里是把你当前python环境的所有包…

如何编写一个含有抄底信号的副图指标

如果你作为通达信软件源代码的程序维护员&#xff0c;如何编写一个含有抄底提示的副图指标&#xff1f;请看下面的的示例教程。(python语言) python # 导入所需的库 import talib # 计算移动平均线 def moving_average(data, period): ma talib.SMA(data, timeperiodperio…

江苏一学霸,高考居然考了0分,老师们调取了监控后,才发现真相

学校里的学霸&#xff0c;李明&#xff0c;一直以来都是大家羡慕的对象。他聪明伶俐&#xff0c;学习优秀&#xff0c;每次考试都能轻松取得满分。而这次高考&#xff0c;他的成绩却让所有人大跌眼镜——零分&#xff01;这个让人难以置信的结果引发了全校师生的困惑和疑问。 在…

还傻傻搞不懂MySQL事务隔离级别么(图文并茂,保证你懂!)

本文首发于公众号【看点代码再上班】&#xff0c;欢迎围观&#xff0c;第一时间获取最新文章。 原文&#xff1a;还傻傻搞不懂MySQL事务隔离级别么&#xff08;图文并茂&#xff0c;保证你懂&#xff01;&#xff09; 大家好&#xff0c;我是tin&#xff0c;这是我的第25篇原创…

MySQL 服务无法启动

问题场景&#xff1a; 启动mysql&#xff1a;net start mysql 临时解决办法&#xff1a; tasklist| findstr "mysql"taskkill/f /t /im mysqld.exemysqld --console重新打开一个cmd测试连接mysql 永久解决办法&#xff1a; 找到Mysql的根目录&#xff0c;删除dat…

云原生时代,如何通过极狐GitLab x KubeSphere 构建安全应用?

目录 DevSecOps 是什么&#xff1f;如何帮助我们打造云原生安全生态&#xff1f; 如何寻找云原生 DevSecOps 落地切入点&#xff1f; 第一层&#xff1a;K8s 安全 第二层&#xff1a;容器镜像安全 第三层&#xff1a;应用程序安全 这么多安全功能&#xff0c;如何去实现落…