【Java代码审计】本地命令执行函数

1.本地命令执行函数

在服务器中时常会调用命令执行的代码,以完善或加强系统的功能需求,一旦这些调用命令执行的接口被攻击者恶意利用,就会导致服务器沦陷。
在Java中可用于执行系统命令的方式有API有:java.lang.Runtime、java.lang.ProcessBuilder、java.lang.UNIXProcess/ProcessImpl。这几种API又存在如下对应关系:
在这里插入图片描述

1.1 Runtime、ProcessBuilder、ProcessImpl的关系

Runtime构造器为私有,类的对象无法通过Runtime runtime = new Runtime();创建,只能通过静态方法Runtime r = Runtime.getRuntime();获取
在这里插入图片描述
跟进Runtime.getRuntime().exec()函数
在这里插入图片描述在这里插入图片描述调用了ProcessBuilder的start函数
在这里插入图片描述继续跟进ProcessBuilder的start函数,发现调用ProcessImpl的start函数

在这里插入图片描述

1.2 Runtime类

请求访问http://127.0.0.1:8080/runtime?cmd=calc
在这里插入图片描述

1.3 ProcessBuilder类

请求访问http://127.0.0.1:8080/processBuilder?cmd=calc
在这里插入图片描述

1.4 ProcessImpl类

因为ProcessImpl类的构造器和Runtime类一样都是private类型,无法直接new一个对象,但可以通过反射的方式调用。
在这里插入图片描述

//http://127.0.0.1:8080/processImpl?cmd=calc
@RequestMapping("/processImpl")
@ResponseBody
public void processImpl(@RequestParam(name = "cmd") String[] cmd) throws IOException {try {Class claszz = Class.forName("java.lang.ProcessImpl");Method method = claszz.getDeclaredMethod("start",new String[]{}.getClass(),Map.class,String.class,ProcessBuilder.Redirect[].class,boolean.class);method.setAccessible(true);method.invoke(null, cmd,null,".",null,true);} catch (ClassNotFoundException | NoSuchMethodException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}

请求访问http://127.0.0.1:8080/processImpl?cmd=calc
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/479901.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十、图像像素点的与、或、非、异或操作

项目功能实现&#xff1a;对图片像素点进行与或非操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 在OpenCV中&#xff0c;颜色是(B,G,R)通道排列 一、头文件 yuhuofei.h 定义一个YUHUOFEI类&#xff0c;里面声明了一个yuhuofei方法 #pragma once#include<openc…

【XR806开发板试用】+移植rosserial到XR806

1 XR806简介 板子来源于极术社区的试用&#xff0c;XR806的在线网址 其主要参数&#xff1a; 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线&#xff0c;可共存按键reboot按键 1&#xff0c;功能按键 1灯红色电源指示灯 1…

【计算机考研】408系统学习法

计算机专业课基本上都是数据结构&#xff0c;计算机组成原理&#xff0c;计算机网络和操作系统中的内容 如果你考的学校是自命题&#xff0c;那么考察的专业课一般比较少&#xff0c;只有1-3门&#xff0c;比较顶尖的学校自命题考的比408还要难。如果考的是408&#xff0c;那么…

学习鸿蒙基础(5)

一、honmonyos的page路由界面的路径 新建了一个page,然后删除了。运行模拟器的时候报错了。提示找不到这个界面。原来是在路由界面没有删除这个page。新手刚接触找了半天才找到这个路由。在resources/base/profile/main_pages.json 这个和微信小程序好类似呀。 吐槽&#xf…

python OpenCV:seamlessClone泊松融合

一、seamlessClone函数的用法 翻译 https://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp/ def seamlessClone(src, dst, mask, p, flags, blendNone): # real signature unknown; restored from __doc__"""seamlessClone(src, dst, mask, …

Django后台管理(一)

一、admin介绍 Django 最强大的部分之一是自动管理界面。它从你的模型中读取元数据,提供一个快速的、以模型为中心的界面,受信任的用户可以管理你网站上的内容 官网:https://docs.djangoproject.com/zh-hans/4.1/ref/contrib/admin/ 提示 后台管理系统是管理人员使用,不是…

Spring6学习技术|IoC+基于xml管理bean

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; IoC 控制反转。是一种设计思想。 1.获取bean对象的方法 通过id&#xff0c;通过class&#xff0c;和双重方式。 ApplicationContext context new Cla…

opencv图像处理(一)

一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…

宝塔nginx配置SpringBoot服务集群代理

宝塔nginx配置SpringBoot服务集群代理 1、需求&#xff1a; 现有一个springboot服务需要部署成集群&#xff0c;通过nginx负载均衡进行访问&#xff0c;其中这个springboot服务内置了MQTT服务、HTTP服务、TCP服务。 MQTT服务开放了1889端口 HTTP服务开放了8891端口 HTTP服务开…

Laravel02 路由基本概念和用法 给视图传递请求参数

Laravel02 路由基本概念和用法 1. 路由的基本概念2. 给视图传递请求参数 1. 路由的基本概念 routes文件夹下的web.php是用来定义路由规则的。 自己定义一个路径 2. 给视图传递请求参数 在laravel里使用一个辅助函数request来快速获取请求参数

OpenGL学习——17.模型

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

python+selenium 定位到元素,无法点击的解决方法

今天小编就为大家分享一篇pythonselenium 定位到元素,无法点击的解决方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22)…