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

网站综合建设笔记顺德网站制作公司

网站综合建设笔记,顺德网站制作公司,泊头做网站的有哪些,英文网站建设大概多少钱1 成因 开发者在某种开发需求时,需要引入对系统本地命令的支持来完成某些特定的功能,此时若未对用户的输入做严格的过滤,就可能发生命令注入。 2 造成命令注入的类或方法 Runtime类:提供调用系统命令的功能 ①Runtime.getRuntim…

1 成因

开发者在某种开发需求时,需要引入对系统本地命令的支持来完成某些特定的功能,此时若未对用户的输入做严格的过滤,就可能发生命令注入。

2 造成命令注入的类或方法

  • Runtime类:提供调用系统命令的功能

    ①Runtime.getRuntime():获得JVM运行时的环境

    ②Runtime.getRuntime().exec(cmd)执行用户输入的cmd命令

    存在命令注入的代码如下:

    protected void doGet (HttpServletRequest req, HttpServletRequest resp) throws ServletException, IOException{String cmd = req.getParameter("cmd");Process process = Runtime.getRuntime().exec(cmd);InputStream in = process.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] b = new byte[1024];//获取1M的一个缓冲区int i = -1;while((i=in.read(b)) != -1)//判断是否读完{byteArrayOutputStream.write(b,0,i);}PrintWriter Out = resp.getWriter();out.print(new String(byteArrayOutputStream.toByteArray()));
    }
    
  • ProcessBuilder:可以创建操作系统进程

    //利用指定的操作系统程序和参数构造一个进程生成器。
    ProcessBuilder(String… command) //设置此进程生成器的操作系统程序和参数。 
    command(List<String> command) 
    command(String… command) //设置此进程生成器的工作目录。
    directory(File directory) //返回此进程生成器环境的字符串映射视图。 environment方法获得运行进程的环境变量,得到一个Map,可以修改环境变量 
    environment() //使用此进程生成器的属性启动一个新进程。
    start() 
    
  • Groovy

    execute():可执行shell命令,eg:

    def command = "git log"
    def proc = command.execute()//执行git log的命令
    proc.waitFor()
    def status = proc.exitValue()
    

    result = sh(script: "shell command", returnStdout: true).trim()

    GroovyShell()

    //直接执行Groovy代码
    GroovyShell shell = new GroovyShell();shell.evaluate("\'calc\'.execute()");
    //通过加载本地脚本
    //1.
    GroovyShell shell = new GroovyShell();
    Script script = shell.parse(new File("src/main/java/ysoserial/vulndemo/GroovyTest.groovy"));
    script.run();
    //2.
    GroovyShell shell = new GroovyShell();
    shell.evaluate(new File("src/main/java/ysoserial/vulndemo/GroovyTest.groovy"));
    //通过加载远程脚本
    GroovyShell shell = new GroovyShell();shell.evaluate(new URI("http://127.0.0.1:8888/GroovyTest.groovy"));
    

3 连接符进行命令注入

在这里插入图片描述

如下代码不存在命令注入漏洞

protected ByteArrayOutputStream ping(String url) throws IOException{Process process = Runtime.getRuntime().exec("ping " + url);InputStream in = process.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();byte[] b = new byte[1024];int i = -1;while((i = in.read(b)) != -1){byteArrayOutputStream.write(b,0,i);}return byteArrayOutputStream;
}

若注入www.baidu.com&ipconfig时,java环境会把他当做完整的字符串,不会被当作两条命令执行。

对于Java环境中的命令注入,连接符的使用存在一些局限。

4 正确处理可控参数

public Process exec(String command) throws IOException {return exec(command, null, null);}
public Process exec(String command, String[] envp) throws IOException {return exec(command, envp, null);}
public Process exec(String cmdarray[]) throws IOException {return exec(cmdarray, null, null);}
public Process exec(String[] cmdarray, String[] envp, File dir)throws IOException {return new ProcessBuilder(cmdarray).environment(envp).directory(dir).start();}

当传入的参数类型为字符串时,会先经过StringTokenizer的处理,主要是针对空格以及换行符等空白字符进行处理,后续会分割出一个cmdarray数组保存分割后的命令参数,其中cmdarray的第一个元素为所要执行的命令。经过处理后的参数www.baidu.com&ipconfig成为ping命令的参数,因此此时的连接符&并不生效,从而无法注入系统命令。

http://www.yayakq.cn/news/182536/

相关文章:

  • 河南住房和城乡建设厅门户网站单页网站怎么优化
  • 韩国网站空间推荐36优化大师下载安装
  • 网站 易用性原则毕业设计做视频网站设计
  • 建站开发工具怎样做网站卖自己的产品
  • 南宁网站建设产品介绍秦皇岛视频优化代理
  • 原型图网站更换网站模板
  • 有教做鱼骨图的网站吗重庆沙坪坝房价
  • 哪个cms做企业网站好分销商城有哪些
  • 栖霞网站设计深圳企业名录
  • 网站怎么在百度做推广新网网站建设资料
  • wordpress看文网站宁波网页开发哪家好
  • 酒泉网站建设服务网站怎么做网页游戏
  • 为什么我自己做的网站百度不到网站购物车设计
  • 专门做团购的网站wordpress优化服务器
  • 做美食网站赚钱吗旅游电商网站建设方案
  • 租凭境外服务器做违规网站广州国创建设工程有限公司怎么样
  • 怎么创建手机网站知乎网站建设
  • 单页网站上传教程视频昆明的互联网公司有哪些
  • 四大门户网站对比分析建网站 方法
  • 上海网站建设__永灿品牌建站cms仿站教程
  • 网站弹出广告的是怎么做的专门做车评的网站
  • 做网站的参考书河南新乡做网站公司
  • 公司网站友情链接伍佰亿网站系统
  • 蛋糕店网站开发策划书浙江华临建设集团网站
  • 人力资源网站怎么做百度网站的域名地址
  • 网站开发保密协议范本下载wordpress如何使用百度主动推送
  • 如何快速建一个网站电子商务网站建设实践报告摘要
  • 网站建设哪家好知乎长沙装修公司口碑最好的是哪家
  • 广州有哪些做网站专业的公司汽车用品网站建设
  • 如何做flash游戏下载网站wordpress纯静态