您现在的位置是:首页 > 正文

web安全第九天:服务器端请求伪造漏洞SSRF

2024-02-01 05:23:15阅读 2

1.1服务器端请求

是从客户端发起一个请求到服务端,服务端再向另外的服务端发起请求的过程称之为服务器端请求。
以寄快递为例子︰我们自己(客户端)首先需要把物品交给快递员(服务端),快递员再把这个物品交到对方手里(服务器)。

1.2服务器请求伪造

SSRF (server-side request forgery,服务端请求伪造)
是一种由攻击者构造形成由服务器端发起请求的
一个漏洞。让服务器去请求你通常请求不到的东西。一般用来
在外网探测或攻击内网服务。

1.3形成原因

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。漏洞形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据。
最常见的例子:攻击者传入一个未经验证的URL,后端代码直接请求这个URL,就会造成SSRF 漏洞。

1.4形成的危害

获取 web应用可达服务器服务的banner信息,以及收集内网web应用的指纹识别,根据这些信息进行下一步的渗透
攻击运行在内网的系统或应用程序,获取内网系统弱口令进行内网漫游,对有漏洞的内网web应用实施攻击

2.1 WEB功能

通过URL地址分享网页内容:获取超链接的标题进行显示
文件处理、编码处理、转码等服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览在线翻译:给网址翻译对应网页的内容
通过URL地址加载与下载图片:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
图片、文章收藏功能:主要网站会取URL地址中 title以及文本的内容作为显示以求好的用户体验未公开的api 实现及其他调用URL的功能

2.2 url关键字寻找

share、wap、url、link、src、source、target、u、3g、display、sourceURI、imageURL、domain …如果利用google语法(inugl:url=)加上这些关键字去寻找SSRF 漏洞,耐心的验证,现在还是可以找到存在的SSRF漏洞。

3.1相关函数

PHP中的函数:
curl_exec()、 file_get_contents()、fsockopen()
Java中相关类:
仅支持 HTTPHTTPS协议的类: HttpClient类、HttpURLConnection类、 OkHttp类、 Request类支持sun.net.www.protocol所有协议的类:URLConnection类、URL类、 lmagelO

3.1.1curl_exec()

前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
在这里插入图片描述

3.1.2 file_get_contents()

这段代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。
在这里插入图片描述

3.1.3 fsockopen()

fsockopen函数实现获取用户制定url的数据(文件或者html )。这个函数会使用socket跟服务器建立tcp连接,传输原始数据
在这里插入图片描述
服务端请求伪造漏洞

4.1分类

有回显:从页面中可以看到返回内容。无回显:无法从页面中看到返回内容。

4.2有回显判断存在

通过目标服务器去请求url,如果返回了该网站的信息,则说明存在服务端请求伪造。

4.3 无回显判断存在

dnslog
在这里插入图片描述

读取敏感文件

1.1 file协议

本地文件传输协议,用于访问本地计算机中的文件。好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样。
格式: file://filepath

1.1.1读取/etc/passwd

在Linux中 letc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。
在这里插入图片描述

1.1.2读取/etc/hosts

hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。可以用文本文件打开!当用户在浏览器中输入一个网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,浏览器会立即打开对应网页,如果没有找到,则浏览器会将网址提交DNS服务器进行IP地址解析。
在这里插入图片描述

1.2 file协议与http协议的区别

file协议主要用于读取服务器本地文件,访问的是本地的静态资源
http是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。简单来说file只能静态读取,http可以动态解析
http服务器可以开放端口,让他人通过http访问服务器资源
但file不可以

2.1 dict协议

属于字典服务器,在ssrf中常用于探测目标服务器端口上运行的服务版本信息.
格式: dict://ip:port

2.1.2探测内网redis

REmote Dlctionary Server(Redis)是一个由Salvatore Sanfilippo写的 key-value存储系统,是跨平台的非关系型数据库。
Redis一般绑定在本地的6379端口上,如果在没有开启认证的情况下,可以导致仕意用尸利用SST洞河以击内网中的未授权Redis以及读取Redis的数据。
在这里插入图片描述

3.1 dict协议攻击redis

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行redis的用户是root用户,攻击者可以通过写定时任务的方式进行反弹shell。

3.1.1写定时任务

centos,在/varlspool/cron/目录下
ubuntu的定时任务在/var/spool/cron/crontabs/目录下
在这里插入图片描述
在这里插入图片描述

3.2 gopher办议攻击redis

gopher协议是比 http 协议更早出现的协议,现在已经不常用了,但是在SSRF 漏洞利用中 gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,可以攻击内网的FTP、Telnet、Redis、Memcache,也可以进行GET、POST请求,还可以攻击内网未授权MySQL
gopher协议默认端口70,所以需要指定web端口,而且需要指定方法。数据部分需要进行url编码。回车换行使用%0d%0a
后接TCP数据流
基本协议格式:URL:gopher://<host>:<port>/<gopher-path>

3.2.1Gopherus的运用

在SSRF易受攻击的站点上生成 Gopher负载以利用Ss
RF并获得RCE。
可以攻击的应用: MySQL、FastCGl、Memcached、Redis、Zabbix、SMTP
2736892
项目地址: https:7/github.com/tarunkant/Gopherus

网站文章

  • 初学kafka命令(topics)

    创建kafka topicbin/kafka-topics.sh --create --topic topicname --replication-factor 1 --partitions 1 --zookeeper localhost:2181查询topic,进入kafka目录:bin/kafka-topics.sh --list --zookeeper localhost:2181查...

    2024-02-01 05:23:08
  • 【C语言】——打印杨辉三角(递归)

    【C语言】——打印杨辉三角(递归)

    觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻🌞🌞

    2024-02-01 05:22:40
  • Java任务超时处理机制实现

    1问题描述 在应用软件的开发中,经常会遇到这样的一种需求:需要实现一个方法来执行某种任务,而这个方法的执行时间不能超过指定值,如果超时,则调用者不管这个方法将来是否可能执行成功,都要中断它的执行,或者让这个方法返回。这就是超时处理问题。 根据执行任务的方法是否异步,可以把问题从两个方面分析:如果方法顺序执行,则方法执行时整个程序的控制权在执行任务的方法中,方法调用者对于

    2024-02-01 05:22:33
  • 一个字节是几位?

    一个字节为8位。字节含义:字节是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit...

    2024-02-01 05:22:27
  • 【MATLAB】如何安装配置MinGW-w64 C/C++编译器 热门推荐

    【MATLAB】如何安装配置MinGW-w64 C/C++编译器 热门推荐

    【MATLAB】如何安装配置MinGW-w64 C/C++编译器 win10 + matlab2018b 具体方法: 1.打开你的matlab,选择“附加功能”,选择“获取附加功能” 2.在“附加功能...

    2024-02-01 05:22:00
  • 25.理一理关于tensorflow的各种骚操作

    1.tf.squeezehttps://www.jianshu.com/p/a21c0bc10a382.tf.casthttps://blog.csdn.net/dcrmg/article/details/797478143.tf.expand_dims https://www.cnblogs.com/helloworld0604/p/90017...

    2024-02-01 05:21:53
  • ‘mysql‘ 不是内部或外部命令,也不是可运行的程序或批处理文件终极大坑

    ‘mysql‘ 不是内部或外部命令,也不是可运行的程序或批处理文件终极大坑

    ‘mysql’ 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方案‘mysql’ 不是内部或外部命令,也不是可运行的程序或批处理文件的解决方案,关于这个问题其实还是很好解决的,网上一搜全都有...

    2024-02-01 05:21:46
  • Python-Django篇----用Python搭建自己的服务(一)(2):配置文件介绍并运行本地服务

    Python-Django篇----用Python搭建自己的服务(一)(2):配置文件介绍并运行本地服务

    从这一篇文章开始呢,就涉及到代码的编写了,因为写的是Python嘛,所以建议大家去弄一个PyCharm,当然,也可以直接用命令行编写,我这里呢就用编译器方便介绍。 首先呢,我们看上篇文章中创建的项目文件, 主要呢我们就关心一下settings和urls文件就行了,wsgi就是个web服务的网端接口配置文件,我们不太care这东...

    2024-02-01 05:21:16
  • python 文件、文件夹详细操作

    python 文件、文件夹详细操作

    一、文件操作1、文件操作流程2、文件打开模式3、文件循环4、文件的修改5、flush方法6、whit语句7、其它操作二、文件夹 /1、提要2、判断路径或文件3、路径名、文件名分割4、工作目录及创建文件...

    2024-02-01 05:21:09
  • 【5G系列】Network Slicing学习总结(2)

    【5G系列】Network Slicing学习总结(2)

    Network Slicing种类

    2024-02-01 05:21:02