欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > pikachu靶场通关笔记28 命令执行关卡01-exec ping

pikachu靶场通关笔记28 命令执行关卡01-exec ping

2025/6/15 5:05:58 来源:https://blog.csdn.net/mooyuan/article/details/147686189  浏览:    关键词:pikachu靶场通关笔记28 命令执行关卡01-exec ping

目录

一、命令执行

二、RCE命令执行

三、远程命令执行ping

四、常用符号

1、&

2、&&

3、|

4、||

5、;

五、源码分析

六、解决乱码

七、渗透实战 

1、ipconfig命令执行

2、whoami命令执行

3、echo命令执行


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

一、命令执行

命令执行(Command Execution Vulnerability)是一种严重的安全风险,当应用程序在处理用户输入或其他外部数据时,没有对输入进行充分的验证和过滤,就可能导致攻击者能够注入恶意命令,并在服务器上执行。攻击者利用命令可执行系统命令,如查看敏感文件、创建或删除文件、启动或停止服务,甚至获取服务器的完全控制权,进而窃取数据、篡改网站内容、植入后门程序等,对系统和数据安全构成极大威胁。

二、RCE命令执行

RCE远程命令/代码执行,RCE英文全称:remote command/code execute。它是一种极为严重的安全风险,允许攻击者在未授权的情况下,通过网络远程在目标系统上执行任意代码。攻击者利用 RCE安全风险,可直接获取系统的控制权,进而窃取敏感信息,如用户账号、密码、企业机密数据等;还能篡改系统文件和配置,破坏系统的正常运行,导致业务中断;甚至可以在系统中植入后门程序,长期控制目标系统,为后续的攻击活动提供便利。

比较项命令执行远程命令执行(RCE)
攻击途径利用应用程序内部对输入等处理不当,在本地注入恶意命令,通过特定方式让应用执行非预期命令。如本地命令行工具输入验证缺陷时,攻击者直接在本地输入恶意命令进行渗透攻击者通过网络远程发送恶意请求,利用目标系统安全风险执行任意命令。如向存在 RCE 安全风险的 Web 应用发送精心构造的 HTTP 请求来执行命令
攻击场景多出现于本地应用程序、命令行工具或内部系统,攻击者需在本地环境找可利用入口点。如企业内部运维管理工具对用户输入命令参数校验不严格,内部人员可利用安全风险在本地执行恶意命令常见于网络暴露的服务、Web 应用程序等。攻击者可从互联网任何位置发起攻击,只要目标系统存在安全风险且网络可达。如未正确配置或存在代码缺陷的 Web 服务器易成攻击目标,攻击者通过远程访问特定接口触发RCE
危害程度危害主要局限于本地系统,成功利用可能获取本地部分权限、篡改本地文件或获取本地敏感信息等,一般不直接影响其他远程系统危害更严重,攻击者可远程控制目标系统,成功利用不仅获取所有权限,还可能以目标系统为跳板攻击相连内部系统,造成大规模数据泄露、系统瘫痪等严重后果

三、远程命令执行ping

远程命令执行ping安全风险的出现是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上.一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 然而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。

四、常用符号

在命令执行安全风险场景里,&&&|||; 这些符号被攻击者用于拼接命令和控制命令执行流程,以下是它们的用法和区别如下所示。

1、&

  • 作用:在多数操作系统中,& 用于让命令在后台执行。在命令执行安全风险里,它能使多个命令并行执行,即前一个命令启动后,后续命令无需等待其完成就会开始执行。
  • 示例:假设存在安全风险的系统允许用户输入并执行命令,攻击者输入 ping 127.0.0.1 & ls,那么 ping 命令和 ls 命令会同时开始执行。

2、&&

  • 作用&& 用于按顺序依次执行命令,并且只有当前一个命令成功执行(返回状态码为 0)时,才会执行后一个命令。这常用于需要前一个操作完成且成功后再进行下一步操作的情况。
  • 示例:输入 ping 127.0.0.1 && ls,只有当 ping 命令成功执行(即能正常连接到 127.0.0.1)时,ls 命令才会执行。

3、|

  • 作用| 是管道符号,它把前一个命令的输出作为后一个命令的输入。攻击者可利用它将多个命令组合起来,实现复杂的数据处理和操作。
  • 示例:输入 ls | grep testls 命令会列出当前目录下的文件和文件夹,然后将结果传递给 grep 命令,grep 会在这些结果中查找包含 "test" 的行。

4、||

  • 作用|| 同样用于连接两个命令,不过与 && 相反,只有当前一个命令执行失败(返回状态码不为 0)时,才会执行后一个命令。这可用于在某个操作失败时执行备用操作。
  • 示例:输入 false || ls,由于 false 命令执行失败,所以会接着执行 ls 命令。

5、;

  • 作用; 用于分隔多个命令,它会依次执行这些命令,无论前一个命令执行成功与否,后续命令都会继续执行。
  • 示例:输入 ping 127.0.0.1 ; ls,先执行 ping 命令,然后不管 ping 执行结果如何,都会执行 ls 命令。

五、源码分析

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

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

我们对rce_ping.php文件进行代码审计,这段 PHP 代码的主要功能是创建一个简单的 IP 地址 ping 工具。当用户通过 POST 方式提交表单,并且表单中包含一个名为 'ipaddress' 的字段时,代码会根据当前服务器的操作系统执行相应的 ping 命令(Windows 系统使用 ping 命令,Linux 系统使用 ping -c 4 命令),并将 ping 命令的执行结果存储在 $result 变量中。经过详细注释的源码如下所示。

// 初始化一个空字符串变量 $result,用于存储执行命令后的结果
$result = '';// 检查是否通过 POST 方式提交了表单,并且表单中名为 'ipaddress' 的字段不为空
if (isset($_POST['submit']) && $_POST['ipaddress'] != null) {// 从 POST 请求中获取用户输入的 IP 地址,并将其赋值给变量 $ip$ip = $_POST['ipaddress'];// 这是一段注释掉的代码,原本意图是将 IP 地址按点号 '.' 拆分成数组,// 然后可以对数组中的每个数字进行范围校验,// 例如第一位和第四位数字范围是 1 - 255,中间两位数字范围是 0 - 255// $check = explode('.', $ip); // 检查当前服务器操作系统是否为 Windows 系统if (stristr(php_uname('s'), 'windows')) {// var_dump(php_uname('s')); 这是一段注释掉的代码,用于打印当前服务器操作系统名称// 使用 shell_exec 函数执行 Windows 系统下的 ping 命令,将用户输入的 IP 地址直接拼接到命令中// 并将执行结果追加到 $result 变量中$result .= shell_exec('ping ' . $ip);} else {// 如果服务器操作系统不是 Windows 系统,则执行 Linux 系统下的 ping 命令,// 并指定 ping 的次数为 4 次,同样将用户输入的 IP 地址直接拼接到命令中// 并将执行结果追加到 $result 变量中$result .= shell_exec('ping -c 4 ' . $ip);}
}

很明显代码存在远程执行安全风险,这是因为没有对用户输入的 $ip 变量进行严格的过滤和验证,直接将其拼接到系统命令中。攻击者可以利用这个安全风险,通过构造特殊的输入,在 ping 命令之后追加其他恶意命令,从而实现远程命令执行。

六、解决乱码

本关卡输入www.baidu.com出现乱码时,找到rce_ping.php文件,在如下红框第67行插入如下语句,修改完毕保存rce_ping.php文件即可解决乱码问题,具体如下所示。

$result = iconv("GBK", "UTF-8", $result);

修改后再次输入www.baidu.com,回显即恢复正常,具体如下所示。

七、渗透实战 

1、ipconfig命令执行

输入以下需要执行的命令,"&"的作用是先执行www.baidu.com,紧接着执行ipconfig命令。

www.baidu.com & ipconfig

执行完命令后,可以在页面看到成功获取了用户的IP地址,具体如下图所示。

2、whoami命令执行

输入以下需要执行的命令,"&"的作用是先执行127.0.0.1,紧接着执行whoami命令。

127.0.0.1& whoami

执行完命令后,可以看到获取了用户的信息,具体如下图所示。

3、echo命令执行

输入以下需要执行的命令,"&"的作用是先执行www.qq.com,紧接着执行echo字符串和数字(888ljn)命令,具体如下所示。

www.qq.com&echo 888ljn

 执行完命令后,可以看到打印了字符串。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词