深入探讨RCE漏洞及其防御策略

1. RCE漏洞

1.1. 漏洞原理

远程代码执行(RCE)漏洞允许攻击者远程注入并执行操作系统命令或代码,从而控制后台系统。

1.2. 漏洞产生条件

  1. 调用第三方组件存在代码执行漏洞。
  2. 用户输入内容作为系统命令参数拼接到命令中。
  3. 对用户输入的过滤不严格。
  4. 存在可控变量或漏洞函数。

1.3. 漏洞挖掘

命令执行和代码执行漏洞通常需要结合网站实际情况进行分析。如果网站只是一个简单的静态页面,通常不存在此类漏洞。如果网站包含用户输入、调用接口等功能,可能存在漏洞,特别是通过代码审计或访问源代码能够有效挖掘这些漏洞。

1.4. 漏洞分类

1.4.1. 命令执行

1.4.1.1. 漏洞原理

由于应用系统需要提供指定的远程命令操作接口(如防火墙的WEB界面中提供Ping操作),如果设计者未对这些功能进行严格控制,可能导致攻击者提交恶意命令,从而控制服务器。

1.4.1.2. 命令执行危险函数
  • PHP:exec、shell、system、popen等
  • ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
  • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等
1.4.1.3. 漏洞检测
  • 白盒:代码审计
  • 黑盒:使用漏洞扫描工具、公开漏洞信息,手工检查功能点及参数值,关注是否涉及相关漏洞函数。如参数值加密,则需进行解密。

1.4.2. 代码执行

1.4.2.1. 漏洞原理

与命令执行漏洞类似,代码执行漏洞源于应用程序需要执行用户输入的部分代码。开放的代码执行接口需要严格控制,以避免出现漏洞。

1.4.2.2. 代码执行危险函数
  • PHP: eval、assert、preg_replace()、+/e模式(PHP版本 < 5.5.0)
  • JavaScript: eval
  • VBScript:Execute、Eval
  • Python: exec
1.4.2.3. 漏洞检测
  • 白盒:代码审计
  • 黑盒:使用漏洞扫描工具、公开漏洞信息,手工检查功能点及参数值,关注是否涉及相关漏洞函数。如参数值加密,则需进行解密。

1.5. 命令执行和代码执行区别

命令执行调用操作系统命令进行执行,代码执行调用服务器网站的代码进行执行。

2. 命令执行

2.1. 命令执行函数介绍

参考链接

2.1.1. system函数

执行系统命令,并输出结果,返回最后一行的结果字符串,执行失败返回false。

<?php
highlight_file(__FILE__);
system('pwd');
?>

2.1.2. exec函数

执行系统命令,不输出结果,返回最后一行的结果,可结合output输出结果。

<?php
highlight_file(__FILE__);
exec('pwd', $output);
var_dump($output);
?>

2.1.3. passthru函数

调用命令并输出结果,不返回值。

<?php
highlight_file(__FILE__);
passthru('ls');
?>

2.1.4. shell_exec函数

不输出结果,返回执行结果。使用反引号(``)时调用此函数。

<?php
highlight_file(__FILE__);
var_dump(shell_exec('ls'));
?>

2.1.5. 总结

还有其他命令执行函数,可以自行搜索学习。

2.2. 命令执行前置基础

在进行命令执行之前,需了解基本的Windows和Linux命令。

2.2.1. Windows基础命令

常用的cmd命令:

ping        # 测试连通性
tracert     # 追踪路由
telnet      # 远程连接
dir         # 列出目录
ipconfig    # 查看IP
arp -a      # 查看路由表
calc        # 打开计算器
regedit     # 打开注册表
netstat -ano# 查看端口信息

2.2.2. Linux命令

常用的Linux命令:

cd                  # 切换目录
ls                  # 显示当前目录下的文件
ifconfig            # 查看IP地址
cat /etc/passwd     # 查看password文件内容
id                  # 查看当前用户的id号
cat /etc/group      # 查看用户组文件内容
pwd                 # 显示当前目录
uname -a            # 查看系统版本
natstat -pantu      # 查看服务器端口信息
netstat -nr         # 查看网关和路由

2.2.3. 拼接符

|     # 只执行|后面的语句
||    # 前面命令失败时执行后面的语句
&     # 前后命令都执行
&&    # 前面命令成功时执行后面的语句
;     # 前后都执行

2.3. 命令执行案例

使用DVWA靶场进行演示。

2.3.1. 乱码解决

在DVWA\dvwa\includes目录下,将所有“charset=utf-8”替换为“charset=gb2312”。

修改编码

2.3.2. Low级别

2.3.2.1. 介绍

Low级别接受用户输入的IP,执行ping命令,对输入内容无过滤。

2.3.2.2. 操作
  1. 使用拼接符“|”,输入“127.0.0.1 | net user”。

使用 | 拼接符

  1. 使用拼接符“&&”,输入“127.0.0.1 && net user”。

使用 && 拼接符

2.3.3. Medium级别

2.3.3.1. 介绍

Medium级别过滤“&&”和“;”,可使用其他拼接符。

2.3.3.2. 操作

使用拼接符“&”,输入“127.0.0.1 & net user”。

使用 & 拼接符

2.3.4. High级别

2.3.4.1. 介绍

High级别过滤“| ”。

2.3.4.2. 操作

绕过空格过滤,输入“127.0.0.1|net user”。

绕过空格过滤

2.4. 命令执行总结

示例中使用“net user”命令,其他命令也可测试。确保开发过程中对参数进行严格限制,防止此类漏洞。

3. 代码执行

3.1. 代码执行函数介绍

3.1.1. ${} 执行代码

将中间的PHP代码进行解析。

<?php
${phpinfo()};
?>

3.1.2. eval函数

将字符串当作代码执行,需传入完整语句,以分号结尾。

<?php
eval('echo "hello";');
?>

3.1.3. assert函数

判断是否为字符串,如果是则执行代码。PHP7.0.29之后版本不支持动态调用。

低版本
<?php 
assert($_POST['a']);
?>
7.0.29之后
<?php
$a = 'assert';
$a(phpinfo());
?>

3.1.4. array_map函数

为数组的每个元素应用回调函数。

<?php
highlight_file(__FILE__);
$a = $_GET['a'];
$b = $_GET['b'];
$array[0] = $b;
$c = array_map($a, $array);
?>
构建的payload
?a=assert&b=phpinfo();

3.1.5. 总结

代码执行函数众多,可自行研究学习。

3.2. 代码执行前置基础

确保了解并掌握代码执行函数和基础代码执行技巧。

3.3. 代码执行案例

以低版本DVWA为例展示常见代码执行漏洞。

3.3.1. Low级别

3.3.1.1. 介绍

Low级别代码执行直接执行用户输入的PHP代码。

3.3.1.2. 操作
  1. 输入PHP代码,如${phpinfo()},进行代码执行。

Low级别代码执行

3.3.2. Medium级别

3.3.2.1. 介绍

Medium级别代码执行对输入代码进行一定过滤,但仍可绕过。

3.3.2.2. 操作
  1. 使用变种的eval函数进行代码执行。

Medium级别代码执行

3.3.3. High级别

3.3.3.1. 介绍

High级别代码执行对输入代码进行更严格的过滤。

3.3.3.2. 操作
  1. 通过调试和分析,找到未过滤的执行函数进行代码执行。

High级别代码执行

3.4. 代码执行总结

代码执行漏洞需对用户输入进行严格过滤和验证,避免直接执行用户输入的代码。

4. 防御与总结

4.1. 防御措施

  1. 禁用或严格控制危险函数。
  2. 对用户输入进行严格过滤和验证。
  3. 使用安全编程规范和最佳实践。
  4. 定期进行代码审计和安全测试。
  5. 及时更新和修补系统漏洞。

4.2. 总结

命令执行和代码执行漏洞是常见且危害严重的安全漏洞。通过合理的防御措施和代码审计,可以有效预防和应对此类漏洞。定期进行安全测试和漏洞修复是保障系统安全的重要措施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/388259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车雷达系统集成

汽车雷达系统集成是实现高级驾驶辅助系统&#xff08;ADAS&#xff09;和自动驾驶功能的重要环节&#xff0c;它涉及多种硬件和软件的协同工作。以下将详细讲解汽车雷达系统集成的各个方面&#xff1a; 雷达传感器选择 毫米波雷达&#xff1a;毫米波雷达主要使用24GHz和77GHz频…

【SQL Server点滴积累】SQL Server 2016数据库邮件(Database Mail)功能故障的解决方法

今天和大家分享SQL Server 2016数据库邮件(Database Mail)功能故障的解决方法 故障现象&#xff1a; 在SQL Server 2016中配置完成数据库邮件(Database Mail)功能后&#xff0c;当你尝试发送测试邮件后&#xff0c;既收不到测试邮件&#xff0c;也不显示错误消息 KB3186435 -…

Windows + Ubuntu双系统!小白轻松安装

前言 这几天有小伙伴想着装WindowsUbuntu双系统&#xff0c;但苦于找不到办法&#xff0c;就在某篇文章后台留言&#xff1a; 这不&#xff0c;今天就更新了嘛&#xff01;虽然做不到有求必应&#xff0c;但教程帖还是可以写写的&#xff0c;能帮一个是一个&#xff01; 今天要…

FFmpeg:多媒体处理的瑞士军刀

&#x1f60e; 作者介绍&#xff1a;欢迎来到我的主页&#x1f448;&#xff0c;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff08;领取大厂面经等资料&#xff09;&#xff0c;欢迎加我的…

docker安装phpMyAdmin

直接安装phpMyAdmin需要有php环境&#xff0c;比较麻烦&#xff0c;总结了使用docker安装方法&#xff0c;并提供docker镜像。 1.docker镜像 见我上传的docker镜像&#xff1a;https://download.csdn.net/download/taotao_guiwang/89595177 2.安装 1).加载镜像 docker load …

Portainer-CE(可视化工具)一键部署+中文版

目录 Portainer 的主要功能 安装官方版2.19.5 安装中文版 2.19.5 安装中文版2.11.0 Portainer 是一个开源的图形化管理工具&#xff0c;用于管理 Docker 容器、Swarm 集群和 Kubernetes 集群。它提供了一个用户友好的 Web 界面&#xff0c;可以帮助用户更轻松地管理和监控…

[数据结构] AVL树 模拟实现AVL树

标题&#xff1a;[数据结构] AVL树 && 模拟实现AVL树 水墨不写bug 正文开始&#xff1a; 目录 &#xff08;一&#xff09;普通二叉搜索树的痛点 &#xff08;二&#xff09;AVL树简介 &#xff08;1&#xff09;AVL树的概念 &#xff08;三&#xff09;AVL树的…

《程序猿入职必会(5) · CURD 页面细节规范 》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

为 Laravel 提供生产模式下的容器化环境:打造现代开发环境的终极指南

为 Laravel 提供生产模式下的容器化环境&#xff1a;打造现代开发环境的终极指南 在现代开发中&#xff0c;容器化已经成为一种趋势。使用 Docker 可以让我们轻松地管理和部署应用程序。本文将带你一步步构建一个高效的 Laravel 容器化环境&#xff0c;确保你的应用程序在开发…

一些Kafka面试题

Kafka是如何保证消息不丢失&#xff1f; 1.生产者发送消息到Broker丢失&#xff1a; 设置异步发送&#xff1a;发送失败则使用回调进行记录或者重发 消息重试&#xff1a;参数配置&#xff0c;可以设置重试次数 2.消息在broker中存储丢失 发送确认机制acks acks0&#xf…

谷粒商城实战笔记-MySQL踩坑记录

文章目录 1&#xff0c; Public Key Retrieval is not allowed问题描述解决办法 2&#xff0c;1044 -Access denied for user root% to database解决方案 1&#xff0c; Public Key Retrieval is not allowed 问题描述 打开DBeaver连接MySQL提示“Public Key Retrieval is no…

4款免费且安全:常用的PDF转Word在线转换工具推荐

现在办公越来越离不开电脑了&#xff0c;PDF文件和Word文档来回转换的需求也越来越大。作为一个天天跟文件打交道的上班族&#xff0c;我特别明白找个好用、靠谱的PDF转Word在线转换工具有多重要。今儿个&#xff0c;给大家说说五个免费的转换工具&#xff0c;都是我试过觉得挺…

多微信管理不再难:聚合聊天神器助你轻松应对!

在当今社交媒体高度发达的时代&#xff0c;很多人都在使用多个微信账号来管理个人与工作联系。面对如此众多的信息沟通&#xff0c;如何高效管理成了一个难题。 幸运的是&#xff0c;聚合聊天神器的出现&#xff0c;彻底改变了这一局面&#xff0c;让我们轻松应对多微信账号的…

接口测试框架中测试用例管理模块的优化与思考!

引言 在当今软件开发的快速迭代环境中&#xff0c;接口自动化测试不仅是确保软件质量的基石&#xff0c;更是推动持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;的核心环节。测试用例管理作为自动化测试中的重要模块&#xff0c;直接影响着测试的效…

【Python】面向对象的程序设计

一、面向对象的介绍 1.对象 对象是一种抽象概念&#xff0c;表示客观世界存在的实物&#xff0c;现实世界中能够看到的、触碰到的都可以成为对象&#xff0c;如&#xff1a;人、大象、小猫等。 对象通常分为两个部分&#xff0c;即静态部分和动态部分。静态部分为“属性”&a…

从教学到分享,2024精选录屏工具

如果你在公司里承担会议记录的职责&#xff0c;那录屏这项技能你一定要学会。像录屏大师这样的工具可以帮你在远程会议中进行录屏操作&#xff0c;方便你后期整理会议内容。 1.福昕录屏大师 链接直达&#xff1a;https://www.foxitsoftware.cn/REC/ 这款录屏工具提供了多种…

【Python】pandas:排序、重复值、缺省值处理、合并、分组

pandas是Python的扩展库&#xff08;第三方库&#xff09;&#xff0c;为Python编程语言提供 高性能、易于使用的数据结构和数据分析工具。 pandas官方文档&#xff1a;User Guide — pandas 2.2.2 documentation (pydata.org) 帮助&#xff1a;可使用help(...)查看函数说明文…

MyBatis入门如何使用操作数据库及常见错误(yml配置)

一&#xff0c;什么是MyBatis 是一款优秀的持久层框架&#xff0c;用于简化jdbc的开发 持久层&#xff1a;指的就是持久化操作的层&#xff0c;通常也就是数据访问层&#xff08;dao&#xff09;&#xff0c;也就是用来操作数据库。 也就是MyBatis是让你更加简单完成程序与数…

详细记录swfit微调interVL2-8B多模态大模型进行目标检测(附代码)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 RAGOnMedicalKG&#xff1a;大模型结合知识图谱的RAG实现DSPy&#xff1a;变革式大模…

PRD: Peer Rank and Discussion Improve Large Language Model based Evaluations

文章目录 题目摘要相关工作方法实验与分析指标进一步分析结论 题目 PRD&#xff1a;同行排名和讨论改善基于大型语言模型的评估 论文地址&#xff1a;https://arxiv.org/abs/2307.02762 项目地址&#xff1a;https://openreview.net/forum?idYVD1QqWRaj 摘要 如今&#xff0c…