干货 | 命令执行漏洞和代码执行漏洞详解

远程命令执行(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。这个函数也最为常用。


(2)exec

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


(3)passthru

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


(4)shell_exec

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


(5)ob_start

此函数将打开输出缓冲,当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外,使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。


3、命令连接符

Windows和Linux都支持的命令连接符:

cmd1 | cmd2:只执行cmd2cmd1 || cmd2:只有当cmd1执行失败后,cmd2才被执行cmd1 & cmd2:先执行cmd1,不管是否成功,都会执行cmd2cmd1 && cmd2:先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2

Linux还支持分号;

cmd1 ; cmd2:按顺序依次执行,先执行cmd1再执行cmd2

二、代码执行漏洞

1、什么是代码执行?

代码执行漏洞是由于服务器对危险函数过滤不严,导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞。

成因:

用户能够控制函数输入存在可执行代码的危险函数

常见代码执行函数:

PHP: eval、assert、preg_replace()、+/e模式(PHP版本${}执行代码中间的php代码将会被解析)

<?php ${

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/455736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 01:19:18
下一篇 2025年11月8日 01:20:21

相关推荐

发表回复

登录后才能评论
关注微信