【java代码审计】命令注入
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命令的参数,因此此时的连接符&并不生效,从而无法注入系统命令。
相关文章:
【java代码审计】命令注入
1 成因 开发者在某种开发需求时,需要引入对系统本地命令的支持来完成某些特定的功能,此时若未对用户的输入做严格的过滤,就可能发生命令注入。 2 造成命令注入的类或方法 Runtime类:提供调用系统命令的功能 ①Runtime.getRuntim…...
速锐得适配北汽EX系列电动汽车CAN总线应用于公务分时租赁
过去的几年,我们看到整个分时租赁业务出现断崖式下跌,这是我们看到这种市场情况,是必然,也是出乎意料。原本很多融资后的出行公司、大牌的出行服务商的分时租赁业务,受各种影响不得不转型成其他出行服务。例如…...
已解决ERROR: Failed building wheel for opencv-python-headless
已解决ERROR: Failed building wheel for opencv-python-headless Failed to build opencv-python-headless ERROR: Could not build wheels for opencv-python-headless, which is required to install pyproject.toml-based projects报错信息亲测有效 文章目录报错问题报错翻…...
每日获取安全资讯的网站,国内外共120个
国内 FreeBuf(https://www.freebuf.com/) 安全客(https://www.anquanke.com/) 雷锋网安全(https://www.leiphone.com/category/security) 先知社区(https://xz.aliyun.com/) CSDN安全…...
HUN工训中心:开关电路和按键信号抖动
工训中心的牛马实验 1.实验目的: 1) 认识开关电路,掌握按键状态判别、开关电路中逻辑电平测量、逻辑值和逻辑函数电路。 2) 掌握按键信号抖动简单处理方法。 3) 实现按键计数电路。 2.实验资源: HBE硬件基础电路实验箱、示波器、万用表…...
WordPress 主题 SEO 标题相关函数和过滤器教程wp_get_document_title()
WordPress 4.4.0 版本开始,加入了 wp_get_document_title(); 这个函数,而 wp_title(); 已经 deprecated 不推荐使用。因此,如果想要启用 WordPress 主题标题功能,在不安装 WordPress SEO 插件的情况下,可以使用以下代码…...
Qt 事件机制
【1】事件 事件是可以被控件识别的操作。如按下确定按钮、选择某个单选按钮或复选框。 每种控件有自己可识别的事件,如窗体的加载、单击、双击等事件,编辑框(文本框)的文本改变事件等等。 事件就是用户对窗口上各种组件的操作。…...
【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量
【Python】Numpy–np.linalg.eig()求对称矩阵的特征值和特征向量 文章目录【Python】Numpy--np.linalg.eig()求对称矩阵的特征值和特征向量1. 介绍2. API3. 代码示例1. 介绍 特征分解(Eigendecomposition),又称谱分解(Spectral d…...
医疗床头卡(WIFI方案)
一、产品特性 7.5寸墨水屏显示WIFI无线通信,极简部署,远程控制按键及高亮LED指示灯指示800*480点阵屏幕锂电池供电,支持USB充电DIY界面支持文本/条码/二维码/图片超低功耗/超长寿命,一次充电可用一年基于现有Wifi环境,…...
[YOLO] yolo博客笔记汇总(自用
pip下载速度太慢,国内镜像: 国内镜像解决pip下载太慢https://blog.csdn.net/weixin_51995286/article/details/113972534 YOLO v2和V3 关于设置生成anchorbox,Boundingbox边框回归的过程详细解读 YOLO v2和V3 关于设置生成an…...
Linux 常用 API 函数
文章目录1. 系统调用与库函数1.1 什么是系统调用1.2 系统调用的实现1.3 系统调用和库函数的区别2. 虚拟内存空间3. 错误处理函数4. C 库中 IO 函数工作流程5. 文件描述符6. 常用文件 IO 函数6.1 open 函数6.2 close 函数6.3 write 函数6.4 read 函数6.5 lseek 函数7. 文件操作相…...
【转载】bootstrap自定义样式-bootstrap侧边导航栏的实现
bootstrap自带的响应式导航栏是向下滑动的,但是有时满足不了个性化的需求: 侧滑栏使用定位fixed 使用bootstrap响应式使用工具类 visible-sm visible-xs hidden-xs hidden-sm等对不同屏幕适配 侧滑栏的侧滑效果不使用jquery方法来实现,使用的是css3 tr…...
奇瑞x华为纯电智选车来了,新版ADS成本将大幅下降
作者 | 德新 编辑 | 于婷HiEV获悉,问界M5将在4月迎来搭载高阶辅助驾驶的新款,而M9将在今年秋天发布。 奇瑞一侧,华为将与奇瑞首先推出纯电轿车,代号EH3。新车将在奇瑞位于芜湖江北新区的智能网联超级二工厂组装下线。目前超级二工…...
机器学习的特征归一化Normalization
为什么需要做归一化? 为了消除数据特征之间的量纲影响,就需要对特征进行归一化处理,使得不同指标之间具有可比性。对特征归一化可以将所有特征都统一到一个大致相同的数值区间内。 为了后⾯数据处理的⽅便,归⼀化可以避免⼀些不…...
程序员看过都说好的资源网站,看看你都用过哪些?
程序员必备的相关资源网站一.图片专区1.表情包(1)发表情(2)逗比拯救世界(3)搞怪图片生成(4)哇咔工具2.图标库(1)Font Awesome(2)iconf…...
Win11的两个实用技巧系列之设置系统还原点的方法、安全启动状态开启方法
Win11如何设置系统还原点?Win11设置系统还原点的方法很多用户下载安装win11后应该如何创建还原点呢?现在我通过这篇文章给大家介绍一下Win11如何设置系统还原点?在Windows系统中有一个系统还原功能可以帮助我们在电脑出现问题的时候还原到设置的时间上&…...
【Linux】项目的自动化构建-make/makefile
💣1.背景会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的 规则来指定,哪些文件需要先编译ÿ…...
【Redis学习2】Redis常用数据结构与应用场景
Redis常用数据结构与应用场景 redis中存储数据是以key-value键值对的方式去存储的,其中key为string字符类型,value的数据类型可以是string(字符串)、list(列表)、hash(字典)、set(集合) 、 zset(有序集合)。 这5种数据类型在开发中可以应对大部分场景的…...
踩了大坑:https 证书访问错乱
文章目录一、问题排查及解决问题一:证书加载错乱问题二:DNS 解析污染问题问题三:浏览器校验问题二、终极解决方法2.1 可外网访问域名2.2 只能内网访问域名2.3 内网自动化配置2.4 错误解决一、问题排查及解决 今天遇到这样一个问题࿰…...
大数据技术之Hive(四)分区表和分桶表、文件格式和压缩
一、分区表和分桶表1.1 分区表partitionhive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择式选择查询所需要的分区,这样的查询效率辉提高很多。1.1.1 分区表基本语…...
HoRain云--PHP操作MySQL:三种创建数据库方法详解
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
从JAR包到原生二进制:我的SpringBoot应用在Linux服务器上‘瘦身’实战记录(GraalVM 22.1.0 + Maven)
从JAR包到原生二进制:我的SpringBoot应用在Linux服务器上‘瘦身’实战记录 去年接手的一个电商促销系统,随着业务增长,JAR包启动时间从最初的8秒延长到23秒。某次大促期间,服务扩容时JVM预热导致的响应延迟直接影响了转化率——这…...
Qt界面嵌入Halcon窗口实战:告别弹窗,实现图像控件一体化显示
Qt与Halcon深度整合:实现无缝图像控件嵌入的工程实践 在工业视觉和医疗影像处理领域,Qt框架与Halcon图像处理库的结合堪称黄金搭档。但许多开发者初次尝试这种混合开发时,都会遇到一个恼人的问题——Halcon的显示窗口总是顽固地以独立弹窗形式…...
不只是显示中文:用fbterm给你的CentOS终端换个‘皮肤’,提升老旧服务器运维效率
终端美学革命:用fbterm打造高效CentOS字符界面工作环境 在服务器运维的世界里,图形界面往往被视为奢侈品。当您面对一台资源受限的老旧CentOS服务器,或者需要远程管理没有X11支持的机器时,字符界面就成了唯一的选择。但单调的终端…...
HFSS新手避坑指南:手把手教你设置Floquet Port和主从边界(附矩形波导实例)
HFSS阵列仿真实战:从Floquet Port到主从边界的精准设置 第一次打开HFSS准备仿真周期性结构时,那种既兴奋又忐忑的心情我至今记忆犹新。作为计算电磁学领域的黄金标准工具,HFSS在阵列天线、频率选择表面等周期性结构分析中展现出无可替代的价…...
TrollInstallerX技术深度解析:iOS 14.0-16.6.1系统权限获取完全指南
TrollInstallerX技术深度解析:iOS 14.0-16.6.1系统权限获取完全指南 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX TrollInstallerX是一款面向iOS 14.0至16…...
Android数据存储终极指南:SharedPreferences与ContentProviders完全解析
Android数据存储终极指南:SharedPreferences与ContentProviders完全解析 【免费下载链接】android-best-practices Dos and Donts for Android development, by Futurice developers 项目地址: https://gitcode.com/gh_mirrors/an/android-best-practices 在…...
模板进阶(C++初阶结束)
1.非类型模板参数模板参数分为类型形参和非类型形参类型形参:出现在模板参数列表中,跟class或者typename之类的参数类型名称非类型形参:就是用一种常量作为类(函数)模板的一个参数,在类(函数&am…...
AI时代就业真相:小白程序员如何抓住大模型机遇,收藏这份必看指南!
智联招聘数据显示,AI短期内替代部分岗位,但新增岗位同样显著。编辑、翻译等白领岗位需求缩减,而AI工程师、数据标注师等需求激增。初级职位衰减,中级与高级职位增长,企业招聘更看重软技能与AI应用能力。建议关注新质生…...
深度清理工具openclaw-uninstaller:跨平台卸载与Node.js生态清理指南
1. 项目概述:为什么我们需要一个专门的卸载工具?在软件开发和日常使用中,卸载一个应用程序听起来像是一个简单的“删除”操作,但实际情况往往复杂得多。尤其是那些功能强大、深度集成到系统中的工具,比如涉及3D重建、A…...
