ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)

目录

1、知识铺垫

(1)文件描述符 

(2)/dev/null

2、代码审计

3、命令分隔

(1)使用分号 ;

(2)使用逻辑或 ||

(3)使用 && 或者 &

4、%0a 换行符截断


 命令执行,需要严格的过滤

 

1、知识铺垫

(1)文件描述符 

标准输入(stdin):文件描述符为 0,用于读取输入数据。
标准输出(stdout):文件描述符为 1,用于输出普通的结果或信息。
标准错误(stderr):文件描述符为 2,用于输出错误信息。

(2)/dev/null

/dev/null 是类 Unix 操作系统中的一个特殊文件,被称为“空设备”或“黑洞”,它是一个字符设备文件,其主要作用是丢弃所有写入它的数据,同时任何从它读取的操作都会立即返回EOF(文件结束符)。

2、代码审计

system($c." >/dev/null 2>&1");

将 get 请求传递的 c 的内容与后面内容进行拼接后作为 system 函数的参数;

>/dev/null 是一个重定向操作符,用于将标准输出(stdout)重定向到 /dev/null,这意味着命令的标准输出将不会显示在终端或网页上,也不会写入任何文件;

2>&1 是另一个重定向操作符,它将标准错误(stderr)重定向到标准输出(stdout),>&1 表示将标准错误重定向到标准输出所指向的地方(即 /dev/null),这意味着命令的所有错误信息也会被丢弃。

直接传入系统命令没有回显:

针对这种回显被重定向到了黑洞的情况,下面给出一些处理方法。

3、命令分隔

使用管道符,这里又有四种方法

(1)使用分号 ;

对于命令分隔,分号只适用于 Linux 系统,不适用于 Windows 系统。

构造 payload:

?c=ls;

执行成功 

 

(2)使用逻辑或 ||

关于管道符的详细介绍和用法可以参考我之前写的 DVWA 靶场的命令注入:

DVWA 靶场之 Command Injection(命令执行)原理介绍、分隔符测试、后门写入与源码分析、修复建议_dvwa command injection-CSDN博客icon-default.png?t=N7T8https://myon6.blog.csdn.net/article/details/136291307对于两个或,前面为真,只执行前面的,后面命令不会执行;而对于一个或, 无论第一个命令执行为真还是假,都是直接执行第二个命令。

这里我们只希望执行 ls 而不希望执行重定向的效果,构造 payload:

其实无论后面重定向的命令执行与否对我们前面命令的执行都不影响,我们只需要确保第一个命令执行了就行。

?c=ls||

执行成功 

 (3)使用 && 或者 &

对于两个与,当第一个命令执行失败(为假),那么第二个命令也不会被执行;

对于一个与,前面的语句为假则直接执行后面的,前面可真可假,后面命令都会执行;

我们也不用管后面的,确保前面命令被执行即可。

但是这里与符号传入前需要先 URL 编码,我也不知道为啥,虽然说是在 url 里面传的,但是为啥或符号不需要呢?不懂,有知道的可以解释下谢谢。

直接传与符号没有回显:

编码后传入,构造 payload:

?c=ls%26

 

或者:

?c=ls%26%26

 

4、%0a 换行符截断

构造 payload:

?c=ls%0a

最后就直接拿 flag 吧,反向显示 flag.php:

?c=tac flag.php%0a

拿到 flag:ctfshow{77a306ca-d797-4143-a52e-bbc73ca89b22} 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

整型变量、赋值语句、cin 语句

1、变量: 在程序运行期间其值可以改变的量称为变量。变量是代码中最重要的元素。每个变量应该有一个名字,同一个程序内的变量名不重复。 请注意区分变量名和变量值这两个不同的概念(相当于张三的名字和他本人是不同的概念一样)。…

每日一题——Python实现PAT甲级1077 Kuchiguse(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方案1&#x…

C语言 | Leetcode C语言题解之第140题单词拆分II

题目&#xff1a; 题解&#xff1a; struct Trie {int ch[26];bool flag; } trie[10001];int size;void insert(char* s, int sSize) {int add 0;for (int i 0; i < sSize; i) {int x s[i] - a;if (trie[add].ch[x] 0) {trie[add].ch[x] size;memset(trie[size].ch, 0…

mnist的t-SNE二维空间可视化MATLAB

%% filename ‘mnist’; digitDatasetPath fullfile(matlabroot,‘toolbox’,‘nnet’,‘nndemos’, … ‘nndatasets’,‘DigitDataset’); imds imageDatastore(digitDatasetPath, … ‘IncludeSubfolders’,true,‘LabelSource’,‘foldernames’); %% labelCount coun…

Django redirect()函数实现页面重定向

1&#xff0c;通过路由反向解析进行重定向 1.1 添加视图函数 myshop/app2/views.py from django.http import HttpResponse from django.shortcuts import render from django.urls import reverse def index(request):return HttpResponse("app2 的index")# 反向…

simulink中显示模块中的名字

simulink/matlab version: R2022a 改动前&#xff1a;X那里没有显示名字&#xff1b; 改动方法&#xff1a; 1&#xff09;鼠标左键点击待显示模块&#xff1b; 2&#xff09;菜单栏新增 模块这个选项&#xff1b; 3&#xff09;点击自动名称&#xff1b; 4) 点击名称打开…

SpringBoot+Vue企业客户管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 员工管理员 功能截图

字节开源Hyper-SD模型,超越SDXL-Lightning,单步生成SOTA级图像

前言 近年来&#xff0c;扩散模型&#xff08;Diffusion Model&#xff0c;DM&#xff09;在图像生成领域取得了显著进展&#xff0c;展现出前所未有的图像质量和多样性。然而&#xff0c;扩散模型的训练和推理过程通常需要多个步骤&#xff0c;这限制了其在实际应用中的效率。…

【HarmonyOS】放大缩小手势实现

【HarmonyOS】放大缩小手势实现 一、鸿蒙中手势的类型&#xff1a; 对于放大缩小手势&#xff0c;在应用开发中使用较为常见&#xff0c;例如预览图片时&#xff0c;扫码时等。 在鸿蒙中对于常见的手势进行的封装&#xff0c;可以通过简单的API进行监听调用&#xff0c;以下是…

【STM32】ucOS-III多任务程序

【STM32】uc/OS-III多任务程序 文章目录 【STM32】uc/OS-III多任务程序STM32F103C8T6移植uC/OS-III基于HAL库超完整详细过程与相关实验实验任务实验过程一、 uC/OS-III源码下载二、 建立STM32CubeMX工程三、 复制uC/OS-III文件到工程文件夹四、 添加工程组件和头文件路径五、修…

如何在恢复出厂设置后从 Android 恢复照片

在某些情况下&#xff0c;您可能会考虑将 Android 设备恢复出厂设置。需要注意的是&#xff0c;恢复出厂设置后&#xff0c;所有设置、用户数据甚至应用程序数据都将被清除。因此&#xff0c;如果您将 Android 设备恢复出厂设置&#xff0c;甚至在里面留下了一些珍贵的照片&…

Java开发-面试题-0005-==和String的equals()和String的intern()方法的区别

Java开发-面试题-0005-和String的equals()和String的intern()方法的区别 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯技术…

程序猿大战Python——运算符

常见的运算符 目标&#xff1a;了解Python中常见的运算符有哪些&#xff1f; 运算符是用于执行程序代码的操作运算。常见的运算符有&#xff1a; &#xff08;1&#xff09;算术运算符&#xff1a;、-、*、/、//、% 、**&#xff1b; &#xff08;2&#xff09;赋值运算符&am…

MinIO 分布式文件系统 快速入门 这篇就够了

1.MinIO简介 MinIO 是一个开源的对象存储服务&#xff0c;它提供了一个可扩展的分布式文件系统&#xff0c;用于存储和检索任意类型的数据。MinIO 旨在为云原生应用程序提供快速、可靠和成本效益高的存储服务&#xff0c;并支持多种数据格式和协议&#xff0c;如Amazon S3 API。…

Java 语言概述 -- Java 语言的介绍、现在、过去与将来

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 001 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

《软件定义安全》之一:SDN和NFV:下一代网络的变革

第1章 SDN和NFV&#xff1a;下一代网络的变革 1.什么是SDN和NFV 1.1 SDN/NFV的体系结构 SDN SDN的体系结构可以分为3层&#xff1a; 基础设施层由经过资源抽象的网络设备组成&#xff0c;仅实现网络转发等数据平面的功能&#xff0c;不包含或仅包含有限的控制平面的功能。…

华为防火墙 1

华为防火墙1 实验拓扑&#xff1a; 实验步骤&#xff1a; 1.完成终端基本IP信息配置 2.配置防火墙&#xff1a; 2.1配置IP地址 sys Enter system view, return user view with CtrlZ. [USG6000V1]undo in e Info: Saving log files… Info: Information center is disabled. […

Spark 性能调优——分布式计算

前言 分布式计算的精髓&#xff0c;在于如何把抽象的计算流图&#xff0c;转化为实实在在的分布式计算任务&#xff0c;然后以并行计算的方式交付执行。今天这一讲&#xff0c;我们就来聊一聊&#xff0c;Spark 是如何实现分布式计算的。分布式计算的实现&#xff0c;离不开两个…

详解SM3算法加密流程(SM3加密算法一)

1、SM3 算法简介 SM3是中国国家密码管理局发布的消息摘要算法&#xff0c;首次发布于2010年&#xff0c;并于2016年发布了正式的国家标准GB/T 32905-2016。类似于国际上广泛应用的SHA-256算法&#xff0c;但有其独特的设计和实现细节。 该算法应用于各种数据加密和验证场景&…

vs - vs2015编译gtest-v1.12.1

文章目录 vs - vs2015编译gtest-v1.12.1概述点评笔记将工程迁出到本地后&#xff0c;如果已经编译过工程&#xff0c;将工程Revert, Clean up 干净。编译用的CMake, 优先用VS2019自带的打开VS2015X64本地命令行编译gtest工程测试安装自己写个测试工程&#xff0c;看看编译出来的…