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

应用软件安全编程--03净化传递给 Runtime.exec() 方法的非受信数据

每个 Java 应用都有一个 Runtime 类的实例, 一般需要使用 shell 时调用它,从而可以在 POSIX  中 使用/bin/sh 或者在Windows  平台中使用cmd.exe。 当参数中包含以空格、双引号或者其他以一/开头 的用来表示分支的字符时,就可能发生参数注入攻击。任何源于程序受信边界之外的字符串数据,在当 前平台作为命令来执行之前,都应经过净化。

对于净化传递给 Runtime,exec() 方法的非受信数据的情况,示例1给出了不规范用法(Java 语言) 示例。示例2给出了规范用法(Java 语言)示例。

示例1(Windows):class     DirList     {public static void main(String[] args) throws Exception {String  dir  =  System.getProperty("dir");Runtime  rt  =  Runtime.getRuntime();Process  proc  =  rt.exec("cmd.exe  /C  dir"+  dir);int  result  =  proc.waitFor();if    (result!=     0){System.out.printIn("process     error:"+    result);InputStream    in    =(result    ==0)?    proc.getInputStream():proc.getErrorStream();int     c;while((c        =        in.read())!=- 1){System.out.print((char)c);}

该代码示例使用dir命令列出目录列表。这是通过 Runtime.exec() 方法调用 Windows  的 dir命令来实现的。因为Runtime.exec() 方法接受源于运行环境的未经净化的数据,所以这些代码会引起命令 注入攻击。

攻击者可以通过以下命令利用该程序:

java-Ddir='dummy &.echo bad'Java

该命令实际上执行的是两条命令:

cmd.exe /C dir dummy &. echo bad

第一条命令会列出并不存在的dummy文件夹,并且在控制台上输出 bad。

示例2(净化):if(!Pattern.matches("[0-9A-Za-z@.]+",dir)){//..}

这个符合规范的代码实例会对非受信的用户输入进行净化,只允许白名单中的字符出现在参数中,并传给 Runtime.exec()方法,其他所有的字符都会被排除掉。

http://www.lryc.cn/news/214964.html

相关文章:

  • uniapp阻止冒泡的方法,点击事件嵌套点击事件,怎么阻止同时触发
  • 【云原生基础】了解云原生,什么是云原生?
  • Android.bp探究
  • 【LeetCode】415 字符串相加
  • 【RP-RV1126】配置一套简单的板级配置
  • 解决uniapp的video标签和transition属性使用时出现错位的问题
  • 电脑校园杂志电脑校园杂志社电脑校园编辑部2023年第9期目录
  • NSSCTF做题第十页(1)
  • 文件详细操作过程(C语言)
  • python使用ffmpeg来制作音频格式转换工具(优化版)
  • Debug技巧-不启用前端访问后端
  • 由CAB/PAB展开的一些思考
  • 系列十五、idea全局配置
  • 高德Go生态建设与研发实践
  • SpringCloud中Turbine 1.X版本BUG
  • SCSS的用法有哪些?分别举例
  • Spring controller层请求数据和响应数据的简单方法
  • 中国商界杂志中国商界杂志社中国商界编辑部2023年第10期目录查询
  • 记录 vue + vuetify + electron 安装过程
  • 短视频账号矩阵系统saas源码搭建/技术
  • 词向量模型Word2Vec
  • 公会发展计划(GAP):经过实战考验的 Web3 任务模式
  • 网络工程师基础知识(2)
  • 创建ABAP数据库表和ABAP字典对象-理解表字段02
  • 2021-arxiv-GPT Understands, Too
  • 【Spark】What is the difference between Input and Shuffle Read
  • redis相关的一些面试题?
  • 什么是Babel?它的主要作用是什么?
  • 【APP】go-musicfox - 一款网易云音乐命令行客户端, 文件很小Mac版本只有16.5M
  • P1284 三角形牧场