当前位置: 首页 > news >正文

命令执行漏洞概述

命令执行漏洞概述

  • 命令执行定义
  • 命令执行条件
  • 命令执行成因
  • 命令执行漏洞带来的危害
  • 远程命令执行漏洞相关函数
  • assert()
  • preg_replace()
  • call_user_func()
  • a ( a( a(b)可变函数
  • 远程命令执行漏洞的利用
  • 系统命令执行漏洞相关函数
    • system()
    • exec()
    • shell_exec()
    • passthru()
    • popen()

命令执行定义

  • 基本定义:命令执行漏洞是指攻击者可以随意执行系统命令,分为远程命令执行(远程代码执行)和系统类命令执行。
  • 原理:程序应用时有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen,当用户能控制这些函数的参数时,就可以将恶意系统命令,拼接到正常的命令中,从而造成命令执行攻击。

命令执行条件

  • 用户能够控制函数输入
  • 存在可以执行代码或者系统命令的危险函数

命令执行成因

  • 由于开发人员再编写源码的时候,没有针对代码中的可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并且提交服务端执行。
  • 命令注入攻击时,Web服务器没有过滤类似System,eval和exec等函数,是漏洞攻击成功的主要原因。

命令执行漏洞带来的危害

  • 继承Web服务程序的权限去执行系统命令(任意代码)或者读写文件
  • 反弹Shell
  • 控制整个网站甚至整个服务器
  • 进一步内网渗透

远程命令执行漏洞相关函数

assert()

说明:检查断言是否为false
assert(mixed $assertion, Throwable $exception = ?): bool
传统断言(PHP5和7)
**如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。**如果传入了 boolean 的条件作为 assertion,这个条件将不会显示为断言函数的参数;在调用你定义的 assert_options() 处理函数时,条件会转换为字符串,而布尔值 false 会被转换成空字符串。
断言这个功能应该只被用来调试。应该用于完整性检查时测试条件是否始终应该为 true,来指示某些程序错误,或者检查具体功能的存在(类似扩展函数或特定的系统限制和功能)。
在这里插入图片描述
在这里插入图片描述
简单说就是assert后面跟着字符串,那就当作php代码进行处理了。

preg_replace()

preg_replace — 执行一个正则表达式的搜索和替换

preg_replace(string|array $pattern,string|array $replacement,string|array $subject,int $limit = -1,int &$count = null
): string|array|null

搜索 subject 中匹配 pattern 的部分,以 replacement 进行替换。
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [,int $limit = -1 [,int c o u n t ] ] ) : m i x e d 其中 p a t t e r n 是要搜索的模式。可以是一个字符串或字符串数组。当 p a t t e r n 存在一个“ / e ”修饰符时, count ]] ) : mixed 其中pattern是要搜索的模式。可以是一个字符串或字符串数组。当pattern存在一个“/e”修饰符时, count]]):mixed其中pattern是要搜索的模式。可以是一个字符串或字符串数组。当pattern存在一个“/e修饰符时,replacement的值会被当成php代码来执行。
现在解释一下这个函数的具体使用方法:
简化一下模型:preg_replace(O,A,HELLOWORLD),就是把第三个参数的中的O替换成A。
请添加图片描述
代码中第一个参数中的“.”代表任意字符,“*”代表任意次数,两个连接起来就代表任意字符串。
请添加图片描述
就是因为加了一个/e,这个时候就会把第二参数当作php函数进行执行。

call_user_func()

call_user_func — 把第一个参数作为回调函数调用
call_user_func(callable c a l l b a c k , m i x e d . . . callback, mixed ... callback,mixed...args): mixed
请添加图片描述
请添加图片描述

a ( a( a(b)可变函数

<?php
if(isset( $_GET['a' ])&isset($_GET['b'])){@$a = $_GET['a'];@$b = $_GET['b' ];@$a($b);//函数,可变函数//$a就是函数的名//$b就是函数的值//?a=assert&b=phpinfo()//assert(phpinfo());
else{echo "Please input a&b";
?>

请添加图片描述

请添加图片描述
就是前面的作为函数名,后面的参数作为函数的参数。

远程命令执行漏洞的利用

?a=@eval(KaTeX parse error: Expected group after '_' at position 28: …一句话木马 ?a=print(_̲__FILE_);获取当前绝对…_POST[1],$_POST[2])); 1=shell.php&2=<?phpphpinfo()?>写shell

请添加图片描述
在这里插入图片描述

*************************************************************************************************************************************************************远程命令执行我们提供的字符串是php代码,而系统命令执行提供的字符串时系统命令


系统命令执行漏洞相关函数

  • system()
  • exec()
  • shell_exec()
  • passthru()
  • popen()
  • 反问号

system()

请添加图片描述
请添加图片描述

exec()

(PHP 4, PHP 5, PHP 7, PHP 8)

exec — Execute an external program

Description :
exec(string KaTeX parse error: Expected 'EOF', got '&' at position 16: command, array &̲output = null, int &$result_code = null): string|false
exec() executes the given command.
在这里插入图片描述
在这里插入图片描述

shell_exec()

Description:
shell_exec(string $command): string|false|null
参数就是要执行的命令。
在这里插入图片描述

passthru()

passthru ( string c o m m a n d [ , i n t s command [, int s command[,intsreturn_var ] ) : void

同exec()函数类似,passthru()函数也是用来执行外部命令(command)的。当所执行的Unix命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec()或 system()函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。通过设置Content-type为image/gif,然后调用pbmplus程序输出 gif 文件,就可以从 PHP脚本中直接输出图像到浏览器。
参数:
command:要执行的命令。
return_var:如果提供return_var参数,Unix命令的返回状态会被记录到此参数。

popen()

popen ( string $command , string $mode ) : resource
打开一个指向进程的管道,该进程由派生给定的command命令执行而产生。
参数
command:命令。
mode:模式。

<?php
if(isset($_GET['a'])){popen( "whoami >>1.txt" , 'r');
}else{echo "Please input a";
}
?>

看一下代码中的大于号:
“>:覆盖”
“>>:追加”

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/59996.html

相关文章:

  • 【初试复试第一】脱产在家二战上岸——上交819考研经验
  • PTA:C课程设计(7)
  • POSTGRESQL LINUX 与 PG有关的内存参释义
  • Docker的常见命令
  • 详细介绍性能测试的方法(含文档)
  • 深入剖析 Qt QHash :原理、应用与技巧
  • 技术分享 | MySQL级联复制下进行大表的字段扩容
  • 工业互联网业务知识
  • jsp+java自行车租赁租借和买卖系统
  • Python3 字符串
  • Day943.持续集成流水线 -系统重构实战
  • How to use CCS to debug a running M4F core that was started by Linux?
  • 216、组合总数III
  • 简单的重装系统教程
  • 机器学习---集成学习报告
  • 教你如何将PDF文件转换成PPT演示文稿
  • 涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov5/Yolov7,内存更小、效率更高,秒杀Adam(W)
  • Windows GPU版本的深度学习环境安装
  • C语言实践——通讯录(3)(文件版)
  • GPT撑腰,微软再战谷歌 | 大厂集体抢滩ChatGPT:谁真的有实力,谁在试点商业化?
  • 【消息队列】细说Kafka消费者的分区分配和重平衡
  • 【Python从入门到人工智能】14个必会的Python内置函数(7)——打印输出(详细语法参考 + 参数说明 + 具体示例)| 附:Python输出表情包
  • 为什么要创建FAQ?这篇文章告诉你
  • 基于html+css的盒子展示1
  • Python 无监督学习实用指南:1~5
  • 2023 腾讯暑期实习申请经验分享
  • Protocol Buffers 介绍
  • 【模电实验】基尔霍夫定律、叠加定理和戴维南定理验证实验
  • java某百货店POS积分管理系统_积分点更新生成以及通票回收处理
  • Flutter 常用指令