命令执行讲解和函数

命令执行漏洞简介

命令执行漏洞产生原因

应用未对用户输入做严格得检查过滤,导致用户输入得参数被当成命令来执行

命令执行漏洞的危害

1.继承Web服务程序的权限去执行系统命会或读写文件
2.反弹shell,获得目标服务器的权限
3.进一步内网渗透

远程代码执行

因为业务需求,在PHP中有时需要调用一些执行命令的函数·如:eval0、assert0、preg_replace0、create_function0等,如果存在一个使用这些函数且未对可被用户控制的参数进行检查过滤的页面,那么这个页面就可能存在远程代码执行漏洞。

远程代码执行-eval函数

eval ( string $code )
把字符串 code 作为PHP代码执行

<?php @eval('$_POST[cmd']);?>

注意:
eval0 函数传入的参数必须为PHP代码,即要以分号结尾;
函数eval0语言结构是非常危险的,因为它允许执行任意 PHP 代码·不要允许传入任何由用户提供的、未经
完整验证过的数据。

远程代码执行-assert函数

assert ( mixed $assertion [ string $description ])
检查一个断言是否为 FALSE,如果 assertion 是字符串,它将会被 assert0 当做 PHP 代码来执行

<?php @assert($_POST['cmd])?>

注意:
assert0函数是直接讲传入的参数当成PHP代码执行,不需要以分号结尾

远程代码执行-preg_replace函数

preg_replace ( mixed $pattern , mixed $replacement , mixed $subject l int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 l, int &̲count ]] )
执行一个正则表达式的搜索和替换,搜索subiect中匹配pattern的部分,以replacement进行替换

<?php preg_replace("/test/e",$_POST["cmd"],"just test"),?>

preg_replace(‘正则规则’,‘替换字符’, ‘目标字符’)
在这里插入图片描述
PCRE修饰符 e: preg_replace0在进行了对替换字符串的后向引用替换之后,将替换后的字符串作为php代码
评估执行(eval函数方式),并使用执行结果作为实际参与替换的字符串。
在这里插入图片描述
在这里插入图片描述

远程代码执行-array_map函数

array_map ( callable $callback , array $array1 [, array $…])
array_map0: 返回数组,是为 array1每个元素应用 callback函数之后的数组·callback 函数形参的数量和传给 array_map0 数组数量,两者必须一样·为数组的每个元素应用回调函数

<?php
$func=$_GET['func];
$cmd=$_POSTIcmd];
$array[0]=$cmd;
$new_array=array_map($func,$array):
echo Snew_array;
?>

远程代码执行-create_function函数

create_function ( string $args , string $code )
从传递的参数创建一个匿名函数,并为其返回唯一的名称。
通常这些参数将作为单引号分隔的字符串传递·使用单引号的原因是为了保护变量名不被解析,否则,如果
使用双引号,就需要转义变量名,例如 $avar

<?php
$func = create function(”,$_POST['cmd']):
$func();
?>

远程代码执行-call_user_func函数

call user_func ( callable $callback [, mixed $parameter [, mixed $… ]])
第一个参数 calback 是被调用的回调函数,其余参数是回调函数的参数·把第一个参数作为回调函数调

<?php
cal user _func("assert",$_POST['cmd])
//传入的参数作为assert函数的参数
//cmd=system(whoami)
?>

远程代码执行-array_filter函数

array_filter ( array $array [ callable $callback [, int $flag = 0 ]1)
用回调函数过滤数组中的单元依次将 array 数组中的每个值传递到 callback 函数

<?php
$cmd=$_POSTI'cmd];
$array1=array($cmd);
$func =$ GETI'func'l;
array_filter($array1,$func),
//用回调函数过滤数组中的元素 : array_filter(数组,函数)
//?func=system //cmd=whoami
?>

远程代码执行-双引号

<?php // echo "phpinfo()"; echo "{$(phpinfo()}}"; ?>

在php中,双引号里面如果包含有变量,php解释器会将其替换为变量解释后的结果单引号中的变量不会被处理,双引号中的函数不会被执行和替换

远程系统命令执行

一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上,一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后后台会对该IP地址进行一次ping测试,并返回测试结果·而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交恶意命令,让后台进行执行,从而获得后台服务器权限。
利用PHP 的系统命令执行函数来调用系统命令并执行,这类函数有 svstem()、exec()、shell exec()、passthru()、penti_exec()、popen()、proc_pen()等,此外还有反引号命令执行,这种方式实际上是调用shell_exec(函数来执行

远程系统命令执行

system(): 执行外部程序,并且显示输出
exec(): 执行一个外部程序
shell_exec(): 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回
passthru(): 执行unix乳统命令并且显示原始输出
pcntl_exec(): 在当前进程空间执行指定程序
popen(): 打开进程文件指针
proc_open(): 执行一个命令,并且打开用来输入/输出的文件指针。

远程系统命令执行-exec函数

exec ( string KaTeX parse error: Expected 'EOF', got '&' at position 17: …ommand l array &̲output [, int &$return var ]])
执行一个外部程序,exec( 执行 command 参数所指定的命令。
exec执行系统外部命令时不会输出结果,而是返回结果的最后一行·如果想得到结果,可以使用第二个参数,让其输出到指定的数组·此数组一个记录代表输出的一行。

远程系统命令执行-system函数

system ( string $command [, int &return_var ] )
函数执行 command 参数所指定的命令,并且输出执行结果
system在执行系统外部命令时,直接将结果输出到浏览器,如果执行命令成功则派回system和exec的区别在于,true,否则返回false。

远程系统命令执行-passthru函数

passthru ( string KaTeX parse error: Expected 'EOF', got '&' at position 16: command l, int &̲return var ])
执行外部程序并且显示原始输出,同exec0函数类似,passthru0 函数 也是用来执行外部命令(command)的
当所执行的 Unix 命令输出二进制数据 ,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec0 或system0 函数。
passthru与system的区别: passthru直接将结果输出到浏览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。

远程系统命令执行-system函数

system ( string KaTeX parse error: Expected 'EOF', got '&' at position 15: command [ int &̲return_var ])
函数执行 command 参数所指定的命令·并且输出执行结果·
system和exec的区别在于·system在执行系统外部命令时·直接将结果输出到浏览器·如果执行命令成功则返回 true·否则返回false

远程系统命令执行

命令执行常用特殊字符

cmd1cmd2: 无论cmd1是否执行成功,cmd2将被执行
cmd1;cmd2: 无论cmd1是否执行成功,cmd2将被执行
cmd1llcmd2: 仅在cmd1执行失败时才执行cmd2
cmd1&&cmd2:仅在cmd1执行成功后时才执行
cmd2$(cmd) : echo $(whoami) 或者 $(touch test.sh; echo 'ls' > test.sh)
'cmd': 用于执行特定命令,如 whoami
>(cmd) : <(ls)
<(cmd) : >(ls)

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

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

相关文章

python----输入输出算数运算

1.格式化输出 如果我们直接打印输出&#xff0c;就是输出变量的值&#xff0c;例如&#xff1a; 如果我们想打印a10就需要格式化字符串&#xff0c;就是使用f进行格式化&#xff0c;如图所示&#xff1b; 2.控制台输入 input执行的时候&#xff0c;就会等待用户进行输入&…

Qlik Sense : 条形图

条形图 “条形图适合比较多个值。维度轴显示所比较的类别条目&#xff0c;度量轴显示每个类别条目的值。” Qlik Sense中的条形图是一种数据可视化工具&#xff0c;用于展示不同类别或维度之间的比较。它通过水平或垂直的条形表示数据&#xff0c;并根据数值的大小进行排序。…

RK3568平台开发系列讲解(存储篇)文件描述符相关系统调用实现

🚀返回专栏总目录 文章目录 一、open 系统调用二、close 系统调用沉淀、分享、成长,让自己和他人都能有所收获!😄 一、open 系统调用 open()系统调用会分配新的文件句柄(file description),用来维护与打开文件相关的元信息(如偏移量、路径、操作方法等),并会给进程…

微信小程序框架阐述

目录 一、框架 响应的数据绑定 页面管理 基础组件 丰富的 API 二、逻辑层 App Service 小程序的生命周期 注册页面 使用 Page 构造器注册页面 在页面中使用 behaviors 使用 Component 构造器构造页面 页面的生命周期 页面路由 页面栈 路由方式 注意事项 模块化…

Git 初学

目录 一、需求的产生 二、版本控制系统理解 1. 认识版本控制系统 2. 版本控制系统分类 &#xff08;1&#xff09;集中式版本控制系统 缺点&#xff1a; &#xff08;2&#xff09;分布式版本控制系统 三、初识 git 四、git 的使用 例&#xff1a;将 “ OLED文件夹 ”…

单部10层电梯控制系列之UDT数据类型的建立(SCL代码)

这篇博客开始介绍单部10层电梯的完整控制程序编写过程&#xff0c;编程语言&#xff1a;SCL&#xff0c;控制器型号&#xff1a;S7-1200PLC。开篇博客我们介绍电梯控制用到的所有UDT数据类型。在学习本篇博客之前大家可以参考下面文章&#xff0c;了解博途PLC里的UDT数据类型是…

紫微斗数双星组合:天机太阴在寅申

文章目录 前言内容总结 前言 紫微斗数双星组合&#xff1a;天机太阴在寅申 内容 紫微斗数双星组合&#xff1a;天机太阴在寅申 性格分析 天机星与太阴星同坐寅申二宫守命的男性&#xff0c;多浪漫&#xff0c;易与女性接近&#xff0c;温柔体贴&#xff0c;懂得女人的心理。…

.NET Core WebAPI中使用Log4net记录日志

一、安装NuGet包 二、添加配置 // log4net日志builder.Logging.AddLog4Net("CfgFile/log4net.config");三、配置log4net.config文件 <?xml version"1.0" encoding"utf-8"?> <log4net><!-- Define some output appenders -->…

上位机图像处理和嵌入式模块部署(图像项目处理过程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于一般的图像项目来说&#xff0c;图像处理只是工作当中的一部分。在整个项目处理的过程中有很多的内容需要处理&#xff0c;比如说了解需求、评…

【DDD】学习笔记-聚合之间的关系

聚合之间的关系 无论聚合是否表达了领域概念的完整性&#xff0c;我们都要清醒地认识到这种所谓的“完整”必然是相对的。如果说在领域分析模型中&#xff0c;每个体现了领域概念的类是模型的最小单元&#xff0c;那么在领域设计模型中&#xff0c;聚合才是模型的最小单元。我…

枚举(C/C++)

没有什么成套的算法&#xff0c;直接上例题&#xff01;&#xff01; 例题1&#xff1a;赢球票 代码&#xff1a; #include <bits/stdc.h> using namespace std;const int maxn 105; int n,num1[maxn],num2[maxn],cnt,cnt1,sum,ans;int check1()//检查剩余个数 {cnt1…

ZYNQ:PL-CAN总线功能应用

流程背景 前期基本实现PS端的CAN总线功能&#xff0c;现阶段的主要目的是实现PL端的CAN总线功能&#xff0c;需要采用CAN IP。 PL系统搭建 PL外设时钟源 搭建完vivado系统后&#xff0c;需要在sdk编程。但是在配置PL&#xff0d;CAN时&#xff0c;意识到CAN时钟值不清楚&…

TIM输出比较 P2

D触发器&#xff1f; 一、输出比较 二、PWM 1、简介 2、结构 三、外部设备 1.舵机 2.直流电机 我的理解是xO1 xIN1 & PWMx; xO2 xIN2 & PWMx;引入PWMx可以更方便的控制特定的电路。 四、函数学习 /*****单独设置输出比较极性*****/ void TIM_OC1PolarityConfig(…

php基础学习之可变函数(web渗透测试关键字绕过rce和回调函数)

可变函数 看可变函数的知识点之前&#xff0c;蒟蒻博主建议你先去看看php的可变变量&#xff0c;会更加方便理解&#xff0c;在本篇博客中的第五块知识点->php基础学习之变量-CSDN博客 描述 当一个变量所保存的值刚好是一个函数的名字&#xff08;由函数命名规则可知该值必…

JavaScript中什么是事件委托

JavaScript 中的事件委托&#xff08;Event delegation&#xff09;是一种重要的编程技术&#xff0c;它能够优化网页中的事件处理&#xff0c;提高程序的性能和可维护性。本文将详细介绍事件委托的概念、工作原理&#xff0c;并提供示例代码来说明其实际应用。 事件委托是基于…

我的NPI项目之Android USB 系列(一) - USB的发展历史

设计目的 USB was designed to standardize the connection of peripherals to personal computers, both to exchange data and to supply electric power. 一个是为了标准化电脑连接外设的方法。 能够支持电脑和外设的数据交互和&#xff08;对外&#xff09;供电。 目前已…

leetcode:96.不同的二叉搜索树

解题思路&#xff1a; 输入n3 n 0 1个 n 1 1个 n 2 2个 头1头2头3 头1 左子树0节点&#xff08;个数&#xff09;x右子树2个节点&#xff08;个数&#xff09; 头2 左子树1节点&#xff08;个数&#xff09;x右子树1个节点&#xff08;个数&#xff09; 头3 左子…

【Java程序员面试专栏 分布式中间件】Redis 核心面试指引

关于Redis部分的核心知识进行一网打尽,包括Redis的基本概念,基本架构,工作流程,存储机制等,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 基础概念 明确redis的特性、应用场景和数据结构 什么是Redis,Redis有哪些应用场景 Redi…

windows 下跑起大模型(llama)操作笔记

原贴地址&#xff1a;https://testerhome.com/topics/39091 前言 国内访问 chatgpt 太麻烦了&#xff0c;还是本地自己搭一个比较快&#xff0c;也方便后续修改微调啥的。 之前 llama 刚出来的时候在 mac 上试了下&#xff0c;也在 windows 上用 conda 折腾过&#xff0c;环…

ubuntu22.04@laptop OpenCV Get Started: 011_edge_detection

ubuntu22.04laptop OpenCV Get Started: 011_edge_detection 1. 源由2. edge_detection应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 重点逐步分析3.1 GaussianBlur去噪3.2 Sobel边缘检测3.2.1 SobelX方向边缘检测3.2.2 SobelY方向边缘检测3.2.3 SobelXY方向边缘检测 3.3 Canny…