Java代码审计之命令执行(Java审计)

网友投稿 333 2022-10-03


Java代码审计之命令执行(Java审计)

​​​​Java代码审计系列课程​​

codeinject

访问url为ProcessBuilder(cmdArray).start()。从JDK1.5开始,官方提供并推荐使用ProcessBuilder类进行shell命令操作

public String codeInject(String filepath) throws IOException { String[] cmdList = new String[]{"sh", "-c", "ls -la " + filepath}; ProcessBuilder builder = new ProcessBuilder(cmdList); builder.redirectErrorStream(true);//将标准输入流和错误输入流合并,通过标准输入流读取信息 Process process = builder.start();//通过start方法启动前面输入的命令 return WebUtils.convertStreamToString(process.getInputStream());}

使用&&将我们要执行的命令拼接在参数后面就可以达到命令注入的目的。

codeinject/host

Process process = builder.start(); return WebUtils.convertStreamToString(process.getInputStream());}

在以往 Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的是比如test.com和mail.test.com两个域名IP相同,由同一台服务器支持,服务器可以根据host域,分别提供不同的服务,在客户端看来是两个完全不同的站点。 也就是说请求头中的host字段是可以被人为修改的,通过request.getHeader("host")从请求头直接获取host是不安全的,当我们构造这样的host字段时就会造成命令注入Host: baidu.com&&ipconfig。

codeinject/sec

这里给出了codeinject的修复版本,利用SecurityUtil.cmdFilter来对传入的参数进行过滤,严格限制用户输入只能包含a-zA-Z0-9_-.字符。

private static final Pattern FILTER_PATTERN = Pattern.compile("^[a-zA-Z0-9_/\\.-]+$");public static String cmdFilter(String input) { if (!FILTER_PATTERN.matcher(input).matches()) { return null; } return input;}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NMAP使用技巧(怎么用nmap)
下一篇:浅谈Java包装类型Long的==操作引发的低级bug
相关文章

 发表评论

暂时没有评论,来抢沙发吧~