当前位置:   article > 正文

干货 | 命令执行漏洞和代码执行漏洞详解_命令执行漏洞与代码执行漏洞的区别?

命令执行漏洞与代码执行漏洞的区别?

命令执行(RCE)漏洞和代码执行漏洞区别如下:

  • 代码执行实际上是调用服务器网站代码进行执行
  • 命令执行则是调用操作系统命令进行执行

一、命令执行漏洞

1、什么是命令执行

命令执行(Remote Command Execution, RCE)

Web应用的脚本代码在执行命令的时候过滤不严

从而注入一段攻击者能够控制的代码,在服务器上以Web服务的后台权限远程执行恶意指令

成因
  • 代码层过滤不严
  • 系统的漏洞造成命令注入
  • 调用的第三方组件存在代码执行漏洞常见的命令执行函数
    • PHP:exec、shell_exec、system、passthru、popen、proc_open等
    • ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
    • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

2、常用命令执行函数

(1)system

该函数会把执行结果输出 并把输出结果的最后一行作为字符串返回 如果执行失败则返回false 这个也最为常用

<?php
highlight_file(__FILE__);
system('pwd');
system('whoami');
?>
  • 1

(2)exec

不输出结果,返回执行结果的最后一行 可以使用output进行输出

<?php
highlight_file(__FILE__);
exec('pwd',$b);
var_dump($b);
?>
  • 1

(3)passthru

此函数只调用命令 并把运行结果原样地直接输出 没有返回值。

<?php
highlight_file(__FILE__);
passthru('ls');
?>
  • 1

(4)shell_exec

不输出结果,返回执行结果 使用反引号(``)时调用的就是此函数

<?php
highlight_file(__FILE__);
var_dump(shell_exec('ls'));
?>
  • 1

(5)ob_start

此函数将打开输出缓冲,当输出缓冲激活后,脚本将不会输出内容(除http标头外) 相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中

想要输出存储在内部缓冲区中的内容

可以使用 ob_end_flush() 函数 另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容

<?php
ob_start("system");
echo "whoami";
ob_end_flush();
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/613129
推荐阅读
相关标签
  

闽ICP备14008679号