文章插图
linux在linux下 , 在ProcessImpl#start的调用中将会创建一个UNIXProcess对象并返回

文章插图

文章插图
在UNIXProcess类的构造方法中 , 调用了forkAndExec这个native方法

文章插图
创建了一个一个进程 , 并返回了对应进程的pid
构造命令执行ProcessBuilder#start在上面的流程分析中 , 知道了在Runtime.getRuntime().exec()方法调用的下一层就是使用ProcessBuilder#start方法 。
如果hook掉了我们可以通过使用ProcessBuilder类来进行命令执行的构造 。
new ProcessBuilder("calc").start();- 1.
//method_1Class pro = Class.forName("java.lang.ProcessBuilder");((ProcessBuilder) pro.getConstructor(List.class).newInstance(Arrays.asList("calc.exe"))).start();//method_2Class pro = Class.forName("java.lang.ProcessBuilder");pro.getMethod("start").invoke(pro.getConstructor(List.class).newInstance(Arrays.asList("calc.exe")));//method_3Class pro = Class.forName("java.lang.ProcessBuilder");((ProcessBuilder) pro.getConstructor(String[].class).newInstance(new String[][]{{"calc.exe"}})).start();//method_4Class pro = Class.forName("java.lang.ProcessBuilder");pro.getMethod("start").invoke(pro.getConstructor(String[].class).newInstance(new String[][]{{"calc.exe"}}));- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
ProcessImpl类的构造方法将会调用create方法执行native方法进行命令执行 。
【从Java源码来看Native命令执行方法】

文章插图
所以我们只需要反射获取ProcessImpl类的构造方法并实例化就会执行我们的恶意逻辑 。
UNIXProcess上面是针对windows的方式
针对linux , 在前面的分析中知道主要是在其start方法中调用了UNIXProcess类的构造方法 。

文章插图
执行forkAndExec这个native方法进行命令执行 。
other甚至于 , 我们知道最后主要是在create方法(windows)、forkAndExec方法(linux)中执行命令 , 我们同样可以通过反射这两个方法进行命令执行 。
本文作者:superLeeH , 转载请注明来自
推荐阅读
- 如何搭建一个智能客服:从NLP到多轮对话与多流程设计
- 使用 Linux 命令从图像中删除背景
- 从iPhone换到安卓手机是什么体验?过来人给我说了两个结果
- 毕滢|洪欣和张丹峰被曝没离婚,毕滢从中劝和,曝光和洪欣电话聊天内容
- 葡萄酒中的营养成分
- 自动化|要想当领导,从正确的推动开始
- 张丹峰|曝张镐濂仍感激张丹峰原因:从小给父爱,能帮拼事业,是彤彤亲爹
- 央视|从“央视一姐”到“查无此人”的鲁豫,终于落到如今这一下场
- 型男|从“中年油腻大叔”到“阳光时尚型男”只需这3步,不信你不会
- 大学生|北大女生从体制内离职,抑郁症不治而愈,能力并不能左右职场等级
