Spring aware接口的作用是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~