【问题标题】:Expression Language evaluated in Apache Web Server在 Apache Web 服务器中评估的表达式语言
【发布时间】:2015-11-05 10:16:08
【问题描述】:

我有一个 Apache Web 服务器 2.0 和 Tomcat 服务器 7.0。

Web 服务器将请求定向到 Tomcat 服务器。

web 和 tomcat 应用服务器都可以直接访问。

当表达式语言 ${9-4} 作为请求参数发送到 Web 服务器 URL 时,表达式将被计算并返回结果 5。

如果将相同的请求发送到 Tomcat 服务器,则结果为 ${9-4},无需评估。

例如:

网络服务器

请求:http://apache-web-server:port/context?test=${9-4}

jsp打印测试时的响应:5

Tomcat 服务器

请求:http://tomcat-server:port/context?test=${9-4}

在 jsp 中打印测试时的响应:${9-4}

Apache Web 服务器是否在此处评估表达式语言?

如何阻止服务器评估表达式语言?

我也在 Tomcat 应用程序服务器中使用 Struts 2。

如果 Apache Web 服务器具有计算表达式的能力,那么如何在 Apache Web 服务器中关闭 OGNL 表达式计算?

【问题讨论】:

  • Response when printing test in jsp 两个例子都不一样!只是改变航向? tomcat 是否坐在 apache 后面?您的意思是直接将请求发送到 tomcat 有效,但通过 apache 无效?
  • 是的。在我的环境中,可以直接访问 tomcat 服务器,也可以通过 Apache Web 服务器访问。标题更改表明以下请求是针对 Web 服务器或 tomcat 服务器的。当我使用 Apache Web 服务器 URL 并发送 test=${9-4} 作为请求参数时,正在评估表达式。但是当同一个请求直接发送到Tomcat服务器时就不是这样了。
  • 你能发帖和例子吗?

标签: java apache jsp tomcat struts2


【解决方案1】:

看起来 JSP 表达式语言正在解析您的参数。它实际上是您的应用程序存在的远程代码执行漏洞。

看看这篇文章: https://www.owasp.org/index.php/Expression_Language_Injection http://danamodio.com/appsec/research/spring-remote-code-with-expression-language-injection/

【讨论】:

    【解决方案2】:

    为什么你传递这些是作为 url 中的值。取而代之的是,您可以在变量中传递这些值并从 jsp 或控制器分配访问变量值,然后您可以在那里编写逻辑。

    【讨论】:

    • 这不能回答 OP 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2017-04-28
    • 2017-05-05
    相关资源
    最近更新 更多