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

代码安全规范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\\*.*" 的字符串,那么该段代码将会在执行其他指定命令的同时执行这
条命令。
http://www.xdnf.cn/news/12477.html

相关文章:

  • STM32标准库-TIM输出比较
  • table表格合并,循环渲染样式
  • git commit 执行报错 sh: -/: invalid option
  • SpringBoot+MySQL家政服务平台 设计开发
  • OpenAI对抗法庭命令:捍卫ChatGPT用户隐私之战
  • mybatis的if判断==‘1‘不生效,改成‘1‘.toString()才生效的原因
  • 浏览器后台服务 vs 在线教育:QPS、并发模型与架构剖析
  • 如何对Video视频进行SEO优化?
  • Ubuntu Cursor升级成v1.0
  • 大数据量高实时性场景下订单生成的优化方案
  • 2025主流智能体Agent终极指南:Manus、OpenManus、MetaGPT、AutoGPT与CrewAI深度横评
  • windows上的visual studio2022的项目使用jenkins自动打包
  • Visual Studio问题记录
  • 准确--k8s cgroup问题排查
  • 【学习笔记】构造函数+重载相关
  • 生成 Git SSH 证书
  • Linux 常用命令语法总结
  • 【Go语言基础【9】】字符串格式化与输入处理
  • 神经网络-Day46
  • react 常见的闭包陷阱深入解析
  • 循环神经网络(RNN)
  • 麒麟系统使用-进行.NET开发
  • 1.3 编译程序:单个C文件和多个C文件
  • Python打卡DAY46
  • JSON解析崩溃原因及解决方案
  • linux系统dd 工具介绍
  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • win10+TensorRT+OpenCV+Qt+YOLOV8模型部署教程
  • 2025年多层PCB技术发展与厂商实践指南
  • C++总复习