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

网站开发报价合同网络平台制作公司

网站开发报价合同,网络平台制作公司,宜宾网站建设08keji,作者联合开发的小说网站叫什么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/785510/

相关文章:

  • 汕头建站公司模板官网摩尔庄园
  • 昭通seo一个seo良好的网站其主要流量往往来自
  • 注册网站建设开发购物网站模板免费
  • 海口网站建设公司哪个好容城轻松seo优化排名
  • 海南网站建设海南网络公司wordpress h5
  • 购物网站的策划cms监控手机客户端
  • 做网站贵不wordpress博客主题自媒体
  • 建社个人网站wordpress微电影模板下载
  • 小视频的网站怎么做的wordpress 转 ios app
  • 手机怎么做网站添加背景音乐深圳网站建设有限公司
  • 自己怎么做短视频网站制作app连接网站
  • 东盟建设集团重庆工程有限公司网站户外旅游网站排名
  • 网站前台登录模板企业网络营销策略分析
  • 网站开发学习视频如何搭建网站教程
  • 深圳的网站建设公司的外文名是惠州营销网站建设
  • 阿里云服务器建设网站mg动画制作软件
  • 百度推广账户登录张家港seo建站
  • wordpress字体投影河北seo技术培训
  • 提升网站建设品质价位石家庄网站建设加q.479185700
  • 爱站之家公司做网站设计要注意
  • 玉溪做网站公司网络营销咨询服务
  • 杭州移动公司网站百度网站免费电话
  • 北京网站建设公司电扬重庆工程建设招标网官方网站
  • 企业网络营销策划方案费用百度seo推广怎么做
  • 免费免费建网站做污水处理的 登录哪个网站
  • 阿克苏交通建设局网站求网站开发客户
  • 石家庄智能模板建站做类似淘宝的网站需多少资金
  • 网站开发公司 广告词免费制作视频的软件下载
  • 对接 网站后台网站英文怎么写
  • 自己创建网站濮阳市城乡一体化示范区七星医院