php代码执行语句
eval()
eval()语句
eval() 会将符合PHP 语法规范字符串当作php 代码执行。
<meta charset="UTF-8">
<pre>
<?php
$dd=$_REQUEST['dd'];
eval($dd);
?>
可以执行php代码
也可以套一层system执行系统操作指令
assert()函数
assert() 会将字符串当做PHP 代码来执行。
说明
- assert() 只能执行单条PHP 语句。
- assert() 是一个函数,可以动态调用。
- 高版本PHP 中,assert() 被弃用。
<pre>
<?php
$dd=$_REQUEST['dd'];
assert($dd);
?>
preg_replace函数
preg_replace() 函数的作用是对字符串进行正则匹配后替换。
$dd=preg_replace("/A/i","j","aJEST");
$dd=preg_replace("/\[.*\]/i","j","[phpinfo()]jboom");
$dd=preg_replace("/\[(.*)\]/i","\\1","[phpinfo()]");
回调函数
call_user_func
<?php
$func = 'assert';
$arg = "phpinfo();";
call_user_func($func, $arg);
?>
array_map
<?php
$func=$_REQUEST["func"];
$arr=$_REQUEST["arr"];
array_map($func,$arr);
?>
动态函数
由于PHP 的特性原因,PHP 的函数支持直接由拼接的方式调用,这直接导致了PHP 在安全上的控制有加大了难度。不少知名程序中也用到了动态函数的写法,这种写法跟使用call_user_func() 的初衷一样,用来更加方便地调用函数,但是一旦过滤不严格就会造成代码执行漏洞。
<?php
$func=$_REQUEST["func"];
$arr=$_REQUEST["arr"];
$func($arr);
?>
os命令执行函数
system函数
system() 能够将字符串作为操作系统(Operator Sytstemc,OS)命令执行。在类似systemc() 函数调用系统命令时,PHP 会自动区分平台。
<pre>
<?php
$dd=$_REQUEST['dd'];
system($dd);
?>
exec函数
函数特点
- 需要输出命令执行结果。
- 只输出命令执行结果的最后一行,约等于没有回显。
<pre>
<?php
$dd=$_REQUEST['dd'];
echo exec($dd);
?>
shell_exec函数
- 需要输出命令执行结果
<pre>
<?php
$dd=$_REQUEST['dd'];
echo shell_exec($dd);
?>
passthru函数
- 自带输出功能
<pre>
<?php
$dd=$_REQUEST['dd'];
passthru($dd);
?>
popen函数
说明
- 函数返回值为文件指针,可以简单理解为文件名。
<pre>
<?php
$dd=$_REQUEST['dd'];
$result=popen($dd,'r');
echo fread($result,1024);
?>
只返回第一行内容
反引号
反引号` 内的字符串,会被解析成OS 命令
<pre>
<?php
$dd=$_REQUEST['dd'];
echo `$dd`;
?>
RCE漏洞
漏洞描述
所谓RCE漏洞,即Remote Code/Command Execution,远程代码执行和远程命令执行漏洞。
在很多Web应用中,开发人员会使用一些函数,这些函数以一些字符串作为输入,功能是将输入的字符串当作代码或者命令来进行执行。当用户可以控制这些函数的输入时,就产生了RCE漏洞。
RCE漏洞是非常严重的安全漏洞,一旦出现,就意味着攻击者可以获取服务器的命令执行权限,从而对服务器安全造成极大的影响。
漏洞场景
-
执行系统命令:攻击者可以利用RCE漏洞执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者能够在目标服务器上执行任意操作。
-
控制服务器:攻击者可以利用RCE漏洞获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动。
-
数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利。
-
进一步攻击:攻击者可以利用RCE漏洞在目标服务器上执行其他攻击,比如横向移动攻击,通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统。
-
拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。
RCE漏洞的使用场景非常广泛,攻击者可以利用这种漏洞来执行任意操作,控制服务器,窃取敏感信息或者进一步攻击其他系统。
漏洞原理
- 用户输入:攻击者通常会找到目标系统上的一个输入点,比如Web应用程序的表单、URL参数、HTTP请求头等。这些输入点允许用户向系统提交数据。
- 输入处理:目标系统接收到用户输入后,会对其进行处理。这个处理过程可能包括解析、验证、过滤、拼接等操作。
- 注入恶意代码:攻击者利用输入处理过程中的漏洞,注入恶意代码。常见的注入点包括未正确过滤的特殊字符、未正确处理用户输入的引号或其他特殊字符等。
- 执行恶意代码:一旦恶意代码成功注入,目标系统在执行时会将其视为合法代码。这使得攻击者能够在目标系统上执行任意操作,比如执行系统命令、访问文件系统、修改配置文件等。
- 控制目标系统:通过执行恶意代码,攻击者可以获得对目标系统的控制权。这使得攻击者可以进行进一步的攻击,比如安装后门、窃取敏感信息、横向移动等。
RCE漏洞的原理主要是利用目标系统对用户输入的处理不当,导致攻击者能够注入恶意代码并执行。
漏洞危害
- 执行系统命令:RCE漏洞使得攻击者能够在目标系统上执行系统命令,比如创建、修改或删除文件、目录,执行系统脚本等。这使得攻击者可以在目标服务器上执行任意操作,包括控制服务器、窃取敏感信息等。
- 控制服务器:RCE漏洞使得攻击者可以获取对服务器的控制权,包括远程登录、修改系统配置、安装后门等。这使得攻击者可以完全控制服务器,进行各种恶意活动,比如植入恶意软件、发起其他攻击等。
- 数据窃取:攻击者可以利用RCE漏洞窃取服务器上的敏感信息,比如数据库凭据、用户密码、个人数据等。这些信息可以用于进一步的攻击或者非法获利,比如进行身份盗窃、敲诈勒索等。
- 进一步攻击:利用RCE漏洞,攻击者可以在目标服务器上执行其他攻击,比如横向移动攻击。攻击者可以通过在受感染的服务器上执行代码,进一步攻击其他服务器或网络中的系统,从而扩大攻击范围。
- 拒绝服务(Denial of Service,DoS)攻击:攻击者可以利用RCE漏洞执行恶意代码来消耗目标服务器的资源,导致服务器崩溃或无法正常工作,从而使服务不可用。这可能导致业务中断、数据丢失等严重后果。
漏洞评级
高危
漏洞验证
网页包含代码假如包含以下代码
<?php
eval($_REQUEST['cmd']);
?>
即可通过url执行命令
同时该代码存在,也可被蚁剑连接使用
如下代码也行
<?php
$_GET['a']($_REQUEST['b']);
?>
漏洞利用
- 可以蚁剑连接执行代码
- 也可以通过传参执行代码
漏洞防御
- 输入验证和过滤:对于用户输入的数据,必须进行严格的验证和过滤,以防止恶意代码的注入。可以使用白名单过滤或正则表达式验证来限制输入的内容,只接受预期的数据。
- 输入转义:对于用户输入的数据,必须进行适当的转义,以确保任何特殊字符都被正确处理。这可以通过使用安全的编码函数或框架提供的转义函数来实现。
- 最小权限原则:在配置服务器和应用程序时,应使用最小权限原则。即,将服务器和应用程序配置为以最低权限运行,以限制攻击者可能获得的权限。
- 安全的代码执行环境:在执行用户输入的代码之前,应确保在一个安全的环境中执行。这可以通过使用沙箱技术、限制执行环境的资源访问权限、禁用危险的系统函数等方式来实现。
- 安全的开发实践:在开发过程中,应该遵循安全的开发实践,包括对代码进行安全审查和测试,使用安全的编程语言特性和函数,及时修复已知的漏洞等。
- 更新和修补漏洞:及时更新和修补应用程序、操作系统和相关软件的漏洞是至关重要的。漏洞的修复补丁通常会包括对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漏洞的利用。