1. 代码执行与命令执行漏洞概述
在Web应用开发中,代码执行和命令执行漏洞是最危险的安全问题之一。这类漏洞允许攻击者在服务器上执行任意代码或系统命令,轻则导致信息泄露,重则完全控制服务器。作为开发者或安全测试人员,理解这些漏洞的原理、利用方式和防御方法至关重要。
代码执行漏洞通常发生在应用程序将用户输入直接作为代码解释执行时。而命令执行漏洞则出现在应用程序调用系统命令函数时,未对用户输入进行严格过滤。这两种漏洞虽然表现形式不同,但本质上都是由于对用户输入缺乏足够的验证和过滤造成的。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实验环境搭建
2.1 Kali Linux基础配置
Kali Linux是进行安全测试的理想环境,它预装了PHP、Apache等工具。以下是配置步骤:
- 启动Apache服务:
bash复制service apache2 start
访问http://127.0.0.1,看到Apache默认页面表示启动成功。
- 设置目录权限:
bash复制chmod 777 /var/www/html -R
这一步确保我们有权限在web目录创建和修改文件。
- 获取IP地址:
bash复制ifconfig
记录下IP地址,后续测试中需要用它替换示例中的"kaliIP"。
2.2 PHP版本管理
由于部分漏洞在不同PHP版本中表现不同,我们需要能够切换PHP版本:
- 安装PHP5.6:
bash复制apt update && apt install -y php5.6
- 切换PHP版本:
bash复制a2dismod php8.3
a2enmod php5.6
service apache2 restart
注意:在生产环境中,不应使用过时的PHP版本。这里仅用于测试目的。
3. PHP代码执行漏洞详解
3.1 eval()函数漏洞
eval()是最直接的代码执行函数,它将字符串作为PHP代码执行:
php复制<?php eval($_GET['x']); ?>
测试方法:
code复制http://kaliIP/eval_test.php?x=phpinfo();
漏洞原理:eval()直接执行用户输入,没有任何过滤。攻击者可以注入任意PHP代码。
防御方法:
- 避免使用eval()
- 如必须使用,严格过滤输入,只允许特定字符
3.2 assert()函数漏洞
assert()用于检查表达式是否为真,但在旧版PHP中也可执行代码:
php复制<?php assert($_GET['a']); ?>
测试方法:
code复制http://kaliIP/assert_test.php?a=phpinfo();
版本差异:
- PHP7.3+已修复此漏洞
- PHP7.2及以下版本支持字符串执行
3.3 preg_replace()+/e漏洞
preg_replace()的/e修饰符会执
