命令执行讲解和函数

命令执行漏洞简介

命令执行漏洞产生原因

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

命令执行漏洞的危害

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)

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

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

相关文章

基于JAVA,SpringBoot和Vue二手房屋销售系统设计

摘要&#xff1a; 本研究旨在设计并实现一个基于JAVA, SpringBoot和Vue技术的二手房屋销售系统。该系统采用当前流行的前后端分离架构&#xff0c;后端使用SpringBoot框架快速搭建RESTful API&#xff0c;提供稳定且高效的服务端应用&#xff1b;前端则通过Vue.js框架构建动态…

vue导出word文档(图文示例)

第076个 查看专栏目录: VUE 本文章目录 示例说明示例效果图导出的文件效果截图示例源代码参数说明&#xff1a;重要提示&#xff1a;API 参考网址 示例说明 在Vue中导出Word文档&#xff0c;可以使用第三方库file-saver和html-docx-js。首先需要安装这两个库&#xff1a; npm …

2024年最新onlyfans虚拟信用卡订阅教程

一、Onlyfans是什么&#xff1f; OnlyFans是一个允许创作者分享自己的独家内容的平台&#xff0c;简称o站。这个平台允许创作者创建一个订阅服务&#xff0c;粉丝需要支付费用才能访问其独家内容。 本文将教你如何使用虚拟卡在OnlyFans上进行充值。 二、如何使用虚拟卡支付 O…

MySQL数据表的约束

已经一个星期没更了&#xff0c;因为过年嘛&#xff0c;比较忙&#xff0c;我玩心也大&#xff0c;就没继续更新&#xff0c;在这里给大家道歉&#xff0c;也祝大家新的一年快快乐乐&#xff0c;新年快乐。 为防止数据表中插入错误的数据&#xff0c;MySQL定义了一些规则维护数…

第7章 Page449 7.8.9智能指针 std::unique_ptr课堂作业,使用智能指针改写foo()函数

源代码&#xff1a; /** \brief 使用std::unique_ptr改写智能指针章节开始的foo()函数** \param* \param* \return**/ #include <iostream> #include <memory>using namespace std;struct O {~O(){cout << "我是被管的对象。我要被释放啦......" …

EasyRecovery软件有哪些版本?如何下载2024最新版本

EasyRecovery 是一款功能强大的数据恢复软件&#xff0c;适用于电脑上的数据恢复需求。以下是该软件的不同电脑版本及其主要特点&#xff1a; EasyRecovery Home&#xff08;家用版&#xff09;&#xff1a; 主要针对家庭用户&#xff0c;提供常规的数据恢复功能。可以恢复各种…

【深度学习每日小知识】全景分割

全景分割 全景分割是一项计算机视觉任务&#xff0c;涉及将图像或视频分割成不同的对象及其各自的部分&#xff0c;并用相应的类别标记每个像素。与传统的语义分割相比&#xff0c;它是一种更全面的图像分割方法&#xff0c;传统的语义分割仅将图像划分为类别&#xff0c;而不…

openEuler 22.03 LTS 上源码安装 PostgreSQL 15

安装PostgreSQL 15 1 安装必要的依赖 #yum install -y readline-devel zlib-devel gcc2、下载源码 # wget https://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz # tar -xzvf postgresql-15.6.tar.gz3 配置 # cd postgresql-15.6/ # ./configure4 编译安装…

OLMo 以促进语言模型科学之名 —— OLMo Accelerating the Science of Language Models —— 全文翻译

OLMo: Accelerating the Science of Language Models OLMo 以促进语言模型科学之名 摘要 语言模型在自然语言处理的研究中和商业产品中已经变得无所不在。因为其商业上的重要性激增&#xff0c;所以&#xff0c;其中最强大的模型已经闭源&#xff0c;控制在专有接口之中&#…

MySQL数据库基础(五):SQL语言讲解

文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写&#xff0c;以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写…

政安晨:【示例演绎】【Python】【Numpy数据处理】快速入门(三)—— 数组的操作

准备 这是Numpy数据处理的示例演绎系列文章的第三篇&#xff0c;我的前两篇文章为&#xff1a; 政安晨&#xff1a;【示例演绎】【Python】【Numpy数据处理】快速入门&#xff08;一&#xff09;https://blog.csdn.net/snowdenkeke/article/details/136125773 政安晨&#x…

基于FFmpeg+openCV的视频语音通讯系统

基于FFmpegopenCV的应用很多&#xff0c;其中类似于钉钉、腾讯会议的视频语音通讯系统是比较复杂的系统&#xff0c;一般情况下&#xff0c;这样的系统要包括麦克风及摄像头的推送与播放、共享桌面、共享白板等&#xff0c;当然最好还要有可以实时更新的在线列表&#xff0c;就…