当前位置: 首页 > article >正文

【SSRF漏洞】——http协议常见绕过

改变的确很难,但结果值得冒险

本文如有错误之处,还请各位师傅指正

一.ssrf概述

SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造

 SSRF是一种由攻击者构造形成目标服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统(防火墙隔绝)。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

原由:大都是由于服务端提供了从其它服务器获取数据的功能,比如使用户从指定的URL web应用获取图片、下载文件、读取文件内容等。但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据。

  • 判断是否为SSRF题目:题目源码出现以下函数file_get_contents()、curl()、fsocksopen()、fopen()
  • 时可能有SSRF
  • 常用协议:http://,file://,dict://,gopher://

二.curl会话

PHP中的cURL会话(cURL session)是通过cURL库提供的功能来进行HTTP请求的过程。cURL会话可以用于发送HTTP/HTTPS协议请求,获取服务器响应,并对请求和响应进行配置和处理。

支持的协议:dict file ftp ftps http https imap imaps ipfs ipns mqtt pop3 pop3s smb smbs smtp smtps telnet tftp

ssrf常用的四种协议包括file,dict,http,gopher

  • file协议‌:用于进行任意文件读取,是SSRF中最简单的利用方式。通过指定文件路径(如file://开头),攻击者可以尝试读取服务器上的任何文件,包括敏感信息或配置文件。

  • http(s)协议‌:允许攻击者向目标发送HTTP请求,探测内网服务。由于GET请求的参数直接加在URL中,这使得探测那些使用GET请求的应用成为可能,进而进行内网探测和攻击。

  • dict协议‌:1.探测内网主机 2.探测端口的开放情况‌ 3.探测端口的指纹信息 4.执行命令

  • gopher(万金油)协议‌:gopher协议允许通过Telnet远程访问其他应用程序,并使得Internet上的所有Gopher客户程序能够与Internet上的所有已“注册”的Gopher服务器进行对话。‌此外,Gopher协议支持发出GET和POST请求,这使得它能够在ssrf(服务器端请求伪造)攻击中发挥重要作用,例如攻击内网的MySQl,FTP,Telnet,Redis,Mencache等,同时也可以进行GET、POST请求。

使用cURL会话进行HTTP请求的基本步骤如下:

  •     创建一个cURL会话句柄(curl_init)。
  •     设置需要的选项,如请求的URL、请求方法、请求头、请求体等(curl_setopt)。
  •     执行HTTP请求(curl_exec)。
  •     获取服务器响应(可选)。
  •     关闭cURL会话(curl_close)。

 三.ctfshow之ssrf

web351:

使用dict协议查看哪个端口开放,来决定使用哪个协议:

url=dict://127.0.0.1:80成功回显,可以使用http协议

payload:url=127.0.0.1/flag.php

 web352:

parse_url()函数:是用来解析一个URL并返回该URL的各个组成部分

  • scheme: URL的协议部分http/https等等
  • host: URL的主机名部分   //后的部分
  • port: URL的端口部分  
  • user: URL的用户名部分    @前
  • pass: URL的密码部分       @前
  • path: URL的路径部分
  • query: URL的查询字符串部分
  • fragment: URL的锚点部分    #后

 payload:url=http://127.0.0.1/flag.php

web353:

不能出现127.0.的部分

payload:url=http://127.1/flag.php

 还可以通过编码绕过:16进制,10进制,8进制

 web354:

不能出现0和1

使用域名指向http://sudo.cc指向1270.0.1

payload:url=http://sudo.cc/flag.php

 web355:

payload:url=http://127.1/flag.php

web356:

linux中0也可以访问本地

payload:url=http://0/flag.php

web357:

gethostbyname()函数是Linux系统中用于获取主机名对应IP地址的函数之一。

get_file_contens()函数读取域名后返回目标攻击ip

filter_var函数来验证第一次返回真正IP地址的有效性,并且排除了私有IP范围(0.0.0.0/8、172.16.0.0/12和192.168.0.0/16)和保留IP范围(0.0.0.0/8和169.254.0.0/16。)。

 这里采用DNS rebinding(DNS重新绑定攻击)绕过

攻击重点在于DNS服务能够在两次DNS查询中返回不同的IP地址,第一次是真正的IP第二次是攻击目标IP地址,甚至可以通过这种攻击方法绕过同源策略。

 在这个网站注册账号:CEYE - Monitor service for security testing

 得到一个域名和两个ip

注意重定向时,域名的使用:r.域名

payload:url=http://r.zxfpib.ceye.io/flag.php

web358:

preg_match('/^http:\/\/ctf\..*show$/i',$url)

^:表示正则匹配的开始

^http:\/\/ctf\.:以http://ctf.开头

.*:匹配零个或任意个字符

$:匹配的结束表示

 parse_url匹配的时候,@前的内容是user部分,#后的部分会被忽略

payload:url=http://ctf.@0/flag.php#show

或者   url=http://ctf.@0/flag.php?show


http://www.kler.cn/news/305766.html

相关文章:

  • 【React】React18.2.0核心源码解读
  • 乌俄冲突下AI和计算机的使用
  • Spring Boot:现代化Java应用开发的艺术
  • 远程访问电脑共享文件
  • 【Arduino】BNO085 姿态的 3D模型 展示方法(映射到 Unity)
  • Mybatis通用接口-基于Provider
  • 一维稳态与非稳态导热的详细分析
  • 力扣100题——栈和堆
  • 设计模式 装饰模式(Decorator Pattern)
  • 讨论人机交互研究中大语言模型的整合与伦理问题
  • Mysql----索引与事务
  • NLP基础及其代码-BERT系列
  • Ubuntu 24.04 配置 nginx + php-fpm
  • 异常冲突行为和危险识别系统源码分享
  • Rust使用dotenvy读取环境变量
  • 网络通信流程
  • 树和二叉树基本术语、性质
  • 劳特巴赫ICD调试器CMM调用烧录框架固件研究之C语言版本
  • GitHub每日最火火火项目(9.15)
  • 影刀RPA实战:网页爬虫之CSDN博文作品数据
  • 基于C#+SQL Server2008 开发三层架构(CS界面)图书管理系统
  • SQLmap使用请求包进行sql爆破
  • 鹏哥C语言自定义笔记重点(67-)
  • MySQL练手题--公司和部门平均工资比较(困难)
  • 【前端UI框架】VUE ElementUI 离线文档 可不联网打开
  • 后端面试经典问题汇总
  • MATLAB中的函数编写有哪些最佳实践
  • Python(PyTorch)和MATLAB及Rust和C++结构相似度指数测量导图
  • JS的事件以及常见事件的绑定
  • Win电脑使用Ollama与Open Web UI搭建本地大语言模型运行工具