远程代码执行漏洞


远程代码执行漏洞(Remote Code Execution,RCE)是一种安全漏洞,攻击者可以利用这种漏洞在远程服务器上执行任意代码。这意味着攻击者可以完全控制受影响的系统,并执行恶意操作。

远程代码执行漏洞通常存在于Web应用程序或服务器软件中。攻击者可以通过不正确的输入验证或没有正确的权限验证来利用这些漏洞。攻击者可以在受攻击系统上执行任意命令、上传、修改或删除文件,甚至获取系统管理员权限。

攻击者利用远程代码执行漏洞可以导致以下严重后果:

  1. 数据泄露:攻击者可以访问系统上的敏感数据,如用户密码、个人身份信息等。
  2. 拒绝服务:攻击者可以通过执行大量资源密集型操作,导致系统崩溃或变得不可用。
  3. 远程控制:攻击者可以远程控制受影响的系统,执行任意命令、创建后门等。
  4. 横向移动:攻击者可以利用远程代码执行漏洞,进一步渗透到内部网络,并对其他系统进行攻击。

为了防止远程代码执行漏洞,开发者和系统管理员应采取以下安全措施:

  1. 输入验证:对所有输入数据进行验证和过滤,避免用户输入恶意代码。
  2. 权限控制:限制用户的权限,确保只有授权用户可以执行危险的操作。
  3. 更新和维护:定期更新和维护软件、应用程序和操作系统,以修复已知的漏洞。
  4. 安全编码:使用安全编码实践,如避免使用不安全的函数、使用参数化查询等。
  5. 安全审计:定期进行安全审计,发现并修复潜在的漏洞。

及早发现和修复远程代码执行漏洞对于保护系统和用户数据的安全至关重要。

1> eval函数

eval() 函数用于将字符串当做表达式来求值,并返回结果。

eval($code string)参数是字符串类型,是字符串类型的代码,eval可以执行这些代码。

url?code=phpinfo();

漏洞原理RCE漏洞_安全

phpinfo()函数-探针函数,返回服务器信息

http://127.0.0.1/websec/day03/r.php?code=echo%20100/5;

漏洞原理RCE漏洞_web安全_02

url?code=echo 10*5;

漏洞原理RCE漏洞_php_03

url?code=echo 10%2b5;

漏洞原理RCE漏洞_php_04

漏洞原理RCE漏洞_web安全_05

echo 2+2; -、*都没有问题,那为什么+有问题呢?+不能通过url传递,需要将+进行url编码%2b。

2>assert函数-本意帮助开发者调试程序的。

漏洞原理RCE漏洞_安全_06

漏洞原理RCE漏洞_安全_07

漏洞原理RCE漏洞_字符串_08

3>preg_replace 函数-本意是正则模式匹配的查找替换

漏洞原理RCE漏洞_安全_09

漏洞原理RCE漏洞_字符串_10

// 1.$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
// 2.$replacement: 用于替换的字符串或字符串数组。
// 3.$subject: 要搜索替换的目标字符串或字符串数组。
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject)

php函数

PHP中常用的函数有很多,以下是一些常用的函数:

  1. echo:用于输出字符串或变量。
  2. print:用于输出字符串或变量,与echo类似。
  3. var_dump:用于打印变量的详细信息,包括类型和值。
  4. strlen:用于获取字符串的长度。
  5. strtolower:用于将字符串转换为小写。
  6. strtoupper:用于将字符串转换为大写。
  7. substr:用于截取字符串的一部分。
  8. explode:用于将字符串按指定的分隔符拆分成数组。
  9. implode:用于将数组元素拼接成字符串,可以指定拼接符号。
  10. array_push:用于向数组的末尾添加一个或多个元素。
  11. array_pop:用于删除并返回数组的最后一个元素。
  12. count:用于获取数组的长度。
  13. isset:用于检测变量是否设置和非null。
  14. empty:用于检测变量是否为空(0、空字符串、null、false等都被视为空)。
  15. file_get_contents:用于将文件内容读取到字符串中。
  16. file_put_contents:用于将字符串写入文件中。
  17. include:用于引用并执行指定文件。
  18. require:用于引用并执行指定文件,如果文件不存在或执行失败会报错。
  19. date:用于获取当前日期和时间。
  20. strtotime:用于将日期时间字符串转换为时间戳。

4>call_user_func(),调用用户函数

参数是函数名称,而不是函数调用

remote_code.php

<?php
header('content-type:text/html;charset=utf-8');

$code = $_GET['code'];
// 1.eval可以执行php代码,常常用来写一句话木马
// eval($code);
// 2.assert本意是用来在调试代码中做断言的,不是执行php代码,但是有这样的功能
// assert($code);
// 3.preg_replace本意是正则匹配的查找替换,同样在某些特殊的参数设置中,也可以执行代码
// echo preg_replace('/test/e',$code,'hello test');
// 4. call_user_func功能是调用其他函数,参数是函数名称,不是函数调用代码
echo call_user_func($code);

?>

preg_replace造成远程代码执行漏洞的案例


Vulhub - 漏洞环境的 Docker-Compose 文件

漏洞原理RCE漏洞_字符串_11

https://vulhub.org/#/docs/install-docker-one-click/