Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CTFHub技能树通关教程——SSRF漏洞原理攻击与防御(一)(超详细总结)

CTFHub技能树通关教程——SSRF漏洞原理攻击与防御(一)(超详细总结)

原创
作者头像
小羽网安
发布于 2024-06-16 13:14:22
发布于 2024-06-16 13:14:22
53300
代码可运行
举报
文章被收录于专栏:web安全web安全
运行总次数:0
代码可运行

CTFHub技能树通关教程——SSRF漏洞原理攻击与防御(一)(超详细总结)

什么是SSRF?

服务器端请求伪造(Server-Side Request Forgery),是一种网络攻击技术,攻击者利用服务器上的应用程序向任意服务器发起请求或者操作,这些请求可能包括但不限于文件读取、命令执行、端口扫描等。由于这些请求是从服务器内部发起的,因此他们可以绕过服务器的外部访问控制,访问内部网络资源或者执行恶意操作。

image-20240616004227655
image-20240616004227655

它的危害

SSRF攻击通常发生再服务器应用程序允许用户输入被用于构建请求 URL的情况下。如果输入没有得到适当的验证和过滤,攻击者就可以利用这一点来发起恶意请求。例如,如果一个应用程序允许用户输入一个URL来下载文件,攻击者可能会输入指向内部服务器的URL,从而访问或者下载内部文件。

如何防御?

  1. 验证所有用户输入,确保它们是合法的和预期的。
  2. 限制可访问的URL或资源,避免访问内部网络或敏感资源。
  3. 使用白名单机制,只允许访问预定义的、安全的URL。
  4. 对于敏感操作,实施额外的安全措施,如身份验证和授权检查。

SSRF漏洞复现

靶场:CTFHub,Pikachu

内网访问

image-20240616124025150
image-20240616124025150

开启环境后,查看题目条件,找出位于127.0.0.1的flag.php

image-20240616124135937
image-20240616124135937

页面什么也没有

image-20240616124047575
image-20240616124047575

根据题目要求尝试使用这个url参数,进行内网访问,但是页面什么也没有

image-20240616124335669
image-20240616124335669

仔细观察url参数前面有一个_,将它删掉试试,测试成功

image-20240616124502963
image-20240616124502963

伪协议读取文件

image-20240616124713300
image-20240616124713300

常见的伪协议类型有

  • file:///
  • dict://
  • sftp://
  • ldap://
  • tftp://
  • gopher://

这里我们用到的是file:/// --本地文件传输协议,主要用来访问本地计算机中的文件,构造payload如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/?url=file:///var/www/html/flag.php
image-20240616130017045
image-20240616130017045

鬼的,他就三个?对于刚入门的小白,我懵逼了。。。。直到几分钟后我查看了他的源码。

image-20240616130146090
image-20240616130146090

emmmm,这不就是我们的结果嘛,这关过了

端口扫描

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

截取到请求包之后发送到攻击器(Intruder)

image-20240616132020109
image-20240616132020109

添加payload,这里只有一个需要爆破,所以攻击方式选狙击手

image-20240616132053488
image-20240616132053488

设置payload为数值型,因为需要扫描的端口是8000-9000,所以payload配置如下

image-20240616132118565
image-20240616132118565

验证匹配结果,并开始攻击

image-20240616132134851
image-20240616132134851

端口爆破成功,成功找到flag,端口为8248

image-20240616132210455
image-20240616132210455

尝试使用浏览器访问内网的8248端口,成功!

image-20240616132310478
image-20240616132310478

Gopher协议的利用

定义:Gopher是早期的Internet信息检索系统,通过索引将用户引导至不同资源,主要使用TCP 70端口。在WWW普及前,它是主要的检索工具,但现已基本过时,使用较少。

POST

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

这个题目中呢有这么一个文件,在127.0.0.1中的flag.php

image-20240616180800398
image-20240616180800398

当我尝试输入了各种值,抓包分析,直到我查看了源码。。

image-20240616181036012
image-20240616181036012

这里有一个key,还是被注释了的,不知道是干嘛的先复制下来2161b9fb20ae6d96b0604425b1de64be,尝试使用file协议查看php源码,访问默认web目录var/www/html/flag.php,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?url=file:///var/www/html/flag.php

这时候即可查看源码,尝试进行分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//关闭所有的错误报告
error_reporting(0);
//判断请求的ip地址是否是127.0.0.1
if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
    //如果不是127.0.0.1,就返回这段字符串
    echo "Just View From 127.0.0.1";
    return;
}
//falg的获取
$flag=getenv("CTFHUB");
$key = md5($flag);
//判断post请求中是否存在key这个参数,key就是刚刚页面上看到的注释的值
if (isset($_POST["key"]) && $_POST["key"] == $key) {
    echo $flag;
    exit;
}
?><form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=<?php echo $key;?>-->
</form>

每个项目中默认主页都是index,这是一个php靶场,那么这首页就是index.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/?url=file:///var/www/html/index.php

访问之后是个空页面,但是查看网页源码会发现,尝试分析一下源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
//关闭错误报告
error_reporting(0);
//判断url参数是否存在
if (!isset($_REQUEST['url'])){
    //不存在就跳转到当前根目录
    header("Location: /?url=_");
    exit;
}
//初始化curl
$ch = curl_init();
//指定请求的url
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
//告诉curl不返回http头,只返回http正文
curl_setopt($ch, CURLOPT_HEADER, 0);
//允许cURL跟随重定向。如果服务器响应包含重定向,cURL将自动处理。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);

这段代码没有包含错误处理,也没有设置CURLOPT_RETURNTRANSFER选项,这可能导致cURL的输出直接被输出到浏览器,所以可以利用此curl漏洞进行攻击

构造POST请求包

访问flag.php查看源码找到key,并输入到输入框,使用bp拦截

image-20240616183852162
image-20240616183852162

尝试使用Gopher 协议向服务器发送 POST 包

在使用Gopher协议发送POST请求包时,HOST、Content-Type和Content-Length请求头是必不可少的,但是在GET请求中可以没有。key值为自己所获得的。

在向服务器发送请求时,首先浏览器会进行一次URL解码,其次服务器收到请求后,在执行curl功能时,进行第二次解码。

所以我们需要对构造的请求包进行两次编码:

第一次解码

image-20240616183250952
image-20240616183250952

将解码的结果复制下来,保存在txt文档中,其中需要将%0A替换成 %0D%0A

因为%0A是ASCII 码中的换行符,在URL的二次编码中不需要,否则会导致curl执行错误,导致我们拿不到正确的结果

image-20240616183328279
image-20240616183328279

替换完成之后,再次进行url编码,这里的url就是源码中的curl要执行的

image-20240616183349871
image-20240616183349871
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//使用gopher协议,构造payload
?url=gopher://127.0.0.1:80/_二次编码的url(注意别少了前面那个下划线)

得到结果!

image-20240616183811471
image-20240616183811471

原文链接https://mp.weixin.qq.com/s/G9HqXKvbucxnmMS3od9Lkw

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SSRF漏洞原理攻击与防御
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个漏洞
十二惊惶
2024/02/28
5240
SSRF漏洞原理攻击与防御
CTFHub技能树通关教程——SSRF漏洞原理攻击与防御(二)(上传文件,FastCGI,Redis协议,URL Bypass)
访问内网下的127.0.0.1/flag.php,这里什么也没有,就一个上传文件,还没有提交按钮
小羽网安
2024/06/17
3540
CTFHub技能树通关教程——SSRF漏洞原理攻击与防御(二)(上传文件,FastCGI,Redis协议,URL Bypass)
SSRF之gopher协议深度解析
Gopher是Internet上一个非常有名的信息查找系统,它将Internet上的文件组织成某种索引,很方便地将用户从Internet的一处带到另一处。在WWW出现之前,Gopher是Internet上最主要的信息检索工具,Gopher站点也是最主要的站点,使用tcp70端口。但在WWW出现后,Gopher失去了昔日的辉煌。现在它基本过时,人们很少再使用它。
Andromeda
2023/10/21
1.1K0
SSRF之gopher协议深度解析
从一文中了解SSRF的各种绕过姿势及攻击思路
文章首发于跳跳糖社区https://tttang.com/archive/1648/
用户9691112
2023/05/18
5.3K0
从一文中了解SSRF的各种绕过姿势及攻击思路
SSRF漏洞学习
SSRF(Server-Side Request Forgery:服务器端请求伪造)
全栈程序员站长
2022/09/12
7540
SSRF漏洞学习
ssrf漏洞
利用条件 (1)web服务器存在SSRF漏洞; (2)web服务器有访问本地或远程服务器的权限; 存在位置 一般是web服务器提供了从其他服务器获取数据的功能。 (1)通过URL分享网页内容 (2)在线翻译 (3)通过url对图片的加载和下载 (4)转码服务 利用实验,开启方法
h3110_w0r1d
2024/02/19
4400
ssrf漏洞
SSRF漏洞总结
SSRF(Server-Side Request Forgery):指目标应用存在一种漏洞,利用该漏洞攻击者可以控制目标web应用的后端程序向任意ip地址/语言发送http请求或者其他数据包
全栈程序员站长
2022/09/12
1.6K0
SSRF漏洞总结
SSRF漏洞详解 一文了解SSRF漏洞
服务器端请求伪造(Server-Side Request Forgery, SSRF)
全栈程序员站长
2022/09/13
1.8K0
SSRF漏洞详解 一文了解SSRF漏洞
CTFHUB刷题笔记 - wuuconix's blog
本部的阮行止学长推荐了ctf web方向的刷题顺序。这几天太废了,光顾着看JOJO了2333,已经从大乔看到了星辰远征军埃及篇了,今天打算学习学习,不让自己的良心太难受。
wuuconix
2023/03/14
1K0
CTFHUB刷题笔记 - wuuconix's blog
一篇文章深入学习SSRF漏洞
博客原文地址: https://hack-for.fun/posts/20200120/
IFONLY@CUIT
2020/02/19
3K0
[红日安全]Web安全Day4 - SSRF实战攻防
大家好,我们是红日安全-Web安全攻防小组。此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字叫 Web安全实战 ,希望对想要学习Web安全的朋友们有所帮助。每一篇文章都是于基于漏洞简介-漏洞原理-漏洞危害-测试方法(手工测试,工具测试)-靶场测试(分为PHP靶场、JAVA靶场、Python靶场基本上三种靶场全部涵盖)-实战演练(主要选择相应CMS或者是Vulnhub进行实战演练),如果对大家有帮助请Star鼓励我们创作更好文章。如果你愿意加入我们,一起完善这个项目,欢迎通过邮件形式(sec-redclub@qq.com)联系我们。
红日安全
2020/02/20
2.1K0
CTFHUB web基础——SSRF
数字IP是指将IP地址中的每个数字都转换为一个十进制数的形式,例如将192.168.0.1转换为十进制数 3232235521。
Andromeda
2023/10/21
5300
CTFHUB web基础——SSRF
SSRF漏洞原理与利用
SSRF(Server-Side Request Forgery),服务器端请求伪造;利用一个可以发起网络请求的服务,可以当做跳板来攻击其他服务。
渗透攻击红队
2019/11/20
1.8K0
SSRF漏洞原理与利用
SSRF漏洞讲解
平常在做渗透测试工作的过程中哪些地方容易产生SSRF漏洞,可以看到大部分相关资料都会显示,容易产生SSRF的地方在社交分享、图片加载、邮件系统、数据库等。为什么这些地方会出现呢,社交分享可能会分享到其他网址对吧,如果我们替换其网址为我们的本地地址呢,会出现什么样得情况?同一个地址更换不同的端口又会有什么不同,加载图片请求的服务器可能和你所访问的网站不是同一个服务器,这样是不是能探测内网的同一局域网段的情况呢,邮件系统也是同一道理,这些都是探测SSRF漏洞的手段。
全栈程序员站长
2022/09/13
1.1K0
SSRF漏洞讲解
漏洞笔记 | 浅谈SSRF原理及其利用
声明:本文仅用作技术交流学习分享用途,严禁将本文中涉及到的技术用法用于违法犯罪目的。
TeamsSix
2019/12/30
12.2K0
PHP的libcurl中存在的一些问题
PHP的libcurl中存在的一些问题 看了近来的几场ctf题目,学习了一些关于php libcurl的一些知识,在这里总结一下。 0x1发送POST请求时造成任意文件读取 PHP manual上对C
安恒网络空间安全讲武堂
2018/02/06
1.1K0
PHP的libcurl中存在的一些问题
SSRF服务器端请求伪造
SSRF服务端请求伪造漏洞,也称为XSPA跨站端口攻击,是一种由攻击者构造一定的利用代码导致服务端发起漏洞利用请求的安全漏洞,一般情况下SSRF攻击的应用是无法通过外网访问的,所以需要借助目标服务端进行发起,目标服务器可以链接内网和外网,攻击者便可以通过目标主机攻击内网应用。
WindRunnerMax
2020/12/22
1.2K0
当SSRF遇上Redis
SSRF(Server-Side Request Forgery)即服务器端请求伪造,是一种由攻击者构造攻击链传给服务器,服务器执行并发起请求造成安全问题的漏洞,一般用来在外网探测或攻击内网服务。
Gamma实验室
2020/12/23
2K0
当SSRF遇上Redis
关于SSRF的总结
SSRF是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。利用一个可以发起网络请求的服务,当做跳板来攻击其他服务。这里简单总结一下ssrf,并来刷一些CTFshow上的题,还准备找一些案例。推荐一下ctfshow这个平台 可以对某个知识点有针对性的刷题题目质量也是很高的。
用户2700375
2022/06/09
9620
关于SSRF的总结
Black Hat USA 2020议题:SSRF漏洞利用新思路
2020年BlackHat大会上,Joshua Maddux介绍了一种针对SSRF的新颖利用思路,得到了广泛的关注。此类攻击是通过构造一个HTTPS Server,使TLS session中携带攻击载荷,攻击行为触发主要通过一个受限的SSRF漏洞(甚至一个钓鱼网页),结合TLS协议和DNS协议的特性,把攻击报文发到受害者内网的TCP服务中,达到SSRF漏洞攻击面扩大的效果。本文将针对此攻击进行较深入介绍和演示,供大家学习参考。
FB客服
2021/05/20
1.1K0
Black Hat USA 2020议题:SSRF漏洞利用新思路
相关推荐
SSRF漏洞原理攻击与防御
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验