【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.mzph.cn/news/692663.shtml

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

相关文章

基于微信小程序的比赛赛程管理系统设计与实现

在全面健身的倡导下通过各级赛事的举办完成体育人才的选拔,当由于缺乏信息化的管理手段而只能通过人工完成比赛报名、赛程制定及成绩记录等流程的管理,因此常常因意外而导致比赛赛程管理不善、成绩不理想等问题出现。为了帮助比赛组织者优化赛程管理流程…

微服务建构思想

微服务架构思想 微服务架构优点 1、易于开发和维护:一个微服务只会关注一个特定的业务功能。所以它业务清晰。代码量较少。开发和维护 单个微服务相对简单。而整个应用是由若干个微服务构建而成的。 2、单个微服务启动较快:单个微服务代码量较少,所以启动比较快。 …

CSS position属性sticky

在开发时,经常会碰到需要这样一种情况 —— 网站滚动到一定高度的时候,让一部分内容作为navbar,也就是置顶显示,我们一般会使用js监听scroll事件来实现,但是新增的css3属性position:sticky可以简单实现,省去…

【动态规划专栏】专题二:路径问题--------6.地下城游戏

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 📚Todo-list 案例🐇组件化编码流程(通用)🐇实现静态组件🐇展示动态数据🐇交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

Docker从入门到上天系列第二篇:Docker与传统虚拟机对比

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、Security、Docker、Grpc、消息中间件、Rpc、SpringCloud等等很多应用和源码级…

代码随想录算法训练营day17||二叉树part04、110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和

注意:迭代法,可以先过,二刷有精力的时候 再去掌握迭代法。 110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是深度,可以巩固一下。 题目:给定一个二叉树&am…

为什么从没有负值的数据中绘制的小提琴图(Violin Plot)会出现负值部分?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 小提琴图(Violin Plot) 是一种用于展示和比较数据分布的可视化工具。它结合了箱形图(Box Plot)和密度图(Kernel Density Plot)的特…

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

文章目录 前言源码获取一、需求说明二、 调研pdf处理工具word处理工具 三、技术栈选择四、功能实现实现效果详细功能介绍详细代码实现项目目录WordUtilsMain类实现部分:第一部分Main类实现部分:第二部分Main类实现部分:第三部分 资料获取 前言…

数字化转型导师坚鹏:政府数据治理方法及成功案例

课程背景: 很多政府存在以下问题: 不知道如何理解数据治理标准化建设模式? 不清楚如何有效掌握政府数据治理落地技术? 不清楚如何有效学习标杆政府数据治理案例? 学员收获: 深入理解数据治理标准化建设模式。…

Python学习-环境搭建

一、序章 1、Python的后台是PyPI。 2、PyPI是一个拥有成千上万第三方模块的地方。 二、环境搭建 1、Python官网地址 https://www.python.org,在download中下载对应系统最新版本即可。 2、安装安装包 勾选“Add Python 3.10 to PATH”,然后点击“I…

05 扩展组件:自定义CheckBox组件

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起:自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起:自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件:令人抓狂的QToolButton文本图标居中问题-CSDN博客 目…

离线升级esp32开发板升级包esp32-2.0.14(最新版已经3.0alpha了)

1.Arduino IDE 2.3.2最新 2024.2.20升级安装:https://www.arduino.cc/en/software 2.开发板地址 地址(esp8266,esp32) http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32…

鸿蒙小案例-五子棋

鸿蒙小案例-五子棋 1.准备组件(组件布局) 2.下棋功能实现 3.机器人下棋功能实现 4.赢棋功能实现 5.附属功能实现刚开始以为挺简单的,越写越…emo 因为代码有点多,所以这里就简单讲下逻辑,文末贴上代码 逻辑只是我个人想的,不代…

线阵相机参数介绍之轴编码器控制

1.1 功能介绍 编码器是将检测对象的运动与相机拍摄取图相匹配的设备,也即检测对象运动一定距离,相机就拍摄一定行高的图像。 编码器会将检测对象的实际位移转换为固定数量电信号。例如:编码器的精度是2000p/r,该参数的含义是编码器每转一圈输…

IDEA插件推荐:免费好用!

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

C语言------------指针笔试题目深度剖析

1. #include <stdio.h> int main() { int a[5] { 1, 2, 3, 4, 5 }; int *ptr (int *)(&a 1); printf( "%d,%d", *(a 1), *(ptr - 1)); return 0; } 首先要明白这个强制类型转换&#xff0c;即int(*)[5]类型转换成int(*)类型&#xff1b; *&#xff…

MySQL 安装步骤

下载地址&#xff1a;https://downloads.mysql.com/archives/community/&#xff0c; 选择第二个 将下载的压缩包解压到自己想要放到的目录下&#xff08;路径中最好不要有中文&#xff09; 一、添加环境变量 环境变量里面有很多选项&#xff0c;这里我们只用到Path这个参数…

爬虫知识--02

免费代理池搭建 # 代理有免费和收费代理 # 代理有http代理和https代理 # 匿名度&#xff1a; 高匿&#xff1a;隐藏访问者ip 透明&#xff1a;服务端能拿到访问者ip 作为后端&#xff0c;如何拿到使用代理人的ip 请求头中&#xff1a;x-forwor…

day3 2/20

1> 使用多进程完成两个文件的拷贝&#xff0c;父进程拷贝前一半&#xff0c;子进程拷贝后一半&#xff0c;父进程回收子进程的资源 #include<myhead.h> int main(int argc, const char *argv[]) {int fd1-1,fd2-1;if((fd1open("./ggb.bmp",O_RDONLY,0664))…