「 典型安全漏洞系列 」07.OS命令注入详解

引言:什么是操作系统命令注入,如何防御和利用漏洞?

1. 简介

操作系统命令注入(OS command injection)是一种Web安全漏洞,允许攻击者在运行应用程序的服务器上执行任意操作系统(OS)命令,通常会完全破坏应用程序及其所有数据。

在这里插入图片描述

在这种攻击中,攻击者通过输入恶意代码来利用应用程序中的漏洞,从而在服务器上执行任意命令。这些命令可以包括删除文件、窃取数据、更改配置等。

2. 产生根因

  • Web应用服务器未对用户提交的参数进行有效检测和过滤;
  • 操作系统(OS)允许一条语句在使用连接符(如&&&||)和管道符来执行多条命令;

3. 攻击面

3.1. 攻击全景

污染源
数据格式
应用类型
注入路径
语言执行层
操作系统Shell/CMD
  • 污染源:Http请求、Socket、控制台输入、环境变量、文件和注册表
  • 数据格式:文本、JSON、XML、文件流
  • 应用类型:B/S、C/S、Console、Service
  • 注入路径:语言注入(如SPEL、OGNL、JSP)、Eval()、系统调用、SQL注入
  • 语言执行层:
    • Java:System.Runtime.getRuntime().exec()ProcessBuild().start()
    • C/C++:ShellExecute()system()exec()popen()
    • Python:os.system()os.popen()subprocess.popen()subprocess.call()
    • PHP:system()exec()popen()shell_exec()proc_open()
    • SHELL
    • DataBase
    • Perl
  • 操作系统Shell/CMD:Unix风格shell、Windows CMD。

3.2. 攻击路径

攻击者可以通过以下三种方式执行注入攻击:

  • 应用主动调用系统命令或shell脚本完成特定功能
  • 通过语言解释器(如Java语言可通过OGNL)或eval()函数注入代码,调用对应语言的系统调用函(参考上一章节)数执行注入命令。
  • 通SQL注入调用数据库的系统存储过程(如通过xp_cmdshell完成命令调用)。

4. 防御方法

  • 尽量不要从应用程序层代码中调用OS命令,如果实在要调用请使用封装后的安全函数;
  • 输入过滤:
    • 对参数进行白名单校验,如验证输入只包含字母,没有其他语法关键字或空格等。
    • 黑名单过滤,拦截命令注入特殊字符;
  • 参数编码:对常见特殊字符进行转码,避免命令注入

5. 参考

[1] https://portswigger.net/web-security/os-command-injection


推荐阅读:
「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解
「 典型安全漏洞系列 」05.XML外部实体注入XXE详解
「 典型安全漏洞系列 」04.服务器端请求伪造SSRF详解
「 典型安全漏洞系列 」03.跨站请求伪造CSRF详解
「 典型安全漏洞系列 」02.SQL注入详解
「 典型安全漏洞系列 」01.跨站脚本攻击XSS详解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

静态分析Golang语言生成函数调用关系的利器——go-callvis

目录 升级go删除旧版本安装新版本配置环境变量载入环境修改当前环境修改之后进入的环境 分析安装go-callvis分析其他包总结 导出文件总结 清晰主体脉络总结 其他 参考资料 不同于之前分析C语言项目的工具,go-callvis还是很方便使用。只要把两项工作做好就能顺利的使…

条件变量、线程池以及线程的GDB调试学习笔记

目录 一、条件变量 二、线程池概念和实现 三、线程的GDB调试 一、条件变量 应用场景:生产者消费者问题,是线程同步的一种手段。 必要性:为了实现等待某个资源,让线程休眠,提高运行效率 使用步骤: 初始…

SpringMVC 的请求流程(高频面试题)

文章目录 SpringMVC是什么,好处请求流程 SpringMVC 是什么,好处 Spring MVC 是Spring上最重要的框架。它是Web 框架,按照MVC 的模式,实现代码的解耦。Model 业务层、View 视图层、Controller 控制层。 将view层的请求数据在con…

【Android】在电脑连接操控手机上的Termux终端实现步骤

在Android手机上有一个Termux APP,可运行类似 Linux 终端的模拟器,想要学习Linux命令操作的话,可以用来练习,手机上输入命令不方便的话,可以用电脑连接手机终端输入命令练习的,来看看怎么实现连接。 文章目…

Advances in Deep Concealed Scene Understanding (伪装场景理解综述解读)

论文地址:https://link.springer.com/article/10.1007/s44267-023-00019-6 摘要 伪装场景理解是一个热门的计算机视觉课题,旨在感知展示伪装的物体,当前技术和应用的繁荣需要最新的研究调查,这可以帮助研究人员更好的了解全球CS…

【大数据】Flink 架构(四):状态管理

Flink 架构(四):状态管理 1.算子状态2.键值分区状态3.状态后端4.有状态算子的扩缩容4.1 带有键值分区状态的算子4.2 带有算子列表状态的算子4.3 带有算子联合列表状态的算子4.4 带有算子广播状态的算子 在前面的博客中我们指出,大…

做成任何事情的方法

怎么样把一件事情做成功呢? 传统的方法可能会告诉你:你首先要有一个目标,目标要明确,可量化,要遵循 SMART 原则;然后再把目标拆成一个个小目标,先实现一个小目标,再实现一个小目标&a…

研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记,Matlab/Simulink避坑指南(三)——向上取整Bug》 见《研发日记,Matlab/Simulink避坑指南(四)——transpose()转置函数Bug》 见《研发日记,Matlab/Simuli…

Java强训day7(选择题编程题)

选择题 public class Test01{private static int x 100;public static void main(String[] args) {Test01 hs1 new Test01();hs1.x;Test01 hs2 new Test01();hs2.x;hs1new Test01();hs1.x;Test01.x--;System.out.println("x"x);} }public class Test01{private …

高级IO之epoll模型

一、epoll模型介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,用于监视一个或多个文件描述符,以查看它们是否可以进行读取、写入或异常处理。它能够显著提高程序在大量并发连接…

C语言系列-浮点数在内存中的存储

🌈个人主页: 会编程的果子君 ​💫个人格言:“成为自己未来的主人~” 目录 浮点数在内存中的存储 浮点数的存储 浮点数存的过程 浮点数取的过程 题目解析 浮点数在内存中的存储 常见的浮点数:3.14159.1E10等,浮点数家族包括&…

微信开发者工具 git 拉取 failed invalid authentication scheme

微信开发者工具 git 拉取 failed invalid authentication scheme 拉取代码时报错,无效身份认证 解决方案: 1.检查git地址是否正常 2.检查git用户名密码是否正确

【Vue2 + ElementUI】更改el-select的自带的下拉图标为倒三角,并设置相关文字颜色和大小

效果图 实现 <template><div class"search_resources"><div class"search-content"><el-select class"search-select" v-model"query.channel" placeholder"请选择" change"handleResource&q…

【Matlab】音频信号分析及FIR滤波处理——凯泽(Kaiser)窗

一、前言 1.1 课题内容: 利用麦克风采集语音信号(人的声音、或乐器声乐),人为加上环境噪声(窄带)分析上述声音信号的频谱,比较两种情况下的差异根据信号的频谱分布,选取合适的滤波器指标(频率指标、衰减指标),设计对应的 FIR 滤波器实现数字滤波,将滤波前、后的声音…

258:vue+openlayers加载mapbox-style的地图

第258个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中添加mapbox地图,跟之前的不同处理方式是,这里采用了ol-mapbox-style插件来加载mapbox地图。具体请参考源代码和API。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示…

基于Micropython利用ESP32-C3墨水屏电子时钟方法

本篇笔记介绍一下我们设计制作的墨水屏时钟。 1、所需硬件 1&#xff09;合宙的ESP32-C3&#xff1a; 2&#xff09;电子价签拆出来的2.9寸墨水屏&#xff1a; ——电子价签型号为&#xff1a;Stellar-L&#xff0c;墨水屏型号为&#xff1a;E029A01。 3&#xff09;自己设计…

Linux-ROS学习之旅(一)

##本人使用的是双系统&#xff0c;noetic版本&#xff0c;学习ROS初衷是学习控制机械臂&#xff0c;具体下载方法见B站&#xff0c;观看的教程是古月居早年的教学视频&#xff0c;和ROS_wiki&#xff1a;ROS/Tutorials - ROS Wiki ##下一篇文章有具体的实例&#xff0c;但是所用…

OJ_阶乘的和

题干 c语言实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> #include<set> using namespace std;int main() {vector<int> factorialArr;//把0&#xff01;放入数组factorialArr.push_back(1);int curFactorial 1;for (in…

《合成孔径雷达成像算法与实现》Figure5.16

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果&#xff1a; 这个是当点着按钮的时候没有松开按钮的效果&#xff08;没有阴影&#xff09; 这个是当松开按钮的效果&#xff08;有阴影&#xff09; 原理讲解&#xff1a; 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说&#xff0c;它通…