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

代码安全规范1.1

命令注入是指应用程序执行命令的字符串或字符串的一部分来源于不可信赖的数据源,程序没有对这
些不可信赖的数据进行验证、过滤,导致程序执行恶意命令的一种攻击方式。
1 :以下代码通过 Runtime.exec() 方法调用 Windows dir 命令,列出目录列表。
import java.io.*;
public class DirList {
public static void main(String[] str) throws Exception {
String dir = System.getProperty("dir");
Process proc = Runtime.getRuntime().exec("cmd.exe /c dir" + dir);
int result = proc.waitFor();
if (result != 0) {
System.out.println("process error: " + result);
}
InputStream in = (result == 0) ? proc.getInputStream() : proc.getErrorStream();
int c;
while ((c = in.read()) != -1) {
System.out.print((char) c);
}
}
}
攻击者可以通过以下命令利用该程序。
java -Ddir='dummy & echo bad' DirList
该命令实际上执行的是以下两条命令。
cmd.exe /c dir dummy & echo bad
2 :以下代码来自一个 Web 应用程序,该段代码通过运行 rmanDB.bat 脚本启动 Oracle 数据库备份,
然后运行 cleanup.bat 脚本删除一些临时文件。脚本文件 rmanDB.bat 接受一个命令行参数,其中指明需要
执行的备份类型。
...
String btype = request.getParameter("backuptype");
String cmd = new String("cmd.exe /K \"c:\\util\\rmanDB.bat "+btype+"&& c:\\utl\\cleanup.bat\"");
System.Runtime.getRuntime().exec(cmd);
...
该段代码没有对来自用户请求中的 backuptype 参数做任何校验。
通常情况下, Runtime.exec() 函数不会执行多条命令,但在以上代码中,为了执行多条命令,程序调用
Runtime.exec() 方法,首先运行了 cmd.exe 指令,因此能够执行用两个与号分隔的多条命令了。如果攻击者
传递了一个形式为 "&& del c:\\dbms\\*.*" 的字符串,那么该段代码将会在执行其他指定命令的同时执行这
条命令。

相关文章:

  • QuaggaJS用法详解
  • elasticsearch基本操作笔记
  • Ubuntu 基于sdl 音频学习的基础代码
  • WebRTC源码线程-1
  • 天机学堂(学习计划和进度)
  • react public/index.html文件使用env里面的变量
  • 〈软件安装管家软件目录〉▷Windows系统版
  • 基于cornerstone3D的dicom影像浏览器 第二十九章 自定义菜单组件
  • 安装VUE客户端@vue/cli报错警告npm WARN deprecated解决方法 无法将“vue”项识别为 cmdlet、函数
  • 机器学习框架PyTorch
  • 装饰模式(Decorator Pattern)重构java邮件发奖系统实战
  • 知识图谱技术概述
  • RetroMAE 预训练任务
  • ant-design4.xx实现数字输入框; 某些输入法数字需要连续输入两次才显示
  • JS实现OSS断点续传
  • 实战设计模式之模板方法模式
  • 手机号段数据库的作用
  • MySQL 索引优化(Explain执行计划) 详细讲解
  • 【Oracle APEX开发小技巧12】
  • Elasticsearch集群手动分片分配指南:原理与实践
  • 国外做的比较的ppt网站有哪些/百度竞价是什么工作
  • 现在做网站怎么赚钱/百度平台客服电话
  • wordpress仿阿里主题/seo分析报告
  • wordpress点击按钮复制文字内容/seo网站外链工具
  • 想做交友网站怎么做/优化网站技术
  • 怎么做分销平台/优化防控举措