web安全漏洞之ssrf入门

ops/2024/11/18 10:30:37/

      web安全漏洞之ssrf入门

                     1.什么是ssrf

SSRF(Server Side Request Forgery,服务端请求伪造)是一种通过构造数据进而伪造成服务端发起请求的漏洞。因为请求是由服务器内部发起,所以一般情况下SSRF漏洞的目标往往是无法从外网访问的内系统。

SSRF漏洞形成的原理多是服务端提供了从外部获取数据的功能但没有对目标地址、协议等重要参数进行过滤和限制,从而导致可以自由构造参数并发出预期之外的请求。

                      2.URL结构

URL的结构如下: URL = scheme:[//authority]path[?query][#fragment]

 scheme由一串大小写不敏感的字符组成,表示获取资源所需的协议。

 authority中,userinfo用于进行身份验证,格式为username:password 

host表示服务器地址,一般是域名,也可能是ipv4或者ipv6地址

port表示服务器端口,如果不填,则使用协议的默认端口,比如http的80,ftp的21

path为资源路径,一般用"/"来分层 ,表示目录

query为查询字符串,接收用户输入参数,以"? "作为起点标识,比如"?name=crane"

fragment为片段ID,与query不同的是,它不会发送到服务端,只作为一个标记

                 3.ssrf漏洞利用方式

1.以PHP为例,实现了个包含SSRF漏洞的代理程序(帮你转发你的请求),代码如下:

```php

<?php $url = $_GET['url'];//从get参数中获取url的值

$ch = curl_init();//然后创建了curl这个对象

curl_setopt($ch, CURLOPT_URL, $url);//通过curl_setopt函数来给这个curl设置一些参数

curl_setopt($ch,CURLOPT_HEADER,false);//输出中不包含HTTP的header

curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); //表示跟随跳转

curl_setopt($ch, CURLOPT_TIMEOUT, 3);//大于3秒后会强制结束

curl_exec($ch);//开始执行

curl_close($ch);//关闭

?>

```

如果url=https://www.baidu.com,可以代理访问 www.baidu.com

2.但是因为代理程序的url未作任何过滤处理,所以可以修改url协议来发起SSRF。例如, 修改访问URL为:"file:///etc/passwd ",即可使用FILE协议访问本地文件/etc/passwd

这是SSRF最常见的利用方式,但更多的是读他的源码

3.SSRF漏洞通常出现在应用程序中,当它调用外部资源时可能会出现这种问题。

比如在社交服务中的分享功能、图片识别服务、网站采集服务以及远程资源请求或文件处理服务等场景下。

针对存在SSRF漏洞的应用程序进行测试的方法包括尝试控制和支持常见的协议:

file:从本地文件系统中读取文件的例子为file:///etc/passwd.

dict:字典服务器协议,原本用于查询词典信息,但由于支持自定义内容,因此可以用来探测端口并获取banner(例如Redis), 或者发送一些简单的流量给其他服务(比如MySQL)。

gopher:gopher是一种分布式文档传递服务,在SSRF攻击中有重要作用。通过使用gopher协议向特定IP地址及端口号发送任意内容,这可能模拟HTTP、Redis或者Mysql等网络请求行为。

4.在CTF和实战中,如果发现了目标存在SSRF漏洞,首先可以尝试通过file协议读取本地文件,了解目标系统的相关信息。

常见的文件路径如下:

/etc/passwd 几乎所有的linux发行版都会有这个文件,可以作为是否能读取本地文件的评判标准。同时他还保存了系统中有哪些用户

/etc/apache2/* 这个目录包含了apache2的配置文件,可以了解web目录,开放端口等信息

/etc/issue 这个文件一般表示该系统是什么linux发行版

/proc 这个目录存放着系统运行的状态信息,其中含有以pid命名的文件夹,保存着这个进程的信息。

还有一个self软连接指向当前运行的进程

/proc/[pid]/cmdline 程序运行的命令行

/proc/[pid]/env 程序运行的环境变量

/proc/[pid]/fd/* 程序打开的文件

/proc/net 系统的网络状态信息


http://www.ppmy.cn/ops/134676.html

相关文章

28.<Spring博客系统④(使用MD5摘要算法对数据库密码进行加密)>

密码算法简介 1.对称加密算法&#xff1a;加密和解密算法一样 2.非对称加密算法&#xff1a;公钥加密、私钥解密 3.摘要算法&#xff1a;不能解密&#xff0c;不可逆 简单介绍了解一下&#xff1a; 一、对称密码算法 是指加密秘钥和解密秘钥相同的密码算法. 常见的对称密码算法…

如何在算家云搭建Peach-9B-8k-Roleplay(文本生成)

一、Peach-9B-8k-Roleplay简介 Peach-9B-8k-Roleplay 是一种聊天大型语言模型&#xff0c;它是通过我们的数据合成方法创建的超过 100K 的对话中微调 01-ai/Yi-1.5-9B 模型而获得的。 也许是 34B 以下参数最好的 LLM。 二、模型搭建流程 1. 创建容器镜像 进入算家云平台的“…

RPC-健康检测机制

什么是健康检测&#xff1f; 在真实环境中服务提供方是以一个集群的方式提供服务&#xff0c;这对于服务调用方来说&#xff0c;就是一个接口会有多个服务提供方同时提供服务&#xff0c;调用方在每次发起请求的时候都可以拿到一个可用的连接。 健康检测&#xff0c;能帮助从连…

大数据CDP集群中ImpalaHive常见使用语法

1. SQL中设置常量 set var:pi_sysdate 20241114; Variable PI_SYSDATE set to 202411142. CDP中impala 创建内外表 #hive3.0 默认不创建事务表的配置参数 set default_transactional_typenone; create external table stg.hd_aml_mac_ip_ext (machinedate string,vc_fundacc…

求矩阵中最小元素及其位置

#include<stdio.h> int main() {int arr[3][3];for(int i0;i<3;i)//录入行{for(int j0;j<3;j)//录入列{scanf("%d",&arr[i][j]);}}int h,l;//定义行 列int minarr[0][0];//将二维数组首个元素定义为最小for(int i0;i<3;i)//遍历二维数组找到最小…

无人机+无人车+机器狗:城市巷战突破技术详解

在城市巷战中&#xff0c;无人机、无人车和机器狗的组合可以形成一种全新的战场突破技术&#xff0c;这种组合能够大幅提升作战效率&#xff0c;减少人员伤亡。以下是对这一技术的详细解析&#xff1a; 一、无人机的作用 1.空中侦察&#xff1a;无人机能够提供高空视角&#x…

vue3 查看word pdf excel文件

也是在网上找的基础上修改的 可以直接使用 npm install vue-office/docx npm install vue-office/excel npm install vue-office/pdf​<template><divclass"Office-Preview"v-loading"loading"element-loading-text"文件加载中...">…

2024.11|云计算行业的商业模式创新方法及实践

截至2024年&#xff0c;全球云计算行业已迈入一个全新的发展阶段。从基础设施即服务&#xff08;IaaS&#xff09;到基于人工智能的大规模模型平台&#xff0c;云计算技术的演变不仅改变了技术的内涵&#xff0c;也重新定义了商业模式。本文通过对全球最新技术进展的系统性分析…