命令执行/代码执行漏洞学习--2023/03/22-23

2023/03/22-23

8. 命令执行漏洞和代码执行漏洞详解

详解命令执行漏洞_命令执行漏洞实践[04:53]_H3rmesk1t的博客-CSDN博客

代码执行&命令执行详解_一只小白白灬的博客-CSDN博客

命令执行漏洞和代码执行漏洞详解 一文了解命令执行漏洞和代码执行漏洞_命令执行漏洞与代码执行漏洞的异同_思源湖的鱼的博客-CSDN博客

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

8.1 命令执行漏洞:

1. 命令执行: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. exec—执行一个外部程序

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

<?php
highlight_file(__FILE__);
exec('pwd',$b);
var_dump($b);
?>
  1. passthru— 执行外部程序,并显示原始输出

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

<?php
highlight_file(__FILE__);
passthru('ls');
?>
  1. shell_exec— 通过shell环境执行命令,并且将完整的输出以字符串的方式返回

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

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

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

内部缓冲区的内容可以用ob_get_contents()函数复制到一个字符串变量中,想要输出存储在内部缓冲区中的内容,可以使用ob_end_flush()函数。另外, 使用ob_end_clean()函数会静默丢弃掉缓冲区的内容

<?php
    ob_start("system");
    echo "whoami";
    ob_end_flush();
?>

3. 命令连接符

windows和linux都支持的命令连接符:

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

linux支持分号;

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

4. 危险函数利用

  1. system:
<?php
highlight_file(__FILE__);

if(isset($_REQUEST['url'])){
    
    
    $url = ($_REQUEST['url']);
    $b = system($url, $a);
    echo $a.PHP_EOL;
    echo $b.PHP_EOL;
}
?>

恶意代码执行:

?url = dir

在这里插入图片描述

文件写入:

? url = echo 11111 > flag.php

在这里插入图片描述

  1. passthru:

执行外部程序并且显示原始输出

<?php
highlight_file(__FILE__);

if(isset($_REQUEST['url'])){
    
    
    $url = ($_REQUEST['url']);
    passthru($url,$a);
    echo $a.PHP_EOL;
}
?>

调用系统命令,将信息写入22.txt
在这里插入图片描述

  1. exec:

执行command参数所指定的命令

需要注意的一点exec要有echo才有回显

<?php
highlight_file(__FILE__);

if(isset($_REQUEST['url'])){
    
    
    $url = ($_REQUEST['url']);
    echo exec($url);
}
?>

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

  1. shell_exec与exec基本相似

通过shell环境来执行命令

代码执行漏洞总结见链接:

代码执行漏洞总结_代码执行漏洞eval函数示例_Pale1c的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/m0_53689197/article/details/129740683