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

news2024/9/22 13:44:19

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.coloradmin.cn/o/1964684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于Linux服务器端更新命令apt update没有效果问题总结(校园网认证)

这里写目录标题 项目场景&#xff1a;问题描述错误解决过程个人解决apt update和apt upgrade 项目场景&#xff1a; 在使用Django进行服务器部署的时候&#xff0c;需要使用执行命令 apt update&#xff1a; 具体场景&#xff1a; 问题描述 需要使用apt命令进行升级、下载…

[HITCON 2017]SSRFme 1

目录 代码审计 符号shell_exec() 函数:GET " . escapeshellarg($_GET["url"])&#xff1a;pathinfo($_GET["filename"]basename() 题目解析 代码审计 118.182.186.90 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explod…

二叉树,二叉查找树,平衡二叉树

一.绪论: 二.数据结构(二叉树): 1.简介: 1)每一个节点&#xff08;也叫结点&#xff09;都是一个独立的对象-->当中不仅要存数据值&#xff0c;还要存父节点地址值&#xff0c;左子节点地址值&#xff0c;右子 节点地址值 2)没有父节点或者子节点的节点就记为null 2.遍历方…

【Bug记录】模板生成错误:不属于vector的成员

项目场景&#xff1a; 在调用自己写的一个简化版优先级队列时候报语法错误&#xff1a;模板生成错误 问题描述 模板生成错误&#xff0c;如下图 原因分析&#xff1a; 问题的分析&#xff1a;刚开始怀疑写模板写错了&#xff0c;之后看错误列表发现是top函数不属于vector。…

<数据集>棉花识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13765张 标注数量(xml文件个数)&#xff1a;13765 标注数量(txt文件个数)&#xff1a;13765 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Partially opened, Fully opened boll, Defected boll, Flower] 序…

llama-factory 系列教程 (六),linux shell 脚本自动实现批量大模型的训练、部署与评估

背景 最近在做大模型微调训练的评估&#xff0c;每次都要手动训练大模型&#xff0c;手动评估。 发现这样太浪费时间了&#xff0c;于是就尝试着使用linux shell 脚本&#xff0c;利用 for 循环自动实现大模型的训练、部署与评估。 实验&#xff1a;在不同的文本分类数据集尺…

记录两道关于编码解码的问题

环境&#xff1a;php环境即可&#xff0c;也可使用phpstudy。 参考文章: 深入理解浏览器解析机制和XSS向量编码-CSDN博客(很重要) HTML 字符编码&#xff08;自我复习&#xff09;-CSDN博客 例题1&#xff1a; <?php header("X-XSS-Protection: 0"); $xss …

Shell编程——简介和基础语法(1)

文章目录 Shell简介什么是ShellShell环境第一个Shell脚本Shell脚本的运行方法 Shell基础语法Shell变量Shell传递参数Shell字符串Shell字符串截取Shell数组Shell运算符 Shell简介 什么是Shell Shell是一种程序设计语言。作为命令语言&#xff0c;它交互式解释和执行用户输入的命…

【算法】一文带你搞懂0-1背包问题!(实战篇)

在【算法】一文带你搞懂0-1背包问题&#xff01;&#xff08;理论篇&#xff09;中&#xff0c;讲解了纯0-1背包问题及其原理&#xff0c;本篇文章中进入LeetCode中0-1背包问题应用的实战环节&#xff0c;主要难点其实在于看出是0-1背包问题、转换成0-1背包问题。 416. 分割等和…

动态卷积(轻量级卷积)替代多头自注意力

动态卷积&#xff0c;它比自注意力更简单、更有效。我们仅基于当前时间步长预测单独的卷积核&#xff0c;以确定上下文元素的重要性。这种方法所需的操作数量随输入长度呈线性增长&#xff0c;而自注意力是二次的。在大规模机器翻译、语言建模和抽象摘要上的实验表明&#xff0…

【论文阅读笔记 + 思考 + 总结】MoMask: Generative Masked Modeling of 3D Human Motions

创新点&#xff1a; VQ-VAE &#x1f449; Residual VQ-VAE&#xff0c;对每个 motion sequence 输出一组 base motion tokens 和 v 组 residual motion tokensbidirectional 的 Masked transformer 用来生成 base motion tokensResidual Transformer 对 residual motion toke…

机器学习 | 分类算法原理——似然函数

Hi&#xff0c;大家好&#xff0c;我是半亩花海。接着上次的逻辑回归继续更新《白话机器学习的数学》这本书的学习笔记&#xff0c;在此分享似然函数这一分类算法原理。本章的分类算法原理基于《基于图像大小进行分类》项目&#xff0c;欢迎大家交流学习&#xff01; 目录 一、…

个性化你的生产力工具:待办事项App定制指南

国内外主流的10款待办事项软件对比&#xff1a;PingCode、Worktile、滴答清单、番茄ToDo、Teambition、Todoist、Microsoft To Do、TickTick、Any.do、Trello。 在寻找合适的待办事项软件时&#xff0c;你是否感到选择众多、难以决断&#xff1f;一个好的待办事项工具可以大大提…

stl-algorithm【1】

#include《algorithm》 交换两数swap&#xff08;x&#xff0c;y&#xff09; 不只可以交换两个“数”&#xff08;数据类型&#xff09; 翻转【借助迭代器】reverse(it1,it2) 仍是左闭右开

国产开源夜莺部署

使用二进制方式部署夜莺 - 快猫星云 (flashcat.cloud) # install mysql yum -y install mariadb* systemctl enable mariadb systemctl restart mariadb mysql -e "SET PASSWORD FOR rootlocalhost PASSWORD(1234);"# install redis yum install -y redis systemctl…

navicat 17 下载安装

百度网盘 通过网盘分享的文件&#xff1a;Navicat17 链接: https://pan.baidu.com/s/1nFFQzWhjxRUM_X6bVlWNGw?pwd8888 提取码: 8888 1.双击运行安装包 2.点击下一步 2.勾选我同意&#xff0c;点击下一步 3.自定义安装路径&#xff0c;点击下一步 4.注意勾选桌面快捷方式&a…

编程新手指南:从入门到精通

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…

基于YOLOv8的高压输电线路异物检测系统

基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”&#xff0c;“风筝”&#xff0c;“气球”&#xff0c;“垃圾”】 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数…

众人帮蚂蚁帮任务平台修复版源码,含搭建教程。

全修复运营版本的任务平台&#xff0c;支持垂直领域细分&#xff0c;定向导流&#xff0c;带有排行榜功能&#xff0c;任务发布上传审核&#xff0c;用户信用等级&#xff0c;充值接口等等均完美可用。支付对接Z支付免签接口&#xff0c;环境配置及安装教程都已经打包。 搭建环…