CTF 中绕过过滤执行系统命令——运算符的妙用

CTF 中绕过过滤执行系统命令——运算符的妙用

在 CTF 竞赛中,命令注入是常见的一类攻击技巧,而在一些复杂的注入场景下,运算符的巧妙使用可以成为绕过防护、执行系统命令的重要手段。

1. 使用运算符链构造数字

在 CTF 中,我们常常需要通过特定的运算符技巧来绕过输入过滤器。一个经典的技巧是通过多层嵌套运算符串联构造特定的数字或字符。在此,我们以构造数字18为例,展示如何利用 Shell 命令的算术运算符、取反符号以及多层嵌套结构巧妙地绕过复杂的过滤条件。

假设在一个 Web 应用中,存在如下的 PHP 代码,它接收用户输入并执行系统命令:

if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\{|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){system("cat /".$c.".php");
}

在这个例子中,PHP preg_match() 函数用于过滤非法字符,防止用户输入中包含一些常见的恶意字符,如分号 (;)、字母 ([a-z])、数字 ([0-9])、管道 (|)、反引号 (\``)、#(注释符号)、大括号 ({})、引号 ('"`),以及其他特殊字符。

攻击者的目标是绕过这些过滤规则,并通过 system() 函数执行如下命令:

system("cat /18.php");

为了实现这一点,攻击者需要通过精心设计的输入来绕过过滤器,并且构造出数字 18

下面是攻击者可能构造的输入:

$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

这段输入看起来极为复杂,包含了多个层次的嵌套和取反操作。让我们逐步分析数字构造的过程:

  1. $() 运算符:这是 Shell 中的命令替换符号。它会先执行括号中的命令,然后将结果作为字符串返回。

  2. ~(取反)运算符:在 Shell 中,~ 是按位取反运算符。对一个数字取反会得到该数字的二进制反码。

  3. 嵌套结构:通过多层嵌套的 $()~ 运算符,攻击者能将多个较小的值组合在一起,最终得出数字 18

    • 例如,$((~$(()))) 会先计算最内层的命令,得到一个值,接着再取反,然后再通过外层的运算符进行计算。
    • 通过逐层计算,最终能够得到我们需要的数字 18

这种嵌套和运算符链的构造方法,有效地绕过了数字和字母的过滤,因为过滤器并没有检测到 ~$() 等符号的使用,它只关注了字母、数字等直接的字符。

2. 管道运算符妙用

一道例题如下:

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

这个 PHP 函数通过 >/dev/null 2>&1 将命令的标准输出和标准错误输出丢弃。表面上看,命令的执行结果无法被获取,但攻击者可以巧妙利用 Shell 的运算符来绕过这种限制。

在这种情况下,利用逻辑运算符 || 可以绕过后续命令的执行限制。|| 表示“逻辑或”操作符:如果左侧命令执行成功,右侧命令将不会执行。所以本题的payload如下:

cat /flag || ls

分析:

  1. cat /flag:尝试读取 /flag 文件。
  2. ||:如果前面的 cat /flag 执行成功,后面的 ls 不会执行。
  3. ls:如果 cat /flag 执行失败,ls 会列出当前目录的文件。
其他管道运算符

Shell 命令注入攻击的强大之处在于,它不仅仅依赖于命令本身,还能利用 Shell 提供的各种运算符(如 ;&&|||)来控制命令的执行流程。这些运算符可以帮助攻击者:

  • 连接多个命令(如 &&||
  • 控制命令执行的顺序(如 ; 分号)
  • 通过管道传递数据(如 |

总结

运算符的妙用在 CTF 中的命令注入攻防中起着至关重要的作用。通过对 Shell 运算符(如 ||&&;|)的巧妙组合,攻击者能够绕过简单的输出重定向、防止命令执行的措施。CTF 题目中的这种技术不仅能用于绕过输出抑制,还可以帮助攻击者突破命令过滤和安全限制,执行恶意命令。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv8深度学习的智慧社区建筑外墙破损(裂缝、露筋、剥落)检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着智慧社区的发展&#xff0c;对建筑结构健康状况的实时监测变得愈发重要。在此背景下&#xff0c;建筑外墙破损&#xff08;如裂缝、露筋和剥落&#xff09;等问题对建筑物整体结构的安全性和耐久性构成了严重威胁&#xff0c;及时、准确地检测这些问题变得尤为关键。传统的…

单片机UART协议相关知识

概念 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发传输器&#xff09; 是一种 异步 串行 全双工 通信协议&#xff0c;用于设备一对一进行数据传输&#xff0c;只需要两根线&#xff08;TX&#xff0c;RX&#xff09;。 异步&…

Python模块、迭代器与正则表达式day10

1、Python模块 1.1模块的简介 在编写代码的时候&#xff0c;创建的.py文件就被称为一个模块 1.2模块的使用 想要在a文件里使用b文件的时候&#xff0c;只要在a文件中使用关键字import导入即可 1.2.2 from ...import...语句 导入模块可以使用import&#xff0c;如果只导入模…

DDD架构设计知道(1)

看过很多人写架构设计的文章&#xff0c;绝大多数都是站在企业的角度谈“术”的层面。而当今的时代社会特别是00后门更多的会站在个人的角度&#xff0c;去看架构设计。个体和超级单体时代也已经来临&#xff0c;很多传统意义上的企业管理模式也在改变。所以如果架构设计面对当…

ubuntu下连接了192.168.1.x和192.168.2.x两个网络段,如何让这个两个网段互相通信?

在 Ubuntu 上连接两个网络段&#xff08;如 个人终端A 192.168.1.10 和 个人终端B 192.168.2.10&#xff09;&#xff0c;需要配置路由和网络转发功能&#xff0c;使这两个网段能够相互通信。以下是实现方法&#xff1a; 步骤 1&#xff1a;确认网络配置 1. 确保 Ubuntu 机器…

Shell脚本5 -- 脚本与用户交互read

声明&#xff1a; 本文的学习内容来源于B站up主“泷羽sec”视频【shell编程&#xff08;4&#xff09;脚本与用户交互以及if条件判断】的公开分享&#xff0c;所有内容仅限于网络安全技术的交流学习&#xff0c;不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题&#xff0c…

mysql5.7主从问题记录

项目运行一段时间后突然打印如下异常信息。 由于现场环境和数据库是客户提供&#xff0c;看异常提示一直以为是代码问题&#xff0c;导致锁表。 通过逐步排查之后发现&#xff0c;是binlog把磁盘占满了&#xff0c;让客户的DBA设置了一下就恢复。 当设置了主从同步之后&…

使用卷积自编码器进行图像重构

1. 自编码器简介 自编码器&#xff08;Autoencoder&#xff09;是一种无监督学习的神经网络模型&#xff0c;旨在学习数据的有效表示。自编码器的主要组成部分包括编码器和解码器&#xff0c;二者共同工作以实现数据的压缩和重构。以下是自编码器的详细介绍&#xff1a; 1.1 …

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战&#xff0c;学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目&#xff0c;编写首页代码&#xff0c;实现按钮跳转至第二个页面并…

恶意代码分析入门--静态分析(chapter1_Lab01-01)

恶意代码分析-工具收集 - 17bdw - 博客园 (cnblogs.com) 实验环境&#xff1a;Lab 1-1 这个实验使用Lab01-01.exe和Lab01-01.dll文件&#xff0c;使用本章描述的工具和技术来获取 关于这些文件的信息。 操作环境 操作场景&#xff1a; windows xp sp3 实验工具&#xff1a; PEi…

【操作系统不挂科】<信号量(9)>选择题(带答案与解析)

前言 大家好吖&#xff0c;欢迎来到 YY 滴操作系统不挂科 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 本博客主要内容&#xff0c;收纳了一部门基本的操作系统题目&#xff0c;供yy应对期中考试复习。大家可以参考 本章为选择题题库&#xff0c;试卷…

服务器数据恢复—raid5阵列故障导致上层系统分区无法识别的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌DL380服务器&#xff0c;服务器中三块SAS硬盘组建了一组raid5阵列。服务器安装Windows Server操作系统&#xff0c;划分了3个分区&#xff0c;D分区存放数据库&#xff0c;E分区存放数据库备份。 服务器故障&#xff1a; RAID5阵列中有一…

【ARM】MDK在debug模式下的Registers窗口包含哪些内容

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户对于Debug模式下&#xff0c;对于Registers窗口包含的内容了解。 2、 问题场景 Registers窗口是在进入到debug模式下后&#xff0c;就会出现一个窗口。窗口中包含了很多寄存器信息。但是对于具体内容不了解…

【后端】版本控制

版本控制 1. 什么是版本控制&#xff1f; 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理…

高项 - 项目进度管理

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 博文更新参考时间点&#xff1a;2024-12 高项 - 章节与知识点汇总&#xff1a;点击跳转 文章目录 高项 - 项目进度管理进度管理ITO规划监控 管理基础项目进度计划的定义和总要求管理新实践用户故事&#xff08;补…

【数据结构】【线性表】【练习】反转链表

申明 该题源自力扣题库19&#xff0c;文章内容&#xff08;代码&#xff0c;图表等&#xff09;均原创&#xff0c;侵删&#xff01; 题目 给你单链表的头指针head以及两个整数left和right&#xff0c;其中left<right&#xff0c;请你反转从位置left到right的链表节点&…

鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)

元服务是什么&#xff1f;和App的关系&#xff1f; 元服务是是一种HarmonyOS轻量应用形态&#xff0c;用户无需安装即可使用&#xff0c;具备随处可及、服务直达、自由流转的特征。 元服务是可以独立部署和运行的程序实体&#xff0c;独立于应用&#xff0c;不依赖应用可独立…

Redis中的String数据类型及相关命令

[经典面试题] redis虽然是单线程模型&#xff0c;为什么效率还这么高&#xff1f;速度这么快呢&#xff1f; 原因&#xff1a;1、redis主要访问内存&#xff0c;数据库则是主要访问硬盘。 2、redis的核心功能&#xff0c;比数据库的核心功能更简单。数据库对于数据的CRUD&…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言&#xff1a;大家好&#xff01;今天我要教你们如何在树莓派5上安装Raspberry Pi OS&#xff0c;并配置SSH和VNC权限。通过这些步骤&#xff0c;你将能够在Windows电脑上使用VNC Viewer&#xff0c;结合Cpolar内网穿透工具&#xff0c;实现长期的公网远程访问管理本地树莓派…

本地部署 Chat Nio

本地部署 Chat Nio 0. 引言1. 本地部署2. 访问 Chat Nio3. 渠道设置4. 聊天 0. 引言 Chat Nio 的功能&#xff1a; &#x1f916;️ 丰富模型支持: 多模型服务商支持 (OpenAI / Anthropic / Gemini / Midjourney 等十余种格式兼容 & 私有化 LLM 支持)&#x1f92f; 美观 …